收藏 分享(赏)

按键和显示.ppt

上传人:scg750829 文档编号:8269787 上传时间:2019-06-17 格式:PPT 页数:65 大小:4.65MB
下载 相关 举报
按键和显示.ppt_第1页
第1页 / 共65页
按键和显示.ppt_第2页
第2页 / 共65页
按键和显示.ppt_第3页
第3页 / 共65页
按键和显示.ppt_第4页
第4页 / 共65页
按键和显示.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

1、第七章 单片机的接口技术,PC机除了主机以外还需要哪些部分呢?,单片机电路有时候也需要键盘、显示等外设。,本章主要内容,键盘 显示器 A/D转换 D/A转换,7.1 键盘与计算机接口,非编码键盘:按键的动作靠软件识别 编码键盘:由硬件电路产生按键的键值或编号,并由硬件识别闭合键,按下:P1.0输入低电平0 松开:P1.0输入高电平1,键功能的实现:对于一组键或一个键盘,需通过接口电路与单片机相连。可采用查询或中断方式测试有无键按下,再确定是哪一个键按下,将该键号送入累加器ACC,然后判断是数字键还是功能键,若是数字键,则将键号对应的数字送入相关输入缓冲区;若是功能键,则通过跳转指令转入执行该键

2、的功能程序,执行完后再返回主程序。,抖动、去抖,在按键按下与断开的过程中,按键产生机械抖动。抖动现象将使 CPU产生误判断。,在键数较少时, 可采用硬件去抖, 而当键数较多时, 采用软件去抖,双稳态去抖电路,波,7.1.1 独立式非编码键盘接口,MOV A,#0FFH MOV P1,A MOV A,P1 JNB ACC.0,KEY0 JNB ACC.1,KEY1 ,假设为P1口,电路简单;但键数较多时,需占用较多的I/O线,准双向口:输入时须先写1,用于较多按键,节省I/O线。 采用逐行(逐列)扫描法识别按键,编程较复杂。,7.1.2 行列式非编码键盘接口,关键是如何识别键号,1、键盘工作原理

3、,行线:通过电阻接+5V。没有键闭合时,行线呈高电平; 某键闭合时,该键对应的行线和列线被短路。此时行线电平由列线电位所决定。,按键识别扫描法,例:键盘扫描程序,SERCH: MOV R2,#0EFH MOV R3,#00HLINE0: MOV A,R2 MOV P1,A MOV A,P1 JB ACC.3,LINE1MOV A,#00HAJMP TRYK LINE1: JB ACC.2,LINE2MOV A,#04HAJMP TRYK LINE2: JB ACC.1,LINE3MOV A,#08H,AJMP TRYK LINE3: JB ACC.0,LINE4 MOV A,#0CH AJMP

4、 TRYK LINE4: INC R3 MOV A,R2 RL A JNB ACC.0,BACK MOV R2,A AJMP LINE0 TRYK: ADD A,R3 BACK: RET,7.1.3单片机对非编码键盘的控制,程序扫描方式 CPU不断调用键盘处理程序,对键盘进行扫描 定时扫描方式 利用定时器的溢出中断请求,每隔一定的时间对键盘扫描一次 中断扫描方式 提高CPU的效率,当键盘上有键闭合时产生中断请求,7.2 LED显示器及接口设计,1、由发光二极管组成,分共阳、共阴两种。,Low Emitting Diode,问题引入:,LED显示器如何显示出指定数字/字符?,2. LED显示字符

5、方法:COM接低电平; 各输入端输入一个显示代码,如5BH01011011,对应c,f灭,而a,b,d,e,g点亮,则LED显示字符“2” 显示各种字符的代码见下表。对于共阳极LED,将显示代码取反。 若显示小数点,可利用D7位。,限流电阻,字型表,静态显示方式,连接所有LED的位选均共同连接到+VCC或GND,每个LED的8根段选线分别连接一个8位并行I/O口,从该I/O口送出相应的字型码显示字型。特点原理简单;显示亮度强,无闪烁;占用I/O资源较多。 常用于位数较少的场合。,静态显示方式,动态显示方式,动态显示方式,将各个显示器的输入(段选)线并联,由一个I/O口提供字形代码;由另一个I/

6、O口提供位选代码。采用软件扫描显示方法,某个时刻只点亮1个显示器,点亮时间不超过20ms,分时逐个点亮LED。,与静态显示相比,特点: 节省硬件电路及I/O资源; 占用CPU时间多; 亮度相对较低; 适用于LED位数较多的场合。,利用视觉暂留特性,怎样实现显示呢?,延时时间若为1s或10ms,看到的现象分别是什么?,问题1:当数码管显示数字时,怎样使用查表程序,1. 查表方法,2. 表格建立,问题2:从缓冲区取数据的查表方法,MOV R1,#40H,MOV A,R1 MOVC A,A+DPTR MOV P2, A,根据缓冲区内容查表,设显示缓冲区首地址,如何取显示的下一位?,INC R1,根据

7、缓冲区的数据显示,例:6位共阴LED。利用8155的PA口(假设地址7F01H)作为位选,75452反相驱动;PB口(7F02H)作为段选,7407同相驱动。在片内RAM中设一显示缓冲区79H7EH,依次存放要显示的6个字符(高4位清0,即0009H,0A0FH)。反复调用显示子程序。,键盘和显示器综合应用 停车场计数器,硬件设计 软件设计,硬件电路设计,显示部分计数部分,实际电路多数采用传感器,这里用按键模拟代替,停车场计数器程序设计,编写程序的基本思路 主程序完成单片机的初始设定、初始显示等 两个按键可采用查询或者中断方式,本例子采用中断方式,各段功能程序地址确定,MAIN主程序流程,进车

8、中断子程序 模拟“进车”按键按下后,出车中断子程序,DEC,总结,通过静态显示和独立式按键完成了一个应用系统的设计。 实际系统通常需传感器。,思考,LCD液晶显示器,Liquid Crystal Display,微功耗、体积小、显示内容丰富、超薄轻巧。,这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍它的编程方法。,任务:如何在LCD的指定位置显示出指定的字符以及字符串。,2行16列,Hello world,主要内容,TC1602A LCD模块引脚及结构 单

9、片机与字符型LCD模块接口 LCD接口程序设计,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,VSS,VDD,VO,RS,R/W,E,DB0,DB1,A,DB3,DB2,DB5,DB4,DB7,DB6,K,LCD模块,Vss: +5V电源管脚(Vcc) VDD: 地管脚(GND) Vo: 液晶显示驱动电源(0V5V),V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。,一、TC1602A LCD模块引脚及结构,1,2,3,4,5,6,7,8,9,10,11,12,13

10、,14,15,16,VSS,VDD,VO,RS,R/W,E,DB0,DB1,A,DB3,DB2,DB5,DB4,DB7,DB6,K,LCD模块,DB0DB7:数据线,可以用8位连接,也可以只用高4位连接,节约单片机资源,本实验中采用的是八位连接方法。,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,VSS,VDD,VO,RS,R/W,E,DB0,DB1,A,DB3,DB2,DB5,DB4,DB7,DB6,K,LCD模块,A:背光控制正电源 K:背光控制地,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,VSS,VDD,VO,RS,R/

11、W,E,DB0,DB1,A,DB3,DB2,DB5,DB4,DB7,DB6,K,LCD模块,单片机与LCD模块之间有四种基本操作:写命令读状态写显示数据读显示数据,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,VSS,VDD,VO,RS,R/W,E,DB0,DB1,A,DB3,DB2,DB5,DB4,DB7,DB6,K,LCD模块,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,VSS,VDD,VO,RS,R/W,E,DB0,DB1,A,DB3,DB2,DB5,DB4,DB7,DB6,K,LCD模块,RS:数据和指令选择控制端,RS

12、=0:命令/状态;RS=1:数据 R/W:读写控制线,R/W=0:写操作;R/W=1:读操作 E:数据读写操作控制位,E线向LCD模块发送一个脉冲,LCD模块与单片机之间将进行一次数据交换,二、单片机与字符型LCD模块接口,数据线:DB7DB0接单片机的P1.7 P1.0,控制端:RS P3.0R/W P3.1E P3.2,return,单片机与LCD模块硬件连接,连线表:,三、LCD接口程序设计,程序设计 功能设置 写命令子程序LCD初始化:按一定顺序写命令字如:写清屏命令字、写DDRAM光标定位地址命令字 显示数据 写数据子程序 读入状态字读状态子程序,1. 写命令,读写操作、屏幕和光标的

13、操作都是通过指令编程来实现,清除屏幕-01H ,光标复位到地址00H位置,光标复位。光标返回到地址00H,return,光标和显示模式设置。I/D:光标移动方向,1:右移,0:左移; S:屏幕上所有文字是否左移或者右移。S=1:移位 S=0:不移位,设整体显示开关(D),光标显示开关(C),光标位的字符闪耀(B) D=1;C=0;B=0 000011000cH,S/C:高电平时移动显示的文字,低电平时移动光标,设接口数据位数(DL),显示行数(N),及字型(F) DL=1,8位 =0: 4位 N=1:2行 =0:1行 F=1:510 =0: 570011100038H,字符发生器RAM地址设置

14、,设置DDRAM地址,为显示定位,读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。,定位光标位置,把显示数据显示在某个位置,就是把显示数据写在相应的DDRAM地址中,DDRAM地址占7位。Set DDRAM address命令如下:,NOTICE 光标定位,写入一个显示字符后,DDRAM地址会自动加1或减1,加或减由输入方式字设置;第1行DDRAM地址与第2行DDRAM地址并不连续。,80H,81H,82H,83H,84H,8dH,8eH,8fH,0c0H,0c1H,0c2H,0c3H,0c4H,0cdH,0ceH,0cfH,2. 写数据

15、,3. 读状态,液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 。,例如要在液晶模块的第二行第一个字符的位置显示字母“A”,第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000

16、000B(C0H),LCD显示程序设计,程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序 ,然后输入显示位置的地址,最后输入要显示的字符的代码。,lcd_rs bit P3.0 ;LCD寄存器选择lcd_rw bit P3.1 ;LCD读写控制lcd_e bit P3.2 ;LCD选通lcdio equ P1lcdbusy equ 33H ;LCD忙寄存lcddata equ 34H ;LCD传递数据ORG 0000Hljmp main ;复位入口,转主程序 ORG 030H Main: m

17、ov sp,#50H ;设置堆栈指针mov dptr,#char1lcall delaylcall delaylcall lcd_init ;调液晶初始化 lcall lcd_sendchar loop:nopAjmp loop,lcd_init_3:lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_init_3mov lcddata,#0dH;显示状态设置lcall lcd_writecommlcall delaylcd_init_4:lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_init_4mov lcdd

18、ata,#01H ;清屏lcall lcd_writecommlcall delayret,lcd_init: ;液晶初始化程序 lcd_init_1:lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_init_1mov lcddata,#38H; 8位2行5x7点阵lcall lcd_writecommlcall delay lcd_init_2:lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_init_2mov lcddata,#06H;文字不动,光标自 ;动右移lcall lcd_writecommlcal

19、l delay,lcd_sendchar: ;发送字符 lcd_sendchar_1: lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_sendchar_1mov lcddata,#80H;lcall lcd_writecommlcall delaymov r1,#16 lcd_sendchar_2: lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_sendchar_2CLR Amovc A,A+DPTRInc dptrmov lcddata,Alcall lcd_writedatalcall delaydjn

20、z r1,lcd_sendchar_2,lcd_sendchar_3:lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_sendchar_3mov lcddata,#0c0H;lcall lcd_writecommlcall delaymov r1,#16mov dptr,#char2 lcd_sendchar_4: lcall lcd_readbusymov a,lcdbusycjne A,#0,lcd_sendchar_4CLR Amovc A,A+DPTRInc dptrmov lcddata,Alcall lcd_writedatalcall d

21、elaydjnz r1,lcd_sendchar_4ret,lcd_writecomm: ;写命令clr lcd_rsnopclr lcd_rwnopmov lcdio,lcddatanopsetb lcd_enopclr lcd_eret lcd_writedata: ;写数据setb lcd_rsnopclr lcd_rwnopmov lcdio,lcddatanopsetb lcd_enopclr lcd_eret,lcd_readdata: ;读数据setb lcd_rsnopsetb lcd_rwnopsetb lcd_enopmov lcdbusy,lcdioclr lcd_eret lcd_readbusy: ;读忙clr lcd_rsnopsetb lcd_rwnopsetb lcd_enopmov lcdbusy,lcdioclr lcd_e anl lcdbusy,#80Hret,char1:DB WelcomeTo ; char2:DB ;END,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报