1、完整版)基于TCS230颜色传感器的色彩识别器的设计 2 2 颜色识别及颜色传感器技术介绍 2.1 色彩识别 正如我们所知道的那样,色彩实际上是频率连续的电磁波,理论上色彩是无限的,但是人们能分辨的色彩是有限的,而且存在着个体差异。专业人士在设计一个色彩识别系统的时候,会很仔细地以5%甚至更小的区别来仔细调整色彩之间的比值。当这些类似色并排在一起时,即使是没有经过训练的普通人,除了色盲意外,都能够看出它们之间的区别。但是当一个色彩识别系统被确定并且单独展现时,普通人是无法区别出这5%什么更大的差异的.因此大多数人会简单的将他们所看到的某个色彩归类到他们能用简单语言描述的一
2、类颜色,比如红、黄、白,或在这个基础上加以设当的区分,比如橘黄,有点发白的橘黄等。这种普通人感知的色彩可以被看作围绕着一个核心色的一个一个的区间,在这个区间中的所有颜色在色彩识别的时候,都会被看作是一种色彩。初中同一色彩识别区间的所有色彩尽管值不一样,但是对于受众而言是一样的。 2.2 色彩识别算法 2。2.1色彩识别的应用 在现今的工业化社会中,色彩识别被广泛的应用于各行各业之中,如:各种物体表面颜色识别(产品包装色标检测,产品外表特征颜色的检测,液体溶液颜色变化过程的检测与控制,等等)。又如:图书馆使用颜色区分对文献进行分类,能够极大的提高排架管理和统计等工作;在包装行业,产品包装利
3、用不同的颜色或装磺来表示其不同的性质或用途;在品牌的形象设计和品牌推广的竞争中,色彩系统是一个比较重要的部分,设计师都会花费大量的时间细致地调整不同色彩搭配之间的组合关系,以达到更好的视觉效果。 2.2.2色彩识别一般算法 1). 色彩空间 通常所看到的物体的颜色, 实际上是物体表面吸收了照射到它上面的白光(日光)中的一部分有色成分,而反射出的另一部分有色光在人眼中的反应。任何一种颜色都可以用三种基本颜色按照不同的比例混合得到。 这里介绍一种最典型的颜色模型,即RGB模型.如图2.1所示,在这个颜色模型中, 3个轴分别为R、G、B。原点对应的为黑色(0, 0, 0),离原点最远的顶点对
4、应白色(255, 255, 255). 由黑到白的灰度分布在从原点到最远顶点间的连线上, 正方体的其他六个角点分别为红、 黄、绿、青、蓝、和品红.需要注意的一点是,RGB颜色模型所覆盖的颜色域取决于显示设备因光电的颜色特性。每一种颜色都有唯一的RGB值与它对应. 图2.1 RGB颜色模型 2)。 白平衡算法 颜色实际就是物体对光的反射或投射而表现出来在人眼中的反映, 而 TCS230 就是通过分别检测一种颜色反映出来的光的红、绿、蓝分量, 通过把光强线性转换为频率信号, 量化出R、G、B值, 从而计算出颜色。值得注意的是, 不同的光线通过物体反映出来的光强是不同的,
5、 而且非标准白光 (RGB三者不相等)在物体上反映出来的光强分量也是不同的。 为解决这个问题,就要进行白平衡, 即首先测量出基准光源的RGB光强值, 再测量出在标准光源下物体所反映出的光强值,两者之比就是物体的反射(或透射)性质, 即物体的实际颜色, 如公式(1), (2), (3)。 R=P物红/P源红 (1) G=P物绿/P源绿 (2) B=P物蓝/P源蓝 (3) 由于在 RGB 坐标下的颜色标准坐标为 0-255 之间,所以把所得结果乘以 255,即得到标准的 RGB 值。 透明物体直接测量光源的光强-频率值,不透明物体需要用白纸测量反射光源. 3 基于TC
6、S230的设计 3.1 MCS-51单片机简介 MCS—51系列单片机是美国Intel公司在1980年推出的高性能8位单片机,它包含51和52两个子系列. 对于51子系列,主要有8031、8051、8751三种机型,它们的指令系统与芯片引脚完全兼容,仅片内程序存储器有所不同,8031芯片不带ROM,8051芯片待4KB的ROM,8751芯片待4KB的EPROM.51子系列单片机的主要特点为: 4k/8k字节程序存储器; 128/256字节数据存储器; 32条I/O口线; 111条指令,其中大多数是单字节指令; 21个专用寄存器: 2个可编程定时/计数器: 5个中
7、断源,2个优先级; 一个全双工串行通信口; 外部数据存储器寻址空间为64k字节: 外部程序存储器寻址空间64k字节; 逻辑操作位寻址功能 MCS—51系列单片机应用十分广泛,各种教材和应用资料也很多.尽管INTEL公司本身没有在品种和功能上对MCS—51系列单片机作进一步的扩展,但是由于lNTEL公司开放了MCS-51系列单片机的核心技术,加之51系列单片机已经成为8位通用单片机的公认标准,因此,许多著名的半导体生产厂家。如Atmel、Philips、Cygnal、Dallas等纷纷推出以80C51为基核的各具特色、性能优异、功能强大的单片机,形成了庞大的 80C51系列单片机家族,
8、为熟悉51系列单片机的人们提供了最广泛的选择空间,也为51系列单片机注入了勃勃的生机. 图3。1 C51单片机管脚图 图3。2 C51单片机实物图 3.2 颜色传感器及硬件电路的连接 3.2。1 颜色传感器 TCS230芯片的结构框图与特点: TCS230是TAOS公司推出的可编程彩色光到频率的转换器,它把可配置的硅光电二极管与电流频率转换器集成在一个单一的CMOS电路上,同时在单一芯片上集成了红绿蓝(RGB)三种滤光器,是业界第一个有数字兼容接口的RGB彩色传感器,TCS230的输出信号是数字量,可以驱动标准的TTL或CMOS逻辑输入
9、因此可直接与微处理器或其他逻辑电路相连接,由于输出的是数字量,并且能够实现每个彩色信道10位以上的转换精度,因而不再需要A/D转换电路,使电路变得更简单,图3。3是TCS230的引脚和功能框图。 图3.3 TCS230的引脚和功能图 图3。3中,TCS230采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管,这些二极管分为四种类型,其16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器,其余16个不带有任何滤波器,可以透过全部的光信息,这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜
10、色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。工作时,通过两个可编程的引脚来动态选择所需要的滤波器,该传感器的典型输出频率范围从2Hz-500kHz,用户还可以通过两个可编程引脚来选择100%、20%或2%的输出比例因子,或电源关断模式。输出比例因子使传感器的输出能够适应不同的测量范围,提高了它的适应能力.例如,当使用低速的频率计数器时,就可以选择小的定标值,使TCS230的输出频率和计数器相匹配。 从图3.3可知:当入射光投射到TCS230上时,通过光电二极管控制引脚S2、S3的不同组合,可以选择不同的滤波器;经过电流到频
11、率转换器后输出不同频率的方波(占空比是50%),不同的颜色和光强对应不同频率的方波;还可以通过输出定标控制引脚S0、S1,选择不同的输出比例因子,对输出频率范围进行调整,以适应不同的需求。 下面简要介绍TCS230芯片各个引脚的功能及它的一些组合选项。 S0、S1用于选择输出比例因子或电源关断模式;S2、S3用于选择滤波器的类型;OE反是频率输出使能引脚,可以控制输出的状态,当有多个芯片引脚共用微处理器的输出引脚时,也可以作为片选信号,OUT是频率输出引脚,GND是芯片的接地引脚,VCC为芯片提供工作电压,表3。1是S0、S1及S2、S3的可用组合。 表3。1 S0、S1及S2、S3
12、的组合选项 S0 S1 输出频率定标 S2 S3 滤波器类型 L L 关断电源 L L 红色 L H 2% L H 蓝色 H L 20% H L 无 H H 100% H H 绿色 3。2。2 TCS230颜色传感器与51单片机的连接 TCS230是TAOS公司推出的可编程彩色光到频率的转换器,该传感器具有分辨率高、可变成的颜色选择与输出定标、单电源供电等特点;输出为数字量,可直接与微处理器连接。图3。4为TCS230颜色传感器的实物图。 图3.4 TCS230颜色传感器实物管脚图 图3。5 TCS230与单片机
13、的连接图 3。2。3 LCD1602与51单片机的连接 1、液晶显示器简介 液晶显示器简称LCD显示器,它是利用液晶经过处理后能改变光线的传输方向的特性显示信息的。液晶显示器具有体积小、重量轻、功耗极低、显示内容丰富等特点,在单片机应用系统中得到了日益广泛的应用。液晶显示器按其功能可分为三类:笔段式液晶显示器、字符点阵式液晶显示器和图形点阵式液晶显示器.前两种可显示数字、字符和符号等,而图形点阵式液晶显示器还可以显示汉字和任意图形,达到图文并茂的效果。 字符型液晶显示器模块是一种专门用于显示字母、数字、符号等的点阵式液晶显示模块。它是由若干个5*7或5*11等点阵符位组成的,每一个点阵
14、字符位都可以显示一个字符。点阵字符位之间有一定点距的间隔,这样就起到了字符间距和行距的作用。 要使用点阵型LCD显示器,必须有相应的LCD控制器、驱动器来对LCD显示器进行扫描、驱动,以及一定空间的ROM和RAM来存储写入的命令和显示字符的点阵.现在往往将LCD控制器、驱动器、RAM、ROM和LCD显示器连接在一起,称为液晶显示模块LCM。使用时只要向LCM送入相应的命令和数据就可以实现显示所需的信息。 目前市场上常用的有16字*1行、16字*2行、20字*2行和40字*2行等的字符液晶显示模块。这些LCM虽然显示字符数各不相同,但是都具有相同的输入输出界面.本文将介绍16*2字符型液晶显
15、示模块CA1602A的应用。 (1)、字符型液晶显示模块CA1602A的外观与引脚 CA1602A字符型液晶显示模块是2行16字的5*7点阵图形字符的液晶显示器,它的外观形状如图3.6。 图3。6 CA1602A的外观 CA1602A采用标准的16脚接口,各引脚情况如下: 第1脚:Vss,电源地 第2脚:Vcc,+5v电源 第3脚:Vo,液晶显示偏压信号 第4脚:RS,数据/命令选择端,高电平时选择数据寄存器,低电平时选择指令寄存器. 第5脚:RW:读/写选择端,高电平时进行读操作,低电平时进行写操作.但RS和RW共同为低电平时可以写入指令或者显示地址;当RS为低电平RW
16、为高电平时可以读忙信号;当RS为高电平RW为低电平时可以写入数据. 第6脚:E,使能端,当E端由高电平跳变成低电平时,液晶模块执行命令. 第7—14脚:D0—D7,为8位双向数据线。 第15脚:A,背光源正极 第16脚:K,背光源负极 (2)、指令格式与指令功能 LCD控制器HD44780内有多个寄存器,通过RS和RW引脚共同决定选择哪一个寄存器,选择情况见表3.2. 表3.2 HD44780内部寄存器选择表 RS RW 寄存器及操作 0 0 指令寄存器写入 0 1 忙标志和地址计数器读出 1 0 数据寄存器写入 1 1 数据寄存器读出 总共有1
17、1条指令,它们的格式和功能如下表3.3: 表3.3 控制命令表 序号 指令 RS RW D7 D6 D5 D4 D3 D2 D1 D0 1 清显示 0 0 0 0 0 0 0 0 0 1 2 光标返回 0 0 0 0 0 0 0 0 1 * 3 置输入模式 0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制 0 0 0 0 0 0 1 D C B 5 光标或字符移位 0 0 0 0 0 1 S/C R/L * * 6 置功能 0
18、 0 0 0 1 DL N F * * 7 置字符发生存储器地址 0 0 0 1 字符发生存储器地址 8 置数据发生存储器地址 0 0 1 显示数据发生存储器地址 9 读忙标志或地址 0 1 BF 计数器地址 10 写数到CGRAM或DDRAM 1 0 要写的数据内容 11 从CGRAM或DDRAM读数 1 1 读出的数据内容 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效.要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3。7是1602的
19、内部显示地址。 图3。7 1602的内部显示地址 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大 小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址 41H中的点阵字符图形显示出来,我们就能看到字母“A"。 (3)、LCD显示器的初始化 LCD使用之前须对它进行初始化,初始化可以通过复位完成,也可以在复位后完成,初始化过程如下: 1)。清屏。 2).功能设置。 3)。开/关显示设置。 4).输入方式设置。
20、 2、1602显示器与单片机的连接 在本设计中,1602显示器与单片机的连接如下图3.8所示: 图3。8 1602显示与单片机连接图 3。3 TCS230颜色识别原理简介 TCS230识别颜色的原理: 由上面的介绍可知,这种可编程的彩色光到频率转换器适合于色度计测量应用领域,如彩色打印、医疗诊断、计算机彩色监视器校准以及油漆、纺织品、化妆品和印刷材料的过程控制和色彩配合。下面以TCS230在液体颜色识别中的应用为例,介绍它的具体使用.首先了解一些光与颜色的知识. (1) 三原色的感应原理: 通常所看到的物体颜色,实际上是物体表面吸收了照射到它上面的白光(日光)中的一
21、部分有色成分,而反射出的另一部分有色光在人眼中的反应.白色是由各种频率的可见光混合在一起构成的,也就是说白光中包含着各种颜色的色光(如红R、黄Y、绿G、青V、蓝B、紫P).根据德国物理学家赫姆霍兹(Helinholtz)的三原色理论可知,各种颜色是由不同比例的三原色(红、绿、蓝)混合而成的。 (2)TCS230识别颜色的原理: 由三原色感应原理可知,如果知道构成各种颜色的三原色的值,就能够知道所测试物体的颜色。对于TCS230来说,当选定一个颜色滤波器时,它只允许某种特定的原色通过,阻止其他原色的通过.例如:当选择红色滤波器时,入射光中只有红色可以通过,蓝色和绿色都被阻止,这样就
22、可以得到红色光的光强;同时,选择其他的滤波器,就可以得到蓝色光和绿色光的光强.通过这三个值,就可以分析投射到TCS230传感器上的光的颜色。 (3)白平衡和颜色识别原理: 白平衡就是告诉系统什么是白色。从理论上讲,白色是由等量的红色、绿色和蓝色混合而成的;但实际上,白色中的三原色并不完全相等,并且对于TCS230的光传感器来说,它对这三种基本色的敏感性是不相同的,导致TCS230的RGB输出并不相等,因此在测试前必须进行白平衡调整,使得TCS230对所检测的"白色”中的三原色是相等的.进行白平衡调整是为后续的颜色识别作准备。在本装置中,白平衡调整的具体步骤和方法如下:将空的试管放置在传感
23、器的上方,试管的上方放置一个白色的光源,使入射光能够穿过试管照射到TCS230上;根据前面所介绍的方法,依次选通红色、绿色和蓝色滤波器,分别测得红色、绿色和蓝色的值,然后就可计算出需要的3个调整参数。 当TCS230识别颜色时,就用这3个参数对所测颜色的R、G和B进行调整。这里有两种方法来计算调整参数:1、依次选通三颜色的滤波器,然后对TCS230的输出脉冲依次进行计数。当计数到255时停止计数,分别计算每个通道所用的时间,这些时间对应于实际测试时TCS230每种滤波器所采用的时间基准,在这段时间内所测得的脉冲数就是所对应的R、G和B的值。2、设置定时器为一固定时间 (例如10ms),然后
24、选通三种颜色的滤波器,计算这段时间内TCS230的输出脉冲数,计算出一个比例因子,通过这个比例因子可以把这些脉冲数变为255.在实际测试时,室外同样的时间进行计数,把测得的脉冲数再乘以求得的比例因子,然后就可以得到所对应的R、G和B的值. 4 色彩识别器系统的设计与实现 4.1 系统结构框图 色彩识别系统是基于MCS—51系列单片机控制的基础上,添加了TCS230颜色传感器采集模块,TCS230驱动模块,四个白色LED补光模块,LCD1602液晶显示模块,在这些模块的基础上实现的色彩识别系统,色彩识别系统的设计如图4。1系统框架所示。 图 4。1 系统框架 图4.2
25、 色彩识别系统实物图 4。2 TCS230驱动模块 TCS230采用8引脚的SOIC表面贴装式封装,在单一芯片上集成有64个光电二极管,这些二极管分为四种类型,其16个光电二极管带有红色滤波器;16个光电二极管带有绿色滤波器;16个光电二极管带有蓝色滤波器,其余16个不带有任何滤波器,可以透过全部的光信息,这些光电二极管在芯片内是交叉排列的,能够最大限度地减少入射光辐射的不均匀性,从而增加颜色识别的精确度;另一方面,相同颜色的16个光电二极管是并联连接的,均匀分布在二极管阵列中,可以消除颜色的位置误差。 本模块主要包括TCS230初始化、定时器初始化和颜色采集,具体程序如下: voi
26、d TCS230Inital(void) { DDRC= DDRC|0x0f;PORTC = PORTC|0x0f; PORTC = PORTC|0x20; DDRC= DDRC|0x20; PORTC = PORTC&0xdf;TCS230Mode(FrequencyMode,PhotoDiodeMode); } void TimerInital(void) { TCCR1A=0x00; TCCR1B=0x06; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00;ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; O
27、CR1BH=0x00; OCR1BL=0x00; ASSR= 0x00; TCCR2 = 0x07; TCNT2 = 0xb7; OCR2= 0x00; TIMSK=0x40; } unsigned char TCS230Mode(unsigned char FOutMode,unsigned char PhotoType) { if( FOutMode == F_POWERDOWN) { PORTC = PORTC & 0xfc; } else if(FOutMode == F_100_2) { PORTD = PORTD & 0xfe;PORTD = PORTD |
28、 0x02;} else if(FOutMode == F_100_20) { PORTD = PORTD & 0xfd;PORTD = PORTD | 0x01;} else if(FOutMode == F_100_100) { PORTD = PORTD | 0x03; } else { return 1; } FrequencyMode = FOutMode; if(PhotoType==PH_RED) {PORTD = PORTD & 0xf3; } else if(PhotoType==PH_CLEAR) { PORTC = POR
29、TC & 0xf7;PORTC = PORTC | 0x04; } else if(PhotoType==PH_BLUE) { PORTC = PORTC & 0xfb;PORTC = PORTC | 0x08; } else if(PhotoType==PH_GREEN) { PORTC = PORTC | 0x0c; } else { return 2; } PhotoDiodeMode=PhotoType; return 0; } 4.3 TCS230颜色采集模块的设计 4.3.1 TCS230颜色采集模块与51单片机的
30、接口 本设计中,TCS230模块主要与51单片机的P1口和P3口连接。P1口是准双向口,它只能作通用I/O接口使用。P1口的输出只由一个场效应管与内部上拉电阻组成。其输入输出原理特性与P0口作为通用I/O接口使用时一样,当其输出时,可以提供电流负载,不必像P0口那样需要外接上拉电阻。P1口具有驱动4个LSTTL负载的能力。 TCS230颜色传感器与51单片机具体的连接方式如图4。3所示. 4。3。2 TCS230颜色采集模块的软件设计 本设计的TCS230颜色采集模块主要是利用定时器/计数器T0和外部中断INT0来实现的。流程图4.4所示. 图4。3 TCS230与51的连接
31、图 图4。4 颜色采集模块软件流程图 1、定时器/计数器:MCS—51系列中51子系列有两个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1;52子系列有三个,比51子系列多一个定时/计数器T2.每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式.通过编程可设定工作于某种方式。 在本设计中,设置T0的工作方式为方式0,定时1ms,赋初值为TH0=0xe0,TL0=0x18,在定时器/计数器T0中断函数void timer0(void)中重新给定时器/计数器T0赋初值,并且设定了一个变量lck,用来计数定时器/计数器T0中断的
32、次数,当变量lck达到1000时,表明定时了一秒钟,而外部中断0的中断函数void int0(void)中定义的变量dispcount在定时一秒时间达到时候的值就是此时所选择的某种颜色通道的频率值。具体程序如下: void initTimer(void) // 定时器初值1ms { TMOD=0x0; TH0=0xe0; TL0=0x18; } void timer0(void) interrupt 1 //定时1秒,每一秒中断一次,所记得数就是频率 { TH0=0xe0; TL0=0x18; lck++; if(lck==1000) { disp=di
33、spcount; lck=0; dispcount=0; } } 2、MCS-51单片机提供5个硬件中断源:2个外部中断源INT0和INT1;2个定时器/计数器T0和T1的溢出中断TF0和TF1; 本设计中采用外部中断请求INT0来接收传感器的输出值.TCS230颜色传感器的OUT输出端与外部中断INT0(P3。2)管脚相连接,在外部中断INT0的中断函数void int0(void)中定义了一个变量dispcount,当接收一个脉冲信号时,dispcount就会加1,在定时/计数器T0设定的一秒时间内所累计的数值就是频率。具体程序如下: void int0(voi
34、d) interrupt 0 //外部中断0,TCS230的OUT端口接到INT0端口 { dispcount++; //每一次中断,计数加一 } 3、RGB三种色彩通道采集: void red() //红色通道 { P1=0x01; delay1ms(1100); date=disp/100; date=(255。0/153)*date; } //153是在纯白情况下测得的红色通道频率值 void green() //绿色通道 { P1=0xc1; delay1ms(1100); date=disp/100; date=(255.0/
35、145)*date; } //145是在纯白情况下测得的绿色通道频率值 void blue() //蓝色通道 { P1=0x81; delay1ms(1100); date=disp/100; date=(255。0/183)*date; } //183是在纯白情况下测得的蓝色通道频率值 4。4 4个白色LED补光模块的设计 因为本设计的TCS230颜色采集模块需要在密闭的环境下实现,所以需要另外添加一个稳定的光源.本模块主要是用4个白色的LED光,照在待检测的物体上,然后反射到TCS230颜色传感器上,达到合适的光强的目的.电路图设计如图4.5所示。 4。5
36、 LCD1602液晶显示模块 4.5.1 LCD1602液晶显示模块硬件设计 本设计中的LCD1602液晶显示模块主要是和MCS—51单片机的P0口和P2口连接的。P0口是一个三态双向口,可作为地址/数据分时复用接口,也可作为通用的I/O接口。它由一个输出锁存器、两个三态缓冲器、输出驱动电路和输出控制电路组成。 P2口也是准双向口,它有两种用途:通用I/O接口和高8位地址线。与P1口相比,它只在输出驱动电路上比P1口多了一个模拟转换开关MUX和反相器。 LCD1602与51单片机的具体连接方式如图4.6所示. 图4。5 白色LED补光模块电路图 4.5。2 LCD1602
37、液晶显示模块软件设计 图4。6 LCD1602与51单片机的具体连接图 图4。7 LCD1602显示模块流程图 本设计的LCD1602液晶显示模块主要是利用比较经典的LCD显示方法来进行设计的,即字符串的方式进行输出显示。流程图如图4.7所示. 首先,将MCS-51单片机处理所得的最终数据送入uchar * int2str(uint d)函数,此函数的功能是将接收到的整型数d的每个位的数字取出,放到一个字符型的数组str[]中,以便LCD1602输出显示,具体程序如下: uchar * int2str(uint d) //整型数转化成字符型数组函数 { str[0
38、]=’0'+d/100; str[1]='0’+d%100/10; str[2]='0’+d%10; return str; } 其次,对LCD1602进行初始化和清屏,使用8位数据,显示两行,使用5*7的字型;显示器打开,关闭光标闪烁;输出方式为字符不动,光标自动右移一格。具体程序如下: void init_LCD(void) // 初始化lcd { LCD_w_com(0x38); // lcd为两行显示8位数据线有效 LCD_w_com(0x0e); // 显示字符 关闭光标 L
39、CD_w_com(0x06); // 输入方式设置 光标向右移动一位 ac—1 } void clear_LCD() //清屏 { LCD_w_com(0x01); //清屏指令 LCD_w_com(0x02); // 光标归位 即光标置于左上位置 } 最后,是向LCD1602液晶显示器写命令函数void LCD_w_com(unsigned com)和写数据函数void LCD_w_dat(uchar dat)以及字符串输出函数void display_LCD_string(uchar *p)、光标定位函数void
40、 gotoxy(unsigned x,unsigned y)。写命令函数的功能是向LCD1602中写入相应的命令指令,比如清屏命令LCD_w_com(0x01),实现LCD1602清屏功能.写数据函数和字符串输出函数的功能是向LCD1602写入要输出的数据,字符串输出函数中定义的指针P指向前面的字符型数组str[],一位一位的输出。光标定位函数的功能是告诉LCD1602要输出的数据的显示位置。具体程序如下: void LCD_w_com(unsigned com) //写命令函数,com为 要写的指令 { RW=0; RS=0; E=1; P0=com; delay1ms
41、10); E=0; RW=1; } void LCD_w_dat(uchar dat) // 写数据 函数, 写要显示的数据 { RW=0; RS=1; E=1; P0=dat; delay1ms(10); E=0; RW=1; } void display_LCD_string(uchar *p)//字符串输出函数 { while(*p) { LCD_w_dat(*p); p++; delay1ms(10); }} void gotoxy(unsigned x,unsigned y) //定位 ,x为行,y为列 { if(x==1) LCD_w_com(0x80+y); else LCD_w_com(0xC0+y); } XXI






