单片机与液晶显示器课件_第1页
单片机与液晶显示器课件_第2页
单片机与液晶显示器课件_第3页
单片机与液晶显示器课件_第4页
单片机与液晶显示器课件_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

讲座四门逞张什惋伯绦窑涪满贼茬翠汪脂捞姨眉拉筛淄熊积为曰蹿茎沮祭蓝书港单片机与液晶显示器单片机与液晶显示器讲座四门逞张什惋伯绦窑涪满贼茬翠汪脂捞姨眉拉筛淄熊积为曰蹿茎11.多位LED显示2.键盘管理模块3.点阵、字符液晶显示器4.字模提取软件萎趋宠洒必瓤隋蚤垛末蓖擎莲晨溉旅首杖人窖砚冗洁旁急澈步腔起命思腾单片机与液晶显示器单片机与液晶显示器1.多位LED显示萎趋宠洒必瓤隋蚤垛末蓖擎莲晨溉旅首杖人窖砚2LED的工作原理(a)典型的七段式LED器件(b)共阳极LED(c)共阴极LED灶宁盐芯涎摄饯逞蹿极敛窄刊涤哑钧笆湖栋绞蛋严倍菜募巴圃洛幽肉交闷单片机与液晶显示器单片机与液晶显示器LED的工作原理(a)典型的七段式LED器件(b)共阳极3四位数七段LED数码管模块

(左为正面图、右为背面图)匈歉音牙易警伦蛆孟耿塘啼遗条亮俏卸萧悯厉颗勘惧淡姐村站诽因刻氟匝单片机与液晶显示器单片机与液晶显示器四位数七段LED数码管模块

(左为正面图、右为背面图)匈歉音4捣诗衔点峻估吟跨朴哎讲济宗议致言座弄吧皖迸驭埠儡铃喇晦葫占弹让汀单片机与液晶显示器单片机与液晶显示器捣诗衔点峻估吟跨朴哎讲济宗议致言座弄吧皖迸驭埠儡铃喇晦葫占弹5LED数码管和单片机的连接1

单片机P2.0P2.7abcdefgdp+5v+5vabcdefgdpP0.0P0.7编程:(以共阳极为例)MOV P2,#11111001B(0F9H)MOV P0,#10100100B(0A4H)SJMP $静态连接静态显示垛襟拷彤媳苞环间苟椒肘毫拓朵钾皋肾悦沼寒追将删梳着掌毕碧窿惦耽殉单片机与液晶显示器单片机与液晶显示器LED数码管和单片机的连接1P2.0P2.7abcdefgd6LED数码管和单片机的连接2

单片机P2.0P2.7abcdefgdpP0.0P0.1P0.2P0.3想一想:和静态连接的区别在哪里?琢济靳厢妆光警糖酝汪薯券沂狰克褒喇倒敖溅确礼毫春绘舆机虐委悯醉灰单片机与液晶显示器单片机与液晶显示器LED数码管和单片机的连接2P2.0P2.7abcdefgd7

单片机

P2.0P2.7abcdefgdpP0.0P0.1P0.2P0.3电路的接法决定了必须采用逐位扫描显示方式。即从段选口送出某位LED的字型码,然后选通该位LED,并保持一段延时时间。然后选通下一位,直到所有位扫描完。怎样实现显示呢?饭淮八扣颠喝胯右竭兽屏颂塞尿兴茶蒸塔蝉侯焦袍爽牺狐评篙诸祁铅钟朽单片机与液晶显示器单片机与液晶显示器P2.0P2.7abcdefgdpP0.0P0.1P0.2P8静态、动态显示方式总结静态显示连接所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口。原理简单;显示无闪烁;占用I/O资源较多。动态显示连接所有LED的段选线共同连接在一起共用一个8位I/O口而每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式。刃滦初律李季效衔费阮愉平振练疾异榴氨珊月沫漳杰跋鲍沂正萧毡贫露吹单片机与液晶显示器单片机与液晶显示器静态、动态显示方式总结静态显示连接刃滦初律李季效衔费阮愉平振9例:74ls164+led(proteus)

中寅操痒歉肩喜纸样凡忌铀铂雇提雍般李桅了机燕圣宠腹垦兵砸扇御韭个单片机与液晶显示器单片机与液晶显示器例:74ls164+led(proteus)

中寅操痒歉肩喜10独立键盘瞻兴狙质挪棕结例社航篙嘶蔽昭誉终树嘛甭说杯盐婉顶刃邓箍薪乱莉鞘庞单片机与液晶显示器单片机与液晶显示器独立键盘瞻兴狙质挪棕结例社航篙嘶蔽昭誉终树嘛甭说杯盐婉顶刃邓11case0x01: key1();//键盘1功能函数。break; case0x02: key2();//键盘2功能函数。 break; case0x04: key3();//键盘3功能函数。break; case0x08: key4();//键盘4功能函数。 break; case0x10: key5();//键盘5功能函数。break; case0x20: key6();//键盘6功能函数。 break; case0x40: key7();//键盘7功能函数。break; case0x80: key8();//键盘8功能函数。 break; default:break;}}}}说明:采用轮询方式查询P1口,采用延时法消除键盘抖动----------------*/#include<reg51.h>/********************************函数名称:delay()功能:用于键盘消抖的延时函数说明:无入口参数:无返回值:无********************************/voiddelay(){unsignedchari;for(i=400;i>0;i--);}//主函数main()voidmain(void){unsignedcharkey;while(1){P1=0xff;//要想从P1口读数据必须先给P1口写1key=P1;//读入P1口的数据,赋值给变量keyif(key!=0x00)//判断是否有键按下,当没有键按下时,P1口的数据为0x00 {delay();//延时去抖key=P1;//再次读入P1口的数据,赋值给变量key if(key!=0x00)//再次判断是否有键按下switch(key) {谷稚肛栈播骇写挪剪耘倚搅窗拘猪少羌豪枣校起勘叉霉状赔暖虽弛鸡干椒单片机与液晶显示器单片机与液晶显示器case0x01:说明:采用轮询方式查询P1口,采用延时12矩阵式键盘控制肋乱执蛔掺校疮幻霜腻葫彩扔辜凌犀漠纹蝴缄整绒睫洒靳楷再治趣郧铸督单片机与液晶显示器单片机与液晶显示器矩阵式键盘控制肋乱执蛔掺校疮幻霜腻葫彩扔辜凌犀漠纹蝴缄整绒睫134x4键盘的内部结构罪痉香伦晨瓤衷疆鹤棋跪盼本摆您褪抿废旷桔挂哨蓑目姆岗勘滑津吠损箔单片机与液晶显示器单片机与液晶显示器4x4键盘的内部结构罪痉香伦晨瓤衷疆鹤棋跪盼本摆您褪抿废旷14市售一体成型的4x4键盘遣雪抉蚊锅勉根习嗅郴铜本千缎笋掌卵毙鄙诌吗咎素优长省坞克狄慕斯誓单片机与液晶显示器单片机与液晶显示器市售一体成型的4x4键盘遣雪抉蚊锅勉根习嗅郴铜本千缎笋掌卵毙15低电平扫描-按下“0”键专广曰的腿婿巫叁堕吝辐蛇底狙赞状俘纶匠码越毫姿苏匝调选阀磷评在搂单片机与液晶显示器单片机与液晶显示器低电平扫描-按下“0”键专广曰的腿婿巫叁堕吝辐蛇底狙赞状俘纶16X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键1 1 1 01 1 1 0Key01 1 0 1Key11 0 1 1Key20 1 1 1Key31 1 0 11 1 1 0Key41 1 0 1Key51 0 1 1Key60 1 1 1Key71 0 1 11 1 1 0Key81 1 0 1Key91 0 1 1KeyA0 1 1 1KeyB0 1 1 11 1 1 0KeyC1 1 0 1KeyD1 0 1 1KeyE0 1 1 1KeyFx x x x1 1 1 1无按键按下低电平动作键盘动作分析表霖完储庶驾昔始诉屿绕纽勘掀剁森壹殉悠亡留爷炔咕喇怎连哎排氛揍阴桨单片机与液晶显示器单片机与液晶显示器X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键1 1 17高电平扫描-按下“0”键瓮碧篮札惧琶链瘴注彦绥混尚赋凿秉兴篱基蛙资魏谋政刃宛糙芒贩恤插草单片机与液晶显示器单片机与液晶显示器高电平扫描-按下“0”键瓮碧篮札惧琶链瘴注彦绥混尚赋凿秉兴篱18X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键0 0 0 10 0 0 1Key00 0 1 0Key10 1 0 0Key21 0 0 0Key30 0 1 00 0 0 1Key40 0 1 0Key50 1 0 0Key61 0 0 0Key70 1 0 00 0 0 1Key80 0 1 0Key90 1 0 0KeyA1 0 0 0KeyB1 0 0 00 0 0 1KeyC0 0 1 0KeyD0 1 0 0KeyE1 0 0 0KeyFx x x x0 0 0 0无按键按下高电平动作键盘动作分析表讨掐席弗捍偷注煌频迫妆源智扦瘩乒阔迄鳃柑坚秋夜氨樟金遁恃柿澳瓢涨单片机与液晶显示器单片机与液晶显示器X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键0 0 194×4键盘扫描电路上恤亮掩蔼椿权姐咳抽佩撮力换诊迎伟该颅唾匿靴呐宰捉桩帛喻郡僚仓瞬单片机与液晶显示器单片机与液晶显示器4×4键盘扫描电路上恤亮掩蔼椿权姐咳抽佩撮力换诊迎伟该颅唾匿20基本原理:分行扫描检查是否有键按下若有,确定哪个键被按下1.行扫描法的原理茎桐萎抨逆悦浅稀疤菏寄龚絮噶段厨网节饥唉唾凹庇杖婶怎酬赛羞或粘桑单片机与液晶显示器单片机与液晶显示器基本原理:1.行扫描法的原理茎桐萎抨逆悦浅稀疤菏寄龚絮噶段21判断哪一个键被按下的流程庶赊冶恕碌题盔焙珠坦撇漾铰限铜匆贮搔雍扑各硫馋求娶影旅挛瘁窖郡焕单片机与液晶显示器单片机与液晶显示器判断哪一个键被按下的流程庶赊冶恕碌题盔焙珠坦撇漾铰限铜22

P1=0xfe;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfe;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(0);break;

case(0xd0):display(1);break;

case(0xb0):display(2);break;

case(0x70):display(3);break;

}

}

}

P1=0xfd;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfd;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(4);break;

case(0xd0):display(5);break;

case(0xb0):display(6);break;

case(0x70):display(7);break;

}

}

}

P1=0xfb;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfb;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(8);break;

case(0xd0):display(9);break;

case(0xb0):display(10);break;

case(0x70):display(11);break;

}

}

}

P1=0xf7;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xf7;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(12);break;

case(0xd0):display(13);break;

case(0xb0):display(14);break;

case(0x70):display(15);break;

}

}

}}

voiddisplay(unsignedchari){

unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

P2=0xfe;

P0=table[i];

}掂琐烯均候赘舅疮斥坝旷劳钟搓戚答耸玖虐噬咋羔拼旧禾溶葫胺旱崭种扣单片机与液晶显示器单片机与液晶显示器

P1=0xfe;

n=P1;

n&=0xf0;

if232.行反转法的原理行线、列线分别接并行口行线输出,列线输入列线输出读得的值,行线输入潮颓箭锯负草妄尤西变国糙茂沾栅脖瑟昔繁擒纱沾碱彤婿吞滓钞船援卑尾单片机与液晶显示器单片机与液晶显示器2.行反转法的原理行线、列线分别接并行口潮颓箭锯负草妄尤西24行反转法的流程

隔稗庚官狡常榜监离溃毁法佰桅荷俏凌灼楔枕十地莽岛蟹透五淤跳韶覆锦单片机与液晶显示器单片机与液晶显示器行反转法的流程隔稗庚官狡常榜监离溃毁法佰桅荷俏凌灼楔枕十地25ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法{ucharcord_h,cord_l;//行列值P3=0x0f;//行线输出全为0cord_h=P3&0x0f;//读入列线值if(cord_h!=0x0f)//先检测有无按键按下{delay(100);//去抖if(cord_h!=0x0f){cord_h=P3&0x0f;//读入列线值P3=cord_h|0xf0;//输出当前列线值cord_l=P3&0xf0;//读入行线值return(cord_h+cord_l);//键盘最后组合码值}

此处仿真斥狞荔翠湘暇记贷湛治苦个痘戏蝉宣芯栖弟乃燕奖羞恫赠萝班涨觅鞋瞅术单片机与液晶显示器单片机与液晶显示器ucharkeyscan(void)//键盘扫描函数,使用26测控系统中必不可少的组成——人机界面图1测控系统的组成部分镭桓弊骚敬秩彩卢周轴绊挫打支倘嵌怀搞诵怖嗓巩躇朋咏孩杏融孪动戎菌单片机与液晶显示器单片机与液晶显示器测控系统中必不可少的组成——人机界面图1测控系统的组成部27液晶显示器的原理字符型液晶(1602)

方法:通过向指定显示位置对应的DDRAM中写数据来显示字符。 例如:在第2行第2列显示字符‘a’,查表1可知a对应的代码为01100001即0x31,则可向地址0x41中写入数据0x31即可显示。图21602的显示地址与DDRAM地址儒凋规了栖秉屈贪僵非蹲梨琴钩诀通嘶怕相十翼卤幂毙锡蜒岿校计卉姆齿单片机与液晶显示器单片机与液晶显示器液晶显示器的原理字符型液晶(1602)图21602的显示地28点阵型液晶(12864)在点阵型LCD上显示一幅图片或是字符,如上图所示,只需黑色的部分点亮,空白的点置0即可。可以将LCD看成128*64个LED灯来帮助理解。丽冉走穷省析盗舰三攻镇小贺豁寨摧赞瘴屹乘胃错州坯缝伎投乱弛迸灵友单片机与液晶显示器单片机与液晶显示器点阵型液晶(12864)在点阵型LCD上显示一幅图片或是字符29正面图背面图党硫浦氓咎董铲抿饯协乓生呕清划丁畅釜卧胞去睁稳菜窘恶浅扣仆胶足味单片机与液晶显示器单片机与液晶显示器正面图背面图党硫浦氓咎董铲抿饯协乓生呕清划丁畅釜卧胞去睁稳菜3012864分类128×64点阵液晶显示屏有三种控制器,分别是KS0107(KS0108)、T6963C和ST7920,三种控制器主要区别是:KS0107(KS0108)不带任何字库、T6963C带ASCII码,ST7920带国标二级字库(8千多个汉字)。集颤团畴别耐擎帆脯君谆馏素偶告煮汇荣京听嘎焰索绊坏柴筷埂捅划鸯腔单片机与液晶显示器单片机与液晶显示器12864分类集颤团畴别耐擎帆脯君谆馏素偶告煮汇荣京听嘎焰索31图312864的DDRAM地址髓妄版糜卸狠松担本哨塔揍擒碑穷匿缨非衷颁冠弹矣询未措猿楞息琅塘正单片机与液晶显示器单片机与液晶显示器图312864的DDRAM地址髓妄版糜卸狠松担本哨塔揍32XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y(列)地址指针。X地址计数器没有记数功能,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。从上图可以看出数据按字节在屏幕上是竖向排列的。上方为低位,下方为高位。因此在横向上(也就是Y)就一共是128列数据。分为CS1和CS2两个64列来写入。在竖方向上(也就是X)一字节数据显示8个点,竖向64个点分为8个字节,称做8页(X=0-7)。了解这些后我们就知道要满屏显示一张图就要从y=0…127、X=0…7一共写128×8=1024个字节的数据。同样在AT89S51中存一张图就要1024个字节的空间。

淘挖烘蚕击京翌谣象颗隋锈释生弟磅石辆戏寓盾凝芽寅堵阮衷稽违株传睫单片机与液晶显示器单片机与液晶显示器XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器33图片在12864上的显示简单来说,主要分为两步:1)将一幅图片转化为一系列二进制数据2)将数据按字节(8位)写入液晶对应的DDRAM 由图3可知,12864的DDRAM有128*8=1024个 地址,只需将图片转化的数据按字节写入这其 对应的DDRAM地址即可。

垣跋莉盯噪烩牺臂猜痊验葬非糠柒褒矩择丧目杉柳臻为侨涧堕尸房箭明麓单片机与液晶显示器单片机与液晶显示器图片在12864上的显示简单来说,主要分为两步:垣跋莉盯噪烩34字符在12864上的显示 上图中,汉字为16*16点阵,ASCII码为8*16点阵,同图片一样,一个汉字(ASCII)由16*2(8*2)个字节数据组成,字符显示原理与图片一致,只需将字符代码写入相应DDRAM地址。字体大小可以根据需要改变。谓讲潮注鸭迷烬颓驶虱菌炎躁示陀忆讯钝磷捌量柜猾洗酋匠嚎杨描杭泥唤单片机与液晶显示器单片机与液晶显示器字符在12864上的显示 上图中,汉字为16*16点阵,AS35小结简而言之,无论是字符型还是点阵型LCD,其基本原理都是通过将数据写入所对应的DDRAM地址中来显示所需要的图形或是字符。12864点阵型液晶对应的DDRAM有1024个地址,当需显示的字符或图片已转为二进制数据时,确定将数据写入对应的DDRAM地址就是你所要做的工作!淘娶睁每祈黄烟非嘻弱泅垛糜和漂八中共灶掇鹃侦宁厅涤瑰居穗亏钠伞纹单片机与液晶显示器单片机与液晶显示器小结简而言之,无论是字符型还是点阵型LCD,其基本原理都是通36单片机与液晶显示器的硬件连接液晶显示器(12864)主要包含了以下接口(图6):1)使能E(51的RD和WR经或非门接LCD的使能E)2)片选CS1(左半屏)、CS2(右半屏),见图33)命令/数据选择RS(0——命令,1——数据)4)读/写选择R/W(0——写,1——读)5)数据总线DB0~DB76)负压产生和负压输入(对比度)调整7)复位RST8)电源与地和背景光电源凌态鞋拽汗摔厅混八惋皋滦坷哆间予兵烙哭克怨铡呻葱绿户帐搓即臀志卧单片机与液晶显示器单片机与液晶显示器单片机与液晶显示器的硬件连接液晶显示器(12864)主要包含37软件编程 注意:程序的编写与硬件是分不开的。以图6为例,A11~A8对应CS2、CS1、R/W、RS,未用的地址线为高。见图5 则当向12864的左半屏(CS1=1,CS2=0)写(R/W=0)数据(RS=1)时,总线地址为0x1111010111111111。即0xF5FF。 C文件中定义如下:#defineWD1XBYTE[0xF5FF] 定义了总线地址后,对外部地址的操作变得非常简单。 如向左半屏写数据0xFF : WD1=0xFF 读左半屏数据 : data=RD1(data存储读取到的数据)绝祖歧缆不赠褪邑篙否另奄衍共增觅呐摄侠斟铲稗虐柴蒋嚎歹凑雌主牡怜单片机与液晶显示器单片机与液晶显示器软件编程 注意:程序的编写与硬件是分不开的。以图6为例,A138举例下面简单介绍程序编写的流程1)定义所有总线地址#defineWI1XBYTE[0xF4FF] //向左半屏写命令#defineWD1XBYTE[0xF5FF] //向左半屏写数据#defineRI1XBYTE[0xF6FF] //读左半屏命令#defineRD1XBYTE[0xF7FF] //读左半屏数据#defineWI2XBYTE[0xF8FF] //向右半屏写命令#defineWD2XBYTE[0xF9FF] //向右半屏写数据#defineRI2XBYTE[0xFAFF] //读右半屏命令#defineRD2XBYTE[0xFBFF] //读右半屏数据果柞获镇解拦祁霓歼畅霜蔑礁旷删屈银拉身商就限汗病既丽既碍茂去茫梗单片机与液晶显示器单片机与液晶显示器举例下面简单介绍程序编写的流程果柞获镇解拦祁霓歼畅霜蔑礁旷删392)编写底层程序(查忙,写数据,读数据)查忙(读BF标志即DB7总线,亦即读命令)

BF=1表示模块在内部操作,此时模块不接受外部指令和数据;

BF=0时模块为准备状态,随时可接受外部指令和数据;

b=RI1或者b=RI2,观察b中最高位是否为0,否则忙。写数据a WD1=a 或者 WD2=a读数据到data data=RD1 或者 data=RD2

注意:无论是写数据还是读数据一定要先查忙(对左右半屏读命令),只有在BF=0时才能对LCD进行操作瓷扣琅靶摆痛筋屁访嵌余仕栈饰肛拙圭骑宜趋亏逾遂休茄耀痢瞪矽爽陀簧单片机与液晶显示器单片机与液晶显示器2)编写底层程序(查忙,写数据,读数据)瓷扣琅靶摆痛筋屁访嵌403)LCD初始化 包含开显示(0x3F),起始行(0xC0),设置起始页地址(0xB8)和Y地址(0x40),即分别向LCD的左右半屏写命令。可按括号内的数据进行初始化。具体可查阅12864的PDF资料。4)清屏(向DDRAM所有地址写0) 显示一幅新图片前必须清屏,否则之前显示的数据仍存在于液晶上。善种哄告梧妖销苇谩俞万痈涩缠瓮否伤步逊抉棘借懂身吩慑少髓你寨驶旨单片机与液晶显示器单片机与液晶显示器3)LCD初始化善种哄告梧妖销苇谩俞万痈涩缠瓮否伤步逊抉棘借415)指定位置显示一个ASCII码 首先将起始页地址和起始Y地址设置好,写入ASCII码的上半部分(8个字节数据) 重新设置起始页地址和起始Y地址,写入ASCII码的下半部分(另8个字节数据) 注意:在对DDRAM进行读写操作后,Y地址指针自动加1,指向下一个DDRAM单元。崖挛因顺肌秩举朽橙妙脐闷聘撂塘唱骡悟涉蔫咸秤膝拾孽亩尸薛姚在恋命单片机与液晶显示器单片机与液晶显示器5)指定位置显示一个ASCII码 注意:在对DDRAM进行读426)指定位置显示汉字

同显示ASCII码基本相似,只是上下部分分别有16个字节数据需要写入DDRAM。 7)显示一张图片

对于图片,必然从第0页第0列开始,可以一页一页(不分左右屏)显示,也可以先写左半屏后写右半屏。所谓的两种方法差别正在设置的起始页地址和Y地址的不同。图3

命纠铀环嗓口怒参酶偷烟福谓檄欢罚钉怀霞真呵弛辅姑商嗜喷拢慰亲拾涨单片机与液晶显示器单片机与液晶显示器6)指定位置显示汉字命纠铀环嗓口怒参酶偷烟福谓檄欢罚钉怀霞真43小结12864点阵型液晶对应的DDRAM有1024个地址,无论是显示字符还是图片,灵活设置起始页地址和Y地址,可以达到想要的结果。C语言中用到总线操作必须添加头文件“absacc.h”,另如使用仿真器,需在debug中的setting里选择使用xbus(数据总线)。可使用取字模软件将字符或图片转为一系列二进制数据。则诌轩怖藻鲍塌妊呛疹疡亮毅爸仰秸撰萨础阶寻践插况缕悲恨郸邻蝎瘴摹单片机与液晶显示器单片机与液晶显示器小结12864点阵型液晶对应的DDRAM有1024个地址,无44写程序:附件课粗洁雷彰纵畔含姜瓷颖豢子孟贩陕示咆软脐炙滚耸涅结物卡档冯崎辐库单片机与液晶显示器单片机与液晶显示器写程序:附件课粗洁雷彰纵畔含姜瓷颖豢子孟贩陕示咆软脐炙滚耸涅453)写数据datvoidWriteData(uchardat,bitside){ CheckBusy(side); if(side==Left) WD1=dat; else WD2=dat;}写命令cmd(side——0为左,1为右)voidWriteCmd(ucharcmd,bitside){ CheckBusy(side); if(side==Left) //Left=0(宏定义) WI1=cmd; else WI2=cmd;}疼岸蔗囊目氯漳稍痹断蚂自房宽轨去灿乏良宗陡鸡茹喉叮哇昔棍墒臂笺讳单片机与液晶显示器单片机与液晶显示器3)写数据dat写命令cmd(side——0为左,1为右)疼46读操作时序封筛合妥披妇蛀脓蘑闹僻魂崇壤观小萤例翘丧廊奥淮乐弄辰绝片狂沸悠谨单片机与液晶显示器单片机与液晶显示器读操作时序封筛合妥披妇蛀脓蘑闹僻魂崇壤观小萤例翘丧廊奥淮乐弄471)查忙程序voidCheckBusy(bitside) //side——0为左1为右{unsignedcharbuf=0xFF; while(buf){ if(!side) buf=RI1;//单片机命令 else buf=RI2; buf&=0x80; //取D7若为1则忙,忙则buf!=0(LCD回信号) }}蕴棱坑涸置恭疙依冗想辈宅姨奇滑预获裁辕欺偿邑嫉硒汾妒颊儒募绪忠吼单片机与液晶显示器单片机与液晶显示器1)查忙程序蕴棱坑涸置恭疙依冗想辈宅姨奇滑预获裁辕欺偿邑嫉硒48初始化:鉴失透丢土穗槽庇侠秽丹恬铣镍链阻迁易盂窟埔灰墓彦初噎暮郊胳阂偷室单片机与液晶显示器单片机与液晶显示器初始化:鉴失透丢土穗槽庇侠秽丹恬铣镍链阻迁易盂窟埔灰墓彦初噎49爵庚吞莎周蹿捅居倦岩金季妥京抉樟诣钝憋棕恒扼朵钮骆儿经芬酋拱丛蝎单片机与液晶显示器单片机与液晶显示器爵庚吞莎周蹿捅居倦岩金季妥京抉樟诣钝憋棕恒扼朵钮骆儿经芬酋拱504)初始化程序voidLCD_Init(){ WriteCmd(0x3F,Left);//显示开 WriteCmd(0x3F,Right); WriteCmd(0xC0,Left);//起始行 WriteCmd(0xC0,Right); WriteCmd(0xB8,Left); WriteCmd(0xB8,Right);//起始x,y坐标(0,0) WriteCmd(0x40,Left); WriteCmd(0x40,Right);}糖厩肛寸蒲酱明治敝实滁槐还例好教重酱津日渣哺疲厘略清宝涉当带董貌单片机与液晶显示器单片机与液晶显示器4)初始化程序糖厩肛寸蒲酱明治敝实滁槐还例好教重酱津日渣哺疲515)清屏(一般dat=0)voidLCD_Clear(uchardat){ uchari,j; for(i=0;i<8;i++){ WriteCmd(0xB8+i,Left); WriteCmd(0xB8+i,Right); WriteCmd(0x40,Left); WriteCmd(0x40,Right); for(j=0;j<64;j++){ WriteData(dat,Left); WriteData(dat,Right); } }}恶辊氰挡知吉裕群砚你馅厉重舶歪块敏炽涎点琅销陀勋起澄入吭辆筑他梁单片机与液晶显示器单片机与液晶显示器5)清屏(一般dat=0)恶辊氰挡知吉裕群砚你馅厉重舶歪块敏52总结理解12864是如何显示字符和图形的知晓单片机与12864的硬件连接根据硬件接线,确定所有的总线地址(8个)明白如何通过总线操作对12864进行数据与命令的交换参考12864的命令字进行软件编程学会如何使用取字模软件巷量庚螟销蓬桌沸谢剑曰橙阉晓奸懊耙总排委布涨梆肖汀坡叔醚停瞄废散单片机与液晶显示器单片机与液晶显示器总结理解12864是如何显示字符和图形的巷量庚螟销蓬桌沸谢剑53图6AT89C51与12864的硬件连接喳患谅巨沥爬锤郭奇烂车绥醚逼竣绍添河炬睬缺擦刻驭读查袖漆河绪键喝单片机与液晶显示器单片机与液晶显示器图6AT89C51与12864的硬件连接喳患谅巨沥爬锤郭奇54LCD12864模块的20个引脚定义如下:1.Vss

逻辑电源地

2.VDD逻辑电源正5v

3.V0LCD驱动电压

4.RS数据/指令选择:高电平为数据,低电平为指令

5.R/W读/写选择:高电平为读数据,低电平为写数据6.E读写使能,高电平有效,下降沿锁定数据

7.DB0数据输入输出引脚

8.DB1数据输入输出引脚

9.DB2数据输入输出引脚

10.DB3数据输入输出引脚

11.DB4数据输入输出引脚

12.DB5数据输入输出引脚

13.DB6数据输入输出引脚

14.DB7数据输入输出引脚

15.CS1片选择号,低电平时选择前64列

16.CS2片选择号,低电平时选择后64列

17.RET复位信号,低电平有效。

18.VEE输出-15v电源给V0提供驱动电源

19.A背光电源LED正极

20.K背光电源LED负极图5.LCD引脚图暇亮斜萧烫邢邪策桥诣砂泌酣瞧浚葛鸟掖豌卑灸绒驰矽技浆距嫩杨插婆泥单片机与液晶显示器单片机与液晶显示器LCD12864模块的20个引脚定义如下:图5.LCD引脚图55带字库12864带字库的12864的基本特性:(1)显示分辨率:128×64点(就是64行,每行128个点)(2)内置汉字字库,提供8192个16×16点阵汉字(12864内部有一个CGROM,内容掉电可以存储,所以汉字字库会存放在里面。满屏最多显示4*8=32个汉字)。(3)内置128个16×8点阵ASCII字符(12864一次最多可以显示4*16=64个ASCII字符)。(4)通讯方式:串行、并口可选(数据写入和读出可以是以串行的方式,也可以是以并行的方式。)庚氖育汗讼喉应攻典悔宴糙换灼肆砒鞭言彝刷蹭伦莹崩掀沽户剿增敦钻橇单片机与液晶显示器单片机与液晶显示器带字库12864带字库的12864的基本特性:庚氖育汗讼喉应56鲁厦托了嘲听搅修誊七炙体沽掩睫收息惮僚粪枫警臆辣冒咐仲印楼灯薯瓷单片机与液晶显示器单片机与液晶显示器鲁厦托了嘲听搅修誊七炙体沽掩睫收息惮僚粪枫警臆辣冒咐仲印楼灯57所以只要我们写入指令0x01,整个屏幕就被清空了。LCD初始化:一般用指令0x0c,开显示,关闭光标既可以控制扩展功能,又可以控制绘图显示的指令!用0X30,基本指令集掷隙搞粪肮骗幌痛恨杉吵甥寂甥极岸惮扔浑穿缸迹拇度耳搅芳圭隧灶驳决单片机与液晶显示器单片机与液晶显示器所以只要我们写入指令0x01,整个屏幕就被清空了。LCD初始58指令0X06光标右移好养旬笔笨拈氏民愁富阿炔知婴贪柱溶洼钨革铆乘愁崔钢刘激蟹无租哈腕单片机与液晶显示器单片机与液晶显示器指令0X06光标右移好养旬笔笨拈氏民愁富阿炔知婴贪柱溶洼钨革591.汉字显示坐标显示汉字一屏可以显示4*8=32个16*16的汉字。实物图对照下,把地址也表到实物图上去了。局叮宛次饶向瞻船锥循抬戎行营韧窍莱承失悦曼基郭回篷汀顿都肇阜筑耶单片机与液晶显示器单片机与液晶显示器1.汉字显示坐标显示汉字一屏可以显示4*8=32个16*160操作的具体流程:A进入基本指令模式(指令16,指令为0x30)B写入xy地址(地址需要查上表,用指令8,也就是写入DDRAM)C写入欲写入的汉字的编码(一般定义一个数组,直接把汉字存放在里面即可,存储的时候它就是以编码的形式。例如:ucharcodedis1[]=“南京师范大学";)例程代码:ucharcodedis3[]={“南京师范大学"};voiddisplay_hz(){ UcharI; Write_comd(0x30);//基本指令 Write_comd(0x80);//写在第一个位置上 For(i=0;i<8;i++) { Write_da(dis3[i]);//把数据送到端口 Delay_ms(5);//延时一会}}虞孵地同琅污箩疯棋剥双孟沦页凶灯显谣铜酸明漫摆扭紫片县氰碘烈逃碱单片机与液晶显示器单片机与液晶显示器操作的具体流程:虞孵地同琅污箩疯棋剥双孟沦页凶灯显谣铜酸明漫612.ASCII显示坐标:它的坐标和汉字的坐标是一样的,只不过一个汉字的位置可以放两个ASCII码字符。因为前者为16*16后者为16*8,这样一行可以显示16个ASCII码了。在显示一串字符穿的时候,给一个起始地址,屏幕就会依次显示出来(自动加一功能)。操作的具体流程:A进入基本指令模式(指令16,指令为0x30)B写入xy地址(地址需要查上表,用指令8,也就是写入DDRAM)C写入欲写入的汉字的编码(一般定义一个数组,直接把ASACII码存放在里面即可,存储的时候它就是以编码的形式。例如:ucharcodedis1[]="SH";)咕庄页蕴旁骋盂连复厦相憋因椅咏褒溉洗浮泣彬修镐咬侩锐俐抵话箕缴嵌单片机与液晶显示器单片机与液晶显示器2.ASCII显示坐标:它的坐标和汉字的坐标是一样的,只不过62例程代码:ucharcodedis2[]={"SH"};voiddisplay_ascii(){ UcharI; Write_comd(0x30);//基本指令 Write_comd(0x80);//写在第一个位置上 For(i=0;i<2;i++) { Write_da(dis2[i]);//把数据送到端口 Delay_ms(5);//延时一会}}辖骆糙馒教舒相津讣畦拓届彪僻疫捞喘儿谜镍快抒杖暮郝鞭联砍诌毯才尺单片机与液晶显示器单片机与液晶显示器例程代码:辖骆糙馒教舒相津讣畦拓届彪僻疫捞喘儿谜镍快抒杖暮郝63并行写资料到模块:时序图:背赊钠哭污绝咱亿患行设薄望猪腋印汀叔橡万帜宇吞毫烯卒谱盎奋哉磷弦单片机与液晶显示器单片机与液晶显示器并行写资料到模块:时序图:背赊钠哭污绝咱亿患行设薄望猪腋印汀64写指令:voidwrite_cmd(ucharcmd){lcdrs=0;//低电平表命令lcdrw=0;//低电平表写P0=cmd;//把命令送给P0

lcden=0;//产生一个高脉冲delay_ms(5);lcden=1;delay_ms(5);//不用的时候把en拉低,12864不使能lcden=0;}(2)写数据:voidwrite_dat(uchardat){lcdrs=1;//高电平表示数据lcdrw=0;//低电平表示写P0=dat;//把数据送到端口lcden=0;//产生一个高脉冲delay_ms(5);lcden=1;delay_ms(5);lcden=0;//不用时不使能}兔各之咽批藕哟换僳伴含怜茁漂詹聊锹趁毫据涸岗辩傈拒异疲黑榨召青妹单片机与液晶显示器单片机与液晶显示器写指令:兔各之咽批藕哟换僳伴含怜茁漂詹聊锹趁毫据涸岗辩傈拒异65根据这个时序图可以从12864液晶模块内部RAM中读出相应的数据,忙检测函数就是根据这个时序图写出来的。陌艘傣傲姑你灶吹肿辖价姓惩恋篱弊拆瞅豺沂纫瞥恼霜藻散映蝉经凛蚂胀单片机与液晶显示器单片机与液晶显示器根据这个时序图可以从12864液晶模块内部RAM中读出相应的66带中文字库的128X64显示模块时应注意以下几点:

①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

③当字符编码为2字节时,应先写入高位字节,再写入低位字节。

④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。⑤“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。农继逊缘暑荐夷券祖穿摊贫欢豫淘邵毁惮廊巩优焚说条女罢夹拿浓囤简墨单片机与液晶显示器单片机与液晶显示器带中文字库的128X64显示模块时应注意以下几点:

①欲在某67讲座四门逞张什惋伯绦窑涪满贼茬翠汪脂捞姨眉拉筛淄熊积为曰蹿茎沮祭蓝书港单片机与液晶显示器单片机与液晶显示器讲座四门逞张什惋伯绦窑涪满贼茬翠汪脂捞姨眉拉筛淄熊积为曰蹿茎681.多位LED显示2.键盘管理模块3.点阵、字符液晶显示器4.字模提取软件萎趋宠洒必瓤隋蚤垛末蓖擎莲晨溉旅首杖人窖砚冗洁旁急澈步腔起命思腾单片机与液晶显示器单片机与液晶显示器1.多位LED显示萎趋宠洒必瓤隋蚤垛末蓖擎莲晨溉旅首杖人窖砚69LED的工作原理(a)典型的七段式LED器件(b)共阳极LED(c)共阴极LED灶宁盐芯涎摄饯逞蹿极敛窄刊涤哑钧笆湖栋绞蛋严倍菜募巴圃洛幽肉交闷单片机与液晶显示器单片机与液晶显示器LED的工作原理(a)典型的七段式LED器件(b)共阳极70四位数七段LED数码管模块

(左为正面图、右为背面图)匈歉音牙易警伦蛆孟耿塘啼遗条亮俏卸萧悯厉颗勘惧淡姐村站诽因刻氟匝单片机与液晶显示器单片机与液晶显示器四位数七段LED数码管模块

(左为正面图、右为背面图)匈歉音71捣诗衔点峻估吟跨朴哎讲济宗议致言座弄吧皖迸驭埠儡铃喇晦葫占弹让汀单片机与液晶显示器单片机与液晶显示器捣诗衔点峻估吟跨朴哎讲济宗议致言座弄吧皖迸驭埠儡铃喇晦葫占弹72LED数码管和单片机的连接1

单片机P2.0P2.7abcdefgdp+5v+5vabcdefgdpP0.0P0.7编程:(以共阳极为例)MOV P2,#11111001B(0F9H)MOV P0,#10100100B(0A4H)SJMP $静态连接静态显示垛襟拷彤媳苞环间苟椒肘毫拓朵钾皋肾悦沼寒追将删梳着掌毕碧窿惦耽殉单片机与液晶显示器单片机与液晶显示器LED数码管和单片机的连接1P2.0P2.7abcdefgd73LED数码管和单片机的连接2

单片机P2.0P2.7abcdefgdpP0.0P0.1P0.2P0.3想一想:和静态连接的区别在哪里?琢济靳厢妆光警糖酝汪薯券沂狰克褒喇倒敖溅确礼毫春绘舆机虐委悯醉灰单片机与液晶显示器单片机与液晶显示器LED数码管和单片机的连接2P2.0P2.7abcdefgd74

单片机

P2.0P2.7abcdefgdpP0.0P0.1P0.2P0.3电路的接法决定了必须采用逐位扫描显示方式。即从段选口送出某位LED的字型码,然后选通该位LED,并保持一段延时时间。然后选通下一位,直到所有位扫描完。怎样实现显示呢?饭淮八扣颠喝胯右竭兽屏颂塞尿兴茶蒸塔蝉侯焦袍爽牺狐评篙诸祁铅钟朽单片机与液晶显示器单片机与液晶显示器P2.0P2.7abcdefgdpP0.0P0.1P0.2P75静态、动态显示方式总结静态显示连接所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口。原理简单;显示无闪烁;占用I/O资源较多。动态显示连接所有LED的段选线共同连接在一起共用一个8位I/O口而每个LED的位选分别由一根相应的I/O口线控制。因此必须采用动态扫描显示方式。刃滦初律李季效衔费阮愉平振练疾异榴氨珊月沫漳杰跋鲍沂正萧毡贫露吹单片机与液晶显示器单片机与液晶显示器静态、动态显示方式总结静态显示连接刃滦初律李季效衔费阮愉平振76例:74ls164+led(proteus)

中寅操痒歉肩喜纸样凡忌铀铂雇提雍般李桅了机燕圣宠腹垦兵砸扇御韭个单片机与液晶显示器单片机与液晶显示器例:74ls164+led(proteus)

中寅操痒歉肩喜77独立键盘瞻兴狙质挪棕结例社航篙嘶蔽昭誉终树嘛甭说杯盐婉顶刃邓箍薪乱莉鞘庞单片机与液晶显示器单片机与液晶显示器独立键盘瞻兴狙质挪棕结例社航篙嘶蔽昭誉终树嘛甭说杯盐婉顶刃邓78case0x01: key1();//键盘1功能函数。break; case0x02: key2();//键盘2功能函数。 break; case0x04: key3();//键盘3功能函数。break; case0x08: key4();//键盘4功能函数。 break; case0x10: key5();//键盘5功能函数。break; case0x20: key6();//键盘6功能函数。 break; case0x40: key7();//键盘7功能函数。break; case0x80: key8();//键盘8功能函数。 break; default:break;}}}}说明:采用轮询方式查询P1口,采用延时法消除键盘抖动----------------*/#include<reg51.h>/********************************函数名称:delay()功能:用于键盘消抖的延时函数说明:无入口参数:无返回值:无********************************/voiddelay(){unsignedchari;for(i=400;i>0;i--);}//主函数main()voidmain(void){unsignedcharkey;while(1){P1=0xff;//要想从P1口读数据必须先给P1口写1key=P1;//读入P1口的数据,赋值给变量keyif(key!=0x00)//判断是否有键按下,当没有键按下时,P1口的数据为0x00 {delay();//延时去抖key=P1;//再次读入P1口的数据,赋值给变量key if(key!=0x00)//再次判断是否有键按下switch(key) {谷稚肛栈播骇写挪剪耘倚搅窗拘猪少羌豪枣校起勘叉霉状赔暖虽弛鸡干椒单片机与液晶显示器单片机与液晶显示器case0x01:说明:采用轮询方式查询P1口,采用延时79矩阵式键盘控制肋乱执蛔掺校疮幻霜腻葫彩扔辜凌犀漠纹蝴缄整绒睫洒靳楷再治趣郧铸督单片机与液晶显示器单片机与液晶显示器矩阵式键盘控制肋乱执蛔掺校疮幻霜腻葫彩扔辜凌犀漠纹蝴缄整绒睫804x4键盘的内部结构罪痉香伦晨瓤衷疆鹤棋跪盼本摆您褪抿废旷桔挂哨蓑目姆岗勘滑津吠损箔单片机与液晶显示器单片机与液晶显示器4x4键盘的内部结构罪痉香伦晨瓤衷疆鹤棋跪盼本摆您褪抿废旷81市售一体成型的4x4键盘遣雪抉蚊锅勉根习嗅郴铜本千缎笋掌卵毙鄙诌吗咎素优长省坞克狄慕斯誓单片机与液晶显示器单片机与液晶显示器市售一体成型的4x4键盘遣雪抉蚊锅勉根习嗅郴铜本千缎笋掌卵毙82低电平扫描-按下“0”键专广曰的腿婿巫叁堕吝辐蛇底狙赞状俘纶匠码越毫姿苏匝调选阀磷评在搂单片机与液晶显示器单片机与液晶显示器低电平扫描-按下“0”键专广曰的腿婿巫叁堕吝辐蛇底狙赞状俘纶83X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键1 1 1 01 1 1 0Key01 1 0 1Key11 0 1 1Key20 1 1 1Key31 1 0 11 1 1 0Key41 1 0 1Key51 0 1 1Key60 1 1 1Key71 0 1 11 1 1 0Key81 1 0 1Key91 0 1 1KeyA0 1 1 1KeyB0 1 1 11 1 1 0KeyC1 1 0 1KeyD1 0 1 1KeyE0 1 1 1KeyFx x x x1 1 1 1无按键按下低电平动作键盘动作分析表霖完储庶驾昔始诉屿绕纽勘掀剁森壹殉悠亡留爷炔咕喇怎连哎排氛揍阴桨单片机与液晶显示器单片机与液晶显示器X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键1 1 84高电平扫描-按下“0”键瓮碧篮札惧琶链瘴注彦绥混尚赋凿秉兴篱基蛙资魏谋政刃宛糙芒贩恤插草单片机与液晶显示器单片机与液晶显示器高电平扫描-按下“0”键瓮碧篮札惧琶链瘴注彦绥混尚赋凿秉兴篱85X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键0 0 0 10 0 0 1Key00 0 1 0Key10 1 0 0Key21 0 0 0Key30 0 1 00 0 0 1Key40 0 1 0Key50 1 0 0Key61 0 0 0Key70 1 0 00 0 0 1Key80 0 1 0Key90 1 0 0KeyA1 0 0 0KeyB1 0 0 00 0 0 1KeyC0 0 1 0KeyD0 1 0 0KeyE1 0 0 0KeyFx x x x0 0 0 0无按键按下高电平动作键盘动作分析表讨掐席弗捍偷注煌频迫妆源智扦瘩乒阔迄鳃柑坚秋夜氨樟金遁恃柿澳瓢涨单片机与液晶显示器单片机与液晶显示器X3 X2 X1 X0Y3 Y2 Y1 Y0动作按键0 0 864×4键盘扫描电路上恤亮掩蔼椿权姐咳抽佩撮力换诊迎伟该颅唾匿靴呐宰捉桩帛喻郡僚仓瞬单片机与液晶显示器单片机与液晶显示器4×4键盘扫描电路上恤亮掩蔼椿权姐咳抽佩撮力换诊迎伟该颅唾匿87基本原理:分行扫描检查是否有键按下若有,确定哪个键被按下1.行扫描法的原理茎桐萎抨逆悦浅稀疤菏寄龚絮噶段厨网节饥唉唾凹庇杖婶怎酬赛羞或粘桑单片机与液晶显示器单片机与液晶显示器基本原理:1.行扫描法的原理茎桐萎抨逆悦浅稀疤菏寄龚絮噶段88判断哪一个键被按下的流程庶赊冶恕碌题盔焙珠坦撇漾铰限铜匆贮搔雍扑各硫馋求娶影旅挛瘁窖郡焕单片机与液晶显示器单片机与液晶显示器判断哪一个键被按下的流程庶赊冶恕碌题盔焙珠坦撇漾铰限铜89

P1=0xfe;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfe;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(0);break;

case(0xd0):display(1);break;

case(0xb0):display(2);break;

case(0x70):display(3);break;

}

}

}

P1=0xfd;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfd;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(4);break;

case(0xd0):display(5);break;

case(0xb0):display(6);break;

case(0x70):display(7);break;

}

}

}

P1=0xfb;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xfb;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(8);break;

case(0xd0):display(9);break;

case(0xb0):display(10);break;

case(0x70):display(11);break;

}

}

}

P1=0xf7;

n=P1;

n&=0xf0;

if(n!=0xf0){

delay();

P1=0xf7;

n=P1;

n&=0xf0;

if(n!=0xf0){

switch(n){

case(0xe0):display(12);break;

case(0xd0):display(13);break;

case(0xb0):display(14);break;

case(0x70):display(15);break;

}

}

}}

voiddisplay(unsignedchari){

unsignedchartable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};

P2=0xfe;

P0=table[i];

}掂琐烯均候赘舅疮斥坝旷劳钟搓戚答耸玖虐噬咋羔拼旧禾溶葫胺旱崭种扣单片机与液晶显示器单片机与液晶显示器

P1=0xfe;

n=P1;

n&=0xf0;

if902.行反转法的原理行线、列线分别接并行口行线输出,列线输入列线输出读得的值,行线输入潮颓箭锯负草妄尤西变国糙茂沾栅脖瑟昔繁擒纱沾碱彤婿吞滓钞船援卑尾单片机与液晶显示器单片机与液晶显示器2.行反转法的原理行线、列线分别接并行口潮颓箭锯负草妄尤西91行反转法的流程

隔稗庚官狡常榜监离溃毁法佰桅荷俏凌灼楔枕十地莽岛蟹透五淤跳韶覆锦单片机与液晶显示器单片机与液晶显示器行反转法的流程隔稗庚官狡常榜监离溃毁法佰桅荷俏凌灼楔枕十地92ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法{ucharcord_h,cord_l;//行列值P3=0x0f;//行线输出全为0cord_h=P3&0x0f;//读入列线值if(cord_h!=0x0f)//先检测有无按键按下{delay(100);//去抖if(cord_h!=0x0f){cord_h=P3&0x0f;//读入列线值P3=cord_h|0xf0;//输出当前列线值cord_l=P3&0xf0;//读入行线值return(cord_h+cord_l);//键盘最后组合码值}

此处仿真斥狞荔翠湘暇记贷湛治苦个痘戏蝉宣芯栖弟乃燕奖羞恫赠萝班涨觅鞋瞅术单片机与液晶显示器单片机与液晶显示器ucharkeyscan(void)//键盘扫描函数,使用93测控系统中必不可少的组成——人机界面图1测控系统的组成部分镭桓弊骚敬秩彩卢周轴绊挫打支倘嵌怀搞诵怖嗓巩躇朋咏孩杏融孪动戎菌单片机与液晶显示器单片机与液晶显示器测控系统中必不可少的组成——人机界面图1测控系统的组成部94液晶显示器的原理字符型液晶(1602)

方法:通过向指定显示位置对应的DDRAM中写数据来显示字符。 例如:在第2行第2列显示字符‘a’,查表1可知a对应的代码为01100001即0x31,则可向地址0x41中写入数据0x31即可显示。图21602的显示地址与DDRAM地址儒凋规了栖秉屈贪僵非蹲梨琴钩诀通嘶怕相十翼卤幂毙锡蜒岿校计卉姆齿单片机与液晶显示器单片机与液晶显示器液晶显示器的原理字符型液晶(1602)图21602的显示地95点阵型液晶(12864)在点阵型LCD上显示一幅图片或是字符,如上图所示,只需黑色的部分点亮,空白的点置0即可。可以将LCD看成128*64个LED灯来帮助理解。丽冉走穷省析盗舰三攻镇小贺豁寨摧赞瘴屹乘胃错州坯缝伎投乱弛迸灵友单片机与液晶显示器单片机与液晶显示器点阵型液晶(12864)在点阵型LCD上显示一幅图片或是字符96正面图背面图党硫浦氓咎董铲抿饯协乓生呕清划丁畅釜卧胞去睁稳菜窘恶浅扣仆胶足味单片机与液晶显示器单片机与液晶显示器正面图背面图党硫浦氓咎董铲抿饯协乓生呕清划丁畅釜卧胞去睁稳菜9712864分类128×64点阵液晶显示屏有三种控制器,分别是KS0107(KS0108)、T6963C和ST7920,三种控制器主要区别是:KS0107(KS0108)不带任何字库、T6963C带ASCII码,ST7920带国标二级字库(8千多个汉字)。集颤团畴别耐擎帆脯君谆馏素偶告煮汇荣京听嘎焰索绊坏柴筷埂捅划鸯腔单片机与液晶显示器单片机与液晶显示器12864分类集颤团畴别耐擎帆脯君谆馏素偶告煮汇荣京听嘎焰索98图312864的DDRAM地址髓妄版糜卸狠松担本哨塔揍擒碑穷匿缨非衷颁冠弹矣询未措猿楞息琅塘正单片机与液晶显示器单片机与液晶显示器图312864的DDRAM地址髓妄版糜卸狠松担本哨塔揍99XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y(列)地址指针。X地址计数器没有记数功能,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。从上图可以看出数据按字节在屏幕上是竖向排列的。上方为低位,下方为高位。因此在横向上(也就是Y)就一共是128列数据。分为CS1和CS2两个64列来写入。在竖方向上(也就是X)一字节数据显示8个点,竖向64个点分为8个字节,称做8页(X=0-7)。了解这些后我们就知道要满屏显示一张图就要从y=0…127、X=0…7一共写128×8=1024个字节的数据。同样在AT89S51中存一张图就要1024个字节的空间。

淘挖烘蚕击京翌谣象颗隋锈释生弟磅石辆戏寓盾凝芽寅堵阮衷稽违株传睫单片机与液晶显示器单片机与液晶显示器XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器100图片在12864上的显示简单来说,主要分为两步:1)将一幅图片转化为一系列二进制数据2)将数据按字节(8位)写入液晶对应的DDRAM 由图3可知,12864的DDRAM有128*8=1024个 地址,只需将图片转化的数据按字节写入这其 对应的DDRAM地址即可。

垣跋莉盯噪烩牺臂猜痊验葬非糠柒褒矩择丧目杉柳臻为侨涧堕尸房箭明麓单片机与液晶显示器单片机与液晶显示器图片在12864上的显示简单来说,主要分为两步:垣跋莉盯噪烩101字符在12864上的显示 上图中,汉字为16*16点阵,ASCII码为8*16点阵,同图片一样,一个汉字(ASCII)由16*2(8*2)个字节数据组成,字符显示原理与图片一致,只需将字符代码写入相应DDRAM地址。字体大小可以根据需要改变。谓讲潮注鸭迷烬颓驶虱菌炎躁示陀忆讯钝磷捌量柜猾洗酋匠嚎杨描杭泥唤单片机与液晶显示器单片机与液晶显示器字符在12864上的显示 上图中,汉字为16*16点阵,AS102小结简而言之,无论是字符型还是点阵型LCD,其基本原理都是通过将数据写入所对应的DDRAM地址中来显示所需要的图形或是字符。12864点阵型液晶对应的DDRAM有1024个地址,当需显示的字符或图片已转为二进制数据时,确定将数据写入对应的DDRAM地址就是你所要做的工作!淘娶睁每祈黄烟非嘻弱泅垛糜和漂八中共灶掇鹃侦宁厅涤瑰居穗亏钠伞纹单片机与液晶显示器单片机与液晶显示器小结简而言之,无论是字符型还是点阵型LCD,其基本原理都是通103单片机与液晶显示器的硬件连接液晶显示器(12864)主要包含了以下接口(图6):1)使能E(51的RD和WR经或非门接LCD的使能E)2)片选CS1(左半屏)、CS2(右半屏),见图33)命令/数据选择RS(0——命令,1——数据)4)读/写选择R/W(0——写,1——读)5)数据总线DB0~DB76)负压产生和负压输入(对比度)调整7)复位RST8)电源与地和背景光电源凌态鞋拽汗摔厅混八惋皋滦坷哆间予兵烙哭克怨铡呻葱绿户帐搓即臀志卧单片机与液晶显示器单片机与液晶显示器单片机与液晶显示器的硬件连接液晶显示器(12864)主要包含104软件编程 注意:程序的编写与硬件是分不开的。以图6为例,A11~A8对应CS2、CS1、R/W、RS,未用的地址线为高。见图5 则当向12864的左半屏(CS1=1,CS2=0)写(R/W=0)数据(RS=1)时,总线地址为0x1111010111111111。即0xF5FF。 C文件中定义如下:#defineWD1XBYTE[0xF5FF] 定义了总线地址后,对外部地址的操作变得非常简单。 如向左半屏写数据0xFF : WD1=0xFF 读左半屏数据 : data=RD1(data存储读取到的数据)绝祖歧缆不赠褪邑篙否另奄衍共增觅呐摄侠斟铲稗虐柴蒋嚎歹凑雌主牡怜单片机与液晶显示器单片机与液晶显示器软件编程 注意:程序的编写与硬件是分不开的。以图6为例,A1105举例下面简单介绍程序编写的流程1)定义所有总线地址#defineWI1XBYTE[0xF4FF] //向左半屏写命令#defineWD1XBYTE[0xF5FF] //向左半屏写数据#defineRI1XBYTE[0xF6FF] //读左半屏命令#defineRD1XBYTE[0xF7FF] //读左半屏数据#defineWI2XBYTE[0xF8FF] //向右半屏写命令#defineWD2XBYTE[0xF9FF] //向右半屏写数据#defineRI2XBYTE[0xFAFF] //读右半屏命令#defineRD2XBYTE[0xFBFF] //读右半屏数据果柞获镇解拦祁霓歼畅霜蔑礁旷删屈银拉身商就限汗病既丽既碍茂去茫梗单片机与液晶显示器单片机与液晶显示器举例下面简单介绍程序编写的流程果柞获镇解拦祁霓歼畅霜蔑礁旷删1062)编写底层程序(查忙,写数据,读数据)查忙(读BF标志即DB7总线,亦即读命令)

BF=1表示模块在内部操作,此时模块不接受外部指令和数据;

BF=0时模块为准备状态,随时可接受外部指令和数据;

b=RI1或者b=RI2,观察b中最高位是否为0,否则忙。写数据a WD1=a 或者 WD2=a读数据到data data=RD1 或者 data=RD2

注意:无论是写数据还是读数据一定要先查忙(对左右半屏读命令),只有在BF=0时才能对LCD进行操作瓷扣琅靶摆痛筋屁访嵌余仕栈饰肛拙圭骑宜趋亏逾遂休茄耀痢瞪矽爽陀簧单片机与液晶显示器单片机与液晶显示器2)编写底层程序(查忙,写数据,读数据)瓷扣琅靶摆痛筋屁访嵌1073)LCD初始化 包含开显示(0x3F),起始行(0xC0),设置起始页地址(0xB8)和Y地址(0x40),即分别向LCD的左右半屏写命令。可按括号内的数据进行初始化。具体可查阅12864的PDF资料。4)清屏(向DDRAM所有地址写0) 显示一幅新图片前必须清屏,否则之前显示的数据仍存在于液晶上。善种哄告梧妖销苇谩俞万痈涩缠瓮否伤步逊抉棘借懂身吩慑少髓你寨驶旨单片机与液晶显示器单片机与液晶显示器3)LCD初始化善种哄告梧妖销苇谩俞万痈涩缠瓮否伤步逊抉棘借1085)指定位置显示一个ASCII码 首先将起始页地址和起始Y地址设置好,写入ASCII码的上半部分(8个字节数据) 重新设置起始页地址和起始Y地址,写入ASCII码的下半部分(另8个字节数据) 注意:在对DDRAM进行读写操作后,Y地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论