51单片机与显示器键盘接口及编程ppt课件.ppt

上传人:牧羊曲112 文档编号:1374951 上传时间:2022-11-16 格式:PPT 页数:60 大小:1.37MB
返回 下载 相关 举报
51单片机与显示器键盘接口及编程ppt课件.ppt_第1页
第1页 / 共60页
51单片机与显示器键盘接口及编程ppt课件.ppt_第2页
第2页 / 共60页
51单片机与显示器键盘接口及编程ppt课件.ppt_第3页
第3页 / 共60页
51单片机与显示器键盘接口及编程ppt课件.ppt_第4页
第4页 / 共60页
51单片机与显示器键盘接口及编程ppt课件.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《51单片机与显示器键盘接口及编程ppt课件.ppt》由会员分享,可在线阅读,更多相关《51单片机与显示器键盘接口及编程ppt课件.ppt(60页珍藏版)》请在三一办公上搜索。

1、第九章 51单片机与显示器、键盘接口及编程,9.1 51单片机与LED显示器接口,9.1.1 LED显示器的结构与原理,在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。,其中:(a)为共阴极结构。(b)为共阳极结构。(c)图为管脚图,从ag管脚输入不同的8位二进制编码,可显示不同的数字或字符。共阴极和共阳极的字段码互为反码 。,9.1.2 LED数码管显示器的译码方式,一硬件译码方式,译码方式是指由显示字符转换得到对应的字段码的方式,硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如MOTOTOLA公司生产的MC

2、14495芯片就是其中的一种,MC14495是共阴极一位十六进制数字段码转换芯片,能够输出用四位二进制表示形式的一位十六进制数的七位字段码,不带小数点。它的内部结构如图。,二软件译码方式,软件译码方式就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。,9.1.3 LED数码管的显示方式,一LED静态显示,LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O口线相连。要显示字符,直接在I/O线送相应的字段码。,二LED动态显示方式,LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而

3、是通过相应的I/O口线控制。,设数码管为共阳极,它的工作过程为:第一步使右边第一个数码管的公共端D0为1,其余的数码管的公共端为0,同时在I/O(1)上送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的公共端D1为1,其余的数码管的公共端为0,同时在I/O(1)上送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,依此类推,直到最后一个,这样四个数码管轮流显示相应的信息,一个循环完后,下一循环又这样轮流显示,从计算机的角度看是一个一个的显示,但由于人的视觉滞留,只要循环的周期足够快,看起来所有的数码管都是一起显示的了。这就是动

4、态显示的原理。而这个循环周期对于计算机来说很容易实现。所以在单片机中经常用到动态显示。,9.1.4 LED显示器与单片机的接口,LED显示器从译码方式上有硬件译码方式和软件译码方式。从显示方式上有静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。,一硬件译码静态显示,下图是一个两位数码管硬件译码静态显示的接口电路图。,二软件译码动态显示,下图是一个8位软件译码动态显示的接口电路图。图中用8255A扩展并行I/O口接数码管,数码管采用动态显示方式,8位数码管的段选线并联与8255A的A口

5、通过74LS373相连,8位数码管的公共端通过74LS373分别与8255A的B口相连。也即8255A的B口输出位选码选择要显示的数码管,8255A的A口输出字段码使数码管显示相应的字符,8255A的A口和B口都工作于方式0输出。A口、B口、C口和控制口的地址分别为7F00H、7F01H、7F02H和7F03H。,G,G,OE,OE,软件译码动态显示汇编语言程序为:(设8个数码管的显示缓冲区为片内RAM的57H50H单元)DISPLAY:MOV A,#10000000B ;8255初始化MOV DPTR,#7F03H ;使DPTR指向8155控制寄存器端口MOVX DPTR,AMOV R0,#

6、57H ;动态显示初始化,使R0指向缓冲区首址MOV R3,#7FH ;首位位选字送R3MOV A,R3LD0:MOV DPTR,#7F00H ;使DPTR指向PA口MOVX DPTR,A ;选通显示器低位(最右端一位)INC DPTR ;使DPTR指向PB口MOV A,R0 ;读要显示数ADD A,#0DH ;调整距段选码表首的偏移量MOVC A,A+PC ;查表取得段选码MOVX DPTR,A ;段选码从PB口输出ACALL DL1 ;调用1 ms延时子程序DEC R0 ;指向缓冲区下一单元MOV A,R3 ;位选码送累加器A,JNB ACC.0,LD1 ;判断8位是否显示完毕,显示完返回

7、RR A ;未显示完,把位选字变为下一位选字MOV R3,A ;修改后的位选字送R3AJMP LD0 ;循环实现按位序依次显示LD1:RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;字 段码表DB: 7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOV R7,#02H ;延时子程序DL: MOV R6,#0FFHDL0:DJNZ R6,DL0DJNZ R7,DLRET,软件译码动态显示C语言程序为:#include #include /定义绝对地址访问#define uchar unsigned char#define uint u

8、nsigned intvoid delay(uint); /声明延时函数void display(void); /声明显示函数uchar disbuffer8=0,1,2,3,4,5,6,7; /定义显示缓冲区void main( ) XBYTE0 x7f03=0 x80; /8255初始化 while(1) display( ); /设显示函数 /*延时函数*void delay(uint i) /延时函数 uint j; for (j=0;ji;j+) ,/*显示函数*void display(void) /定义显示函数uchar codevalue16=0 x3f,0 x06,0 x5b

9、,0 x4f,0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71; /0F的字段码表uchar chocode8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; /位选码表uchar i,p,temp;for (i=0;i8;i+) p=disbufferi; /取当前显示的字符 temp=codevaluep; /查得显示字符的字段码 XBYTE0 x7f00=temp; /送出字段码 temp=chocodei; /取当前的位选码 XBYTE0 x

10、7f01=temp; /送出位选码 delay(20); /延时1ms ,9.2 51单片机与键盘接口,9.2.1 键盘的工作原理,键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。,图9.1,键盘的处理主要涉及三个方面:,1按键的识别,2抖动的消除,消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。,硬件消抖是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用RS触发器或单稳态电路。如图。,软件消抖是利用延时来跳过抖动过程,图9.2,3键位的编码,通常有两种方法编码。,(1)用连接键盘的I/O线的二进制组合进行编码。如(a)

11、图,(2)顺序排列编码。如(b)图,处理方法如下:编码值=行首编码值X+列号Y。,图9.3,9.2.2 独立式键盘与单片机的接口,键盘的结构形式一般有两种:独立式键盘与矩阵式键盘。,独立式键盘就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。,图9.4,图9.4(a)为中断方式工作的独立式键盘的结构形式,(b)为查询方式工作的独立式键盘的结构形式,下面是针对图9.2(b)图查询方式的汇编语言形式的键盘程序。总共有8个键位,KEY0KEY7为8个键的功能程序。START:MOV A,#0FFH;MOV P1,A ;置P1口为输入状态MOV A,P1

12、 ;键状态输入CPL AJZ START ;没有键按下,则转开始JB ACC.0,K0 ;检测0号键是否按下,按下转JB ACC.1,K1 ;检测1号键是否按下,按下转JB ACC.2,K2 ;检测2号键是否按下,按下转JB ACC.3,K3 ;检测3号键是否按下,按下转JB ACC.4,K4 ;检测4号键是否按下,按下转JB ACC.5,K5 ;检测5号键是否按下,按下转JB ACC.6,K6 ;检测6号键是否按下,按下转JB ACC.7,K7 ;检测7号键是否按下,按下转JMP START ;无键按下返回,再顺次检测,K0:AJMP KEY0K1:AJMP KEY1K7:AJIMP KEY

13、7KEY0: ;0号键功能程序JMP START ;0号键功能程序执行完返回KEY1: ;0号键功能程序JMP START ;1号键功能程序执行完返回KEY7: ;7号键功能程序JMP START ;7号键功能程序执行完返回,9.2.3 矩阵键盘与单片机的接口,矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,键位设置在行列的交点上。例如44的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。,矩阵键盘的连接方法有多种,可直接连接于单片机的I/O口线;可利用扩展的并行I/O口连接;也可利用可编程的键盘、显示接口芯片(如8279)进行连接等等。其中,

14、利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。下图就是通过8255芯片扩展的并行I/O口连接48的矩阵键盘。,图9.5,一矩阵键盘的工作过程,对矩阵键盘的工作过程可分两步:第一步是CPU首先检测键盘上是否有键按下;第二步是再识别是哪一个键按下。以9.3图为例:1检测键盘上是否有键按下处理方法是:将列线送入全扫描字,读入行线的状态来判别。其具体过程如下:PA口输出00H,即所有列线置成低电平,然后将行线电平状态读入累加器A中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。2识别键盘中哪一个键按下处理方法是:将列线逐列置低电平,检查行输入状态,称为逐列扫

15、描。其具体过程如下:从PA0开始,依次输出“0”,置对应的列线为低电平,然后从PC口读入行线状态,如果全为“1”,则按下的键不在此列;如果不全为“1”,则按下的键必在此列,而且是该列与“0”电平行线相交的交点上的那个键。为求取编码,在逐列扫描时,可用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。,二矩阵键盘的工作方式,1查询工作方式,这种方式是直接在主程序中插入键盘检测子程序,主程序每执行一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果把没有键按下,则跳过键识别,直接执行主程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值

16、,然后根据编码值进行相应的处理,处理完后再回到主程序执行。键盘扫描子程序流程如图 。,汇编键盘扫描子程序:(硬件线路如图9.5,8255的A口、B口、C口和控制口地址分别为7F00H、7F01H、7F02H、7F03H,设8255A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。),KEY1:ACALL KS1 ;调用判断有无键按下子程序 JNZ LK1 ;有键按下时,(A)0转消抖延时KEY2:ACALL TM6ms AJMP KEY1 ;无键按下返回LK1:ACALL TM12ms ;调12 ms延时子程序 ACALL KS1 ;查有无键按下,若有则真有键按下 JNZ

17、LK2 ;键(A) 0逐列扫描 AJMP KEY2 ;不是真有键按下,返回LK2:MOV R2,#0FEH ;初始列扫描字(0列)送入R2 MOV R4,#00H ;初始列(0列)号送入R4LK4:MOV DPTR,#7F00H ;DPTR指向8255PA口 MOV A,R2 ;列扫描字送至8255PA口 MOVX DPTR,A INC DPTR ;DPTR指向8255PC口 INC DPTR,MOVX A,DPTR ;从8255 PC口读入行状态 JB ACC.0,LONE ;查第0行无键按下,转查第1行 MOV A,#00H ;第0行有键按下,行首键码#00HA AJMP LKP ;转求键

18、码LONE:JB ACC.1,LTWO ;查第1行无键按下,转查第2行 MOV A,#08H ;第1行有键按下,行首键码#08HA AJMP LKP ;转求键码LTWO:JB ACC.2,LTHR ;查第2行无键按下,转查第3行 MOV A,#10H ;第2行有键按下,行首键码#10HA AJMP LKP ;转求键码LTHR: JB ACC.3,NEXT ;查第3行无键按下,转该查下一列 MOV A,#18H ;第3行有键按下,行首键码#18HALKP: ADD A,R4 ;求键码,键码=行首键码+列号 PUSH ACC ;键码进栈保护LK3: ACALL KS1 ;等待键释放 JNZ LK3

19、 ;键未释放,等待 POP ACC ;键释放,键码A RET ;键扫描结束,出口状态(A)=键码,NEXT:INC R4 ;准备扫描下一列,列号加1MOV A,R2 ;取列扫描字送累加器AJNB ACC.7,KEND ;判断8列扫描否?扫描完返回RL A ;扫描字左移一位,变为下一列扫描字MOV R2,A ;扫描字送入R2保存AJMP LK4 ;转下一列扫描KEND:AJMP KEY1 KS1:MOV DPTR,#7F00H ;DPTR指向8255PA口MOV A,#00H ;全扫描字AMOVX DPTR,A ;全扫描字送往8255PA口INC DPTR ;DPTR指向8255PC口INC D

20、PTR MOVX A,DPTR ;读入PC口行状态CPL A ;变正逻辑,以高电平表示有键按下ANL A,#0FH ;屏蔽高4位,只保留低4位行线值RET ;出口状态:(A)0时有键按下,TM12ms:MOV R7,#18H ;延时12 ms子程序TM:MOV R6,#0FFHTM6:DJNZ R6,TM6DJNZ R7,TMRETTM6ms:MOV R7,#0CH ;延时6 ms子程序TM2:MOV R6,#0FFHTM62:DJNZ R6,TM6DJNZ R7,TMRET,#include #include #define uchar unsigned char#define uint u

21、nsigned intvoid delay (uint);uchar checkkey( );uchar keyscan( );void main ( ) uchar key; while(1); key=keyscan; delay(2000); ,C语言键盘扫描子程序:,/*延时函数*void delay(uint DelayTime) /延时1ms*DelayTimeuint j=0;for(;DelayTime0;DelayTime-)for(j=0;j125;j+);/* 检测有无键按下函数*uchar checkkey ( ) /检测有无键按下,有返回0 xff,无返回0 ucha

22、r i; XBYTE0 x7f00=0 x00; i= XBYTE0 x7f02; i=i,/*键盘扫描函数*uchar keyscan ( ) /键盘扫描,如果有键按下,则返回该键键值编 码,无键按下,则返回0 xff uchar scancode; uchar codevalue; uchar m; uchar k; uchar i,j;if(checkkey=0) return(0 xff);else delay(200); if(checkkey=0) return(0 xff); else scancode=0 xfe; m=0 x00; for (i=0;i8;i+) k=0 x0

23、1; XBYTE0 x7f00=scancode;,for (j=0;j4;j+) if(XBYTE0 x7f02 ,2定时扫描工作方式 定时扫描工作方式是利用单片机内部定时产生中断(例如10ms),当定时时间到时,CPU执行定时器中断服务程序,对键盘进行扫描。如果有键位按下识别出该键位,并执行相应的键处理功能程序。定时扫描方式的硬件电路与查询方式的电路相同。,3中断处理方式 在计算机应用系统中,大多数情况下并没有键输入,但无论是查询方式还是定时扫描方式,CPU都在不断对键盘进行检测,这样会大量占用CPU执行时间。为了提高效率,可采用中断方式,中断方式通过增加一条中断请求信号线(可参考图9.4

24、(a),当没有按键按下时,无中断请求,有按键时,向CPU提出中断请求,CPU响应后执行中断服务程序,在中断服务程序中对键盘进行扫描。这样在没有键按下时,CPU就不会执行扫描程序,提高了CPU的工作效率。中断服务程序中的键盘扫描程序与查询方式相同。,9.3 单片机与LCD接口,液晶显示器简称LCD显示器。它是利用液晶经过处理后能改变光线的传输方向的特性实现显示信息。液晶显示器按其功能可分为三类:笔段式液晶显示器、字符点阵式液晶显示器和图形点阵式液晶显示器。前两种可显示数字、字符和符号等,而图形点阵式液晶显示器还可以显示汉字和任意图形,达到图文并茂的效果。,9.3.1 字符型LCD液晶显示器,目前

25、市面上常用的有16字1行、16字2行、20字2行和40字2行等的字符液晶显示模块。这些LCM虽然显示字数各不相同,但是都具有相同的输入输出界面。本节将以162字符型液晶显示模块RT-1602C为例,详细介绍字符型液晶显示模块的应用。,一字符型液晶显示模块RT-1602C的外观与引脚,什么是1602LCD液晶,1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔 每行之间也有也有间隔 起到了字符间距和行间距的作用,正因为如此 所以他不能显示图形(用自定义

26、CGRAM,显示效果也不好)1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。,1602LCD的特性,+5V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有160个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRAM,字符型LCD1602通常有14条引脚线或16条引脚线的L

27、CD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),,RT-1602C采用标准的16脚接口,各引脚情况如下:,第1脚:VSS,电源地第2脚:VDD,+5V电源第3脚:VL,液晶显示偏压信号第4脚:RS,数据/命令选择端,高电平时选择数据寄存器、低电 平时选择指令寄存器。,第5脚:R/W,读/写选择端,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。,第6脚:E,端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7,

28、为8位双向数据线。第15脚:BLA,背光源正极第16脚:BLK,背光源负极,二字符型液晶显示模块RT-1602C的内部结构,液晶显示模块RT-C1602C的内部结构可以分成三部份:一为LCD控制器,二为LCD驱动器,三为LCD显示装置,如图所示:,控制器采用HD44780,驱动器采用HD44100。HD44780是集控制器,驱动器于一体,专用于字符显示控制驱动集成电路。HD44100是作扩展显示字符位的。HD44780是字符型液晶显示控制器的代表电路。HD44780集成电路的特点:1、可选择57或510点字符。2、HD44780不仅作为控制器而且还具有驱动4016点阵液晶像素的能力,并且HD4

29、4780的驱动能力可通过外接驱动器扩展360列驱动。HD44780可控制的字符高达每行80个字,也就是580=400点,HD44780内藏有16路行驱动器和40路列驱动器,所以HD44780本身就具驱动有1640点阵LCD的能力(即单行16个字符或两行8个字符)。如果在外部加一HD44100外扩展多40路/列驱动,则可驱动162LCD。3、HD44780的显示缓冲区DDRAM、字符发生存储器(ROM)及用户自定义的字符发生器CGRAM全部内藏在芯片内。HD44780有80个字节的显示缓冲区,分两行,地址分别00H27H,40H67H,它下实际显示位置的排列顺序跟LCD的型号有关,液晶显示模块R

30、T-1602C的显示地址与实际显示位置的关系如图所示。,HD44780内藏的字符发生存储器(ROM)已经存储了160个不同的点阵字符图形,如图所示:,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。比如数字“1”的代码是00110001B(31H),又如大写的英文字母“A”的代码是01000001B(41H),可以看出英文字母的代码与ASCII编码相同。要显示“1”时,我们只需将ASCII码31H存入DDRAM指定位置,显示模块将在相应的位置把数字“1”的点阵字符图形显示出来,我们就能看到数字“1”了。,4、HD44780具有8位数据和4位数据

31、传输两种方式,可与4/8位CPU相连。5、HD44780具有简单而功能较强的指令集,可实现字符移动,闪烁等显示功能。,三指令格式与指令功能,LCD控制器HD44780内有多个寄存器,通过RS和R/W引脚共同决定选择哪一个寄存器,选择情况如表,总共有11条指令,它们的格式和功能如下:,1清屏命令 格式:,功能:清除屏幕,将显示缓冲区DDRAM的内容全部写入空格(ASCII20H)。光标复位,回到显示器的左上角。地址计数器AC清零。,2光标复位命令格式:,功能:设定当写入一个字节后,光标的移动方向以及后面的内容是否移动。当I/D=1时,光标从左向右移动;I/D=0时,光标从右向左移动。当S=1时,

32、内容移动,S=0时,内容不移动。,3输入方式设置命令,功能:设定当写入一个字节后,光标的移动方向以及后面的内容是否移动。当I/D=1时,光标从左向右移动;I/D=0时,光标从右向左移动。当S=1时,内容移动,S=0时,内容不移动。,4显示开关控制命令,功能:控制显示的开关,当D=1时显示,D=0时不显示。控制光标开关,当C=1时光标显示,C=0时光标不显示。控制字符是否闪烁,当B=1时字符闪烁,B=0时字符不闪烁。,格式:,格式:,5光标移位置命令格式:,功能:移动光标或整个显示字幕移位。当S/C=1时整个显示字幕移位,当S/C=0时只光标移位。当R/L=1时光标右移,R/L=0时光标左移。,

33、6功能设置命令格式:,功能:设置数据位数,当DL=1时数据位为8位,DL=0时数据位为4位。设置显示行数,当N=1时双行显示,N=0时单行显示。设置字形大小,当F=1时510点阵,F=0时为57点阵。,7设置字库CGRAM地址命令,格式:,功能:设置用户自定义CGRAM的地址,对用户自定义CGRAM访问时,要先设定CGRAM的地址,地址范畴063。,8显示缓冲区DDRAM地址设置命令,格式:,功能:设置当前显示缓冲区DDRAM的地址,对DDRAM访问时,要先设定DDRAM的地址,地址范畴0127。,9读忙标志及地址计数器AC命令,格式:,功能:读忙标志及地址计数器AC,当BF=1时则表示忙,这

34、时不能接收命令和数据;BF=0时表示不忙。低7位为读出的AC的地址,值为0127。,10写DDRAM或CGRAM命令,功能:向DDRAM或CGRAM当前位置中写入数据。对DDRAM或CGRAM写入数据之前须设定DDRAM或CGRAM的地址。,格式:,11读DDRAM或CGRAM命令格式:,功能:从DDRAM或CGRAM当前位置中读邮数据。当DDRAM或CGRAM读出数据时,先须设定DDRAM或CGRAM的地址。,四LCD显示器的初始化LCD使用之前须对它进行初始化,初始化可通过复位完成,也可在复位后完成,初始化过程如下:1清屏。2功能设置。3开/关显示设置。4输入方式设置。,9.3.2 LCD

35、显示器与单片机的接口与应用,下图是LCD显示器与8051单片机的接口图,图中RT-1602C的数据线与8051的P1口相连,RS与8051的P2.0相连,R/ W与8051的P2.1相连,E端与8051的P2.7相连。编程在LCD显示器的第一行、第一列开始显示“GOOD”,第二行、第6列开始显示“BYE”。,汇编语言程序:RS BIT P2.0RW BIT P2.1E BIT P2.7ORG 00HAJMP STARTORG 50H;主程序START:MOV SP,#50HACALL INITMOV A,#10000000B ;写入显示缓冲区起始地址为第1行第1列ACALL WC51RMOV

36、A,“G” ;第1行第1列显示字母“G”。ACALL WC51DDRMOV A,“O” ;第1行第2列显示字母“O”。ACALL WC51DDRMOV A,“O” ;第1行第3列显示字母“O”。ACALL WC51DDRMOV A,“D” ;第1行第4列显示字母“D”。ACALL WC51DDR,MOV A,#11000101B ;写入显示缓冲区起始地址为第2行第6列。ACALL WC51RMOV A,“B” ;第2行第6列显示字母“B”。ACALL WC51DDRMOV A,“Y” ;第2行第7列显示字母“Y”。ACALL WC51DDRMOV A,“E” ;第2行第8列显示字母“E”。AC

37、ALL WC51DDRLOOP:AJMP LOOP;初始化子程序INIT:MOV A,#00000001H ;清屏ACALL WC51RMOV A,#00111000B ;使用8位数据,显示两行,使用5*7的字型。LCALL WC51RMOV A,#00001110B ;显示器开,光标开,字符不闪烁。LCALL WC51RMOV A,#00000110B ;字符不动,光标自动右移一格。LCALL WC51RRET,;检查忙子程序F_BUSY:PUSH ACC ;保护现场PUSH DPHPUSH DPLPUSH PSWWAIT:CLR RSSETB RWCLR ESETB EMOV A,P1CL

38、R EJB ACC.7,WAIT ;忙,等待POP PSW ;不忙,恢复现场POP DPLPOP DPHPOP ACCACALL DELAYRET,;写入命令子程序。WC51R:ACALL F_BUSYCLR ECLR RSCLR RWSETB EMOV P1,ACCCLR EACALL DELAYRET;写入数据子程序。WC51DDR:ACALL F_BUSYCLR ESETB RSCLR RWSETB EMOV P1,ACCCLR EACALL DELAYRET,;延时子程序。DELAY:MOV R6,#5D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1RETEND,C语

39、言编程:#include #define uchar unsigned charsbit RS=P20;sbit RW=P21;sbit E=P27;void delay(void);void init(void);void wc5r(uchar i);void wc51ddr(uchar i);void fbusy(void);/主函数void main()SP=0 x50;init( );wc51r(0 x80); /写入显示缓冲区起始地址为第1行第1列wc51ddr(0 x44); /第1行第1列显示字母“G”wc51ddr(0 x4f); /第1行第2列显示字母“O”wc51ddr(0

40、 x4f); /第1行第3列显示字母“O”wc51ddr(0 x47); /第1行第4列显示字母“D”,wc51r(0 xc5); /写入显示缓冲区起始地址为第2行第6列wc51ddr(0 x42); /第2行第6列显示字母“B”wc51ddr(0 x59); /第2行第7列显示字母“Y”wc51ddr(0 x45); /第2行第8列显示字母“E”while(1);/初始化函数void init( )wc51r(0 x01); /清屏wc51r(0 x38); /使用8位数据,显示两行,使用5*7的字型wc51r(0 x0e); /显示器开,光标开,字符不闪烁wc51r(0 x06); /字符不动,光标自动右移一格,/检查忙函数void fbusy( )RS=0;RW=1;E=1;E=0;while (P1&0 x80); /忙,等待delay( );/写命令函数void wc51r(uchar j)fbusy( );E=0;RS=0;RW=0;E=1;P1=j;E=0;delay( );,/写数据函数void wc51ddr(uchar j)fbusy( );E=0;RS=1;RW=0;E=1;P1=j;E=0;delay( );/延时函数void delay( )uchar y;for (y=0;y0 xff;y+) ;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号