单片机第五章显示与键盘接口技术_第1页
单片机第五章显示与键盘接口技术_第2页
单片机第五章显示与键盘接口技术_第3页
单片机第五章显示与键盘接口技术_第4页
单片机第五章显示与键盘接口技术_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章第五章 显示和键盘接口技术显示和键盘接口技术 5.1 5.1 单片机与单片机与LEDLED数码管接口数码管接口5.2 LED5.2 LED大屏幕显示器大屏幕显示器5.3 5.3 字符型字符型LCDLCD液晶显示器液晶显示器5.4 5.4 单片机与键盘接口单片机与键盘接口 单片机内资源少,容量小,在进行较复杂过单片机内资源少,容量小,在进行较复杂过程的控制时,它自身的功能远远不能满足需要。程的控制时,它自身的功能远远不能满足需要。应扩展其功能。应扩展其功能。 MCS-51MCS-51单片机可根据需要扩展:单片机可根据需要扩展: 1 1、ROMROM、RAMRAM; 2 2、并行、并行I/O

2、I/O口、串行口;口、串行口; 3 3、键盘和显示器、键盘和显示器 4 4、定时计数、中断系统等。、定时计数、中断系统等。 5.1 5.1 单片机与单片机与LEDLED显示器接口显示器接口 常用的显示器有常用的显示器有LEDLED、LCDLCD、大屏幕、大屏幕。5.1.1 LED数码管显示器的原理数码管显示器的原理LED数码管引脚共阴极共阴极 共阳极共阳极 1、LEDLED数码管显示器的连接数码管显示器的连接(1 1)共阳级结构)共阳级结构 8个发光二极管的阳极连在一起作公共端,接高电平;当阴极接低电平时,对应的发光二级管点亮。(2 2)共阴极结构)共阴极结构 8个发光二极管的阴极连在一起作公

3、共端,接低电平;当阳极接高电平时,对应的发光二级管点亮。 根据上面的分析用万用表客测试判断数码管的接法。用万能表正极(黑笔)接COM端,负极(红笔)接各段,如果灯亮,说明是共阳极,否则是共阴极。2 2、LEDLED数码管字型编码数码管字型编码 将单片机P1口的P1.0、P1.1 P1.7八个引脚依次与数码管的a、bf、dp八个段控制引脚相连接。 如果使用的是共阳极数码管,COM端接+5V,要显示数字“0”,则数码管的a、b、c、d、e、f六个段应点亮,其它段熄灭,需向P1口传送数据11000000B(C0H),该数据就是与字符“0”相对应的共阳极字型编码。 若共阴极的数码管COM端接地,要显示

4、数字“1”,则数码管的b、c两段点亮,其他段熄灭,需向P1口传送数据00000110(06H),这就是字符“1”的共阴极字型码了。共阳极段码表(0-9)低电平时亮低电平时亮TAB:DB C0h, F9h, A4h, B0h, 99h, 92h, 82h, F8h, 80h, 90h “0” “1” “2” “3” “4” “5” “6” “7” “8” “9” 共阴极段码表(0-9)高电平时亮高电平时亮TAB:DB 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h, 7Fh, 6Fh “0” “1” “2” “3” “4” “5” “6” “7” “8” “9” 3

5、 3、LEDLED数码管的显示方法数码管的显示方法(1)软件实现方法 分为动态动态和静态静态两种。(2)硬件实现方法 采用硬件译码器代替软件获得显示代码,其优点是节省CPU的机时,程序设计简单。同样分为动态和静态两种。5.1.25.1.2、LEDLED数码管的显示方式及接口数码管的显示方式及接口 ( (一一) )显示方式显示方式 静态显示静态显示单片机一次输出显示后,一直保持显示结果,直到下一次送新的显示内容。 优点:占用机时少、编程简单、显示可靠 缺点:使用硬件多、线路比较复杂、价格较高 动态显示:动态显示:单片机定时对显示器件扫描,显示器件分时工作。 优点:使用硬件少、线路简单、价格便宜

6、缺点:占用机时长1.1.静态显示:静态显示:静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管的公共端可接地(共阴极)或+5V(共阳极)。每个数码管的八个段控制引脚分别与一个八位I/O端口相连。只要I/O端口有显示字型码输出,数码管就显示给定字符,并保持不变,直到I/O口输出新的段码。 静态显示时,较小的电流可获得较亮的亮度,占用CPU时间少,编程简单。 缺点是占用I/O端口线多。 2 2、动态显示、动态显示 动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管“位选端”有效,并送出相应的字型显示编码。此时,其它位的数码管

7、因“位选端”无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,依此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。这一过程称为动态扫描显示。动态显示举例:用P1口经74LS245缓冲驱动器接LED的数据端,提供显示码;用P2口的6条线经74LS04反向器接LED控制口每一位,控制LED的亮和灭。例例1 1 六位数码管动态显示六位数码管动态显示“012345”012345”#include void delay50ms() TH1=0 x3c;/ 置定时器初值,设为50ms定时 TL1=0 xb0; TR1=1;/ 启动定时器1 while(!TF1);

8、 / 查询计数是否溢出,即定时到, TF1=1 TF1=0; / 50ms定时到,定时器溢出标志位TF1清零void main()/主函数 unsigned char led=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92; /设置数字05字型码 unsigned char i,w; TMOD=0 x10;/设置定时器1工作方式1 while(1) w=0 x01;/位选码初值为01H for(i=0;i6;i+) P2=w;/位选码取反后送位控制口P2口 w=1;/位选码左移一位,选中下一位LED P1=ledi;/显示字型码送P1口 delay50ms(); /延时

9、50ms (二)当单片机(二)当单片机I/OI/O口不够用时,可扩展并行口口不够用时,可扩展并行口81558155, 如图:如图:一片8155可提供:A(8位)、B(8位)、C(6位)三个I/O口;一个14位定时/数器和256B的存储单元。如图扩充一片8155进行6位LED的动态显示:设8155的地址:7F00H-7F05H(1) 用PB口8条线经7407驱动器接LED的数据端,提供显示码;(2) 用PA口的6条线经7406反向器接LED控制口每一位,控制LED的亮和灭。 依次改变B口的输出数据和A口的控制电平可使6位LED灯显示要求的字符。5.2 LED5.2 LED大屏幕显示器和接口大屏幕

10、显示器和接口 5.2.1 LED大屏幕显示器结构及原理大屏幕显示器结构及原理 LED点阵显示器是把很多LED发光二极管按矩阵方式排列在一起,通过对每个LED进行发光控制,完成各种字符或图形的显示。最常见的LED点阵显示模块有57(5列7行),79(7列9行),88(8列8行)结构。 LED点阵由一个一个的点(LED发光二极管)组成,总点数为行数与列数之积,引脚数为行数与列数之和。一个88的点阵式LED如下所示:每个点都由一个LED组成,总点数是行与列的乘积(64个),引脚数是行和列的和(16条)8条行线(Y0-Y7)用数字0-7表示;8条列线(X0-X7)用字母A-H表示“大大”字显示字型码示

11、意图字显示字型码示意图 当行输出高电平,对应的列输出低电平时,行列指出的LED发光。第一行第四列 显示字符“大”的过程如下:先给第一行送高电平(行高电平有效),同时给8列送11110111(列低电平有效),点亮第一行第四列的LED灯;然后给第二行送高电平,同时给列送11110111,最后给第八行送高电平,同时给列送11111111。 每行点亮延时时间为1ms,第八行结束后再从第一行开始循环显示。利用视觉驻留现象,人们看到的就是一个稳定的图形。5.2.2 LED大屏幕显示器与单片机的连接 如图所示:每一块88LED点阵式屏幕有8行(ROW0-ROW7)和8列(COL0-COL7)共16个引脚,用

12、单片机的P1口控制8条行线,用P0口控制8条列线。 应用时,每一条列线串接一个300的限流电阻。为了提高单片机的负载能力,增加一个74LS245缓冲驱动器与P1口相连,提高P1的输出电流,起到保证LED灯亮度,保护单片机的作用。 例例2 82 88 LED8 LED点阵上循环显示数字点阵上循环显示数字0-90-9 #include REG51.H void delay1ms(); /延时约1ms函数声明 void main() unsigned char code led= 0 x18,0 x24,0 x24,0 x24,0 x24,0 x24,0 x24,0 x18, /0 0 x00,0

13、x18,0 x1c,0 x18,0 x18,0 x18,0 x18,0 x18, /1 0 x00,0 x1e,0 x30,0 x30,0 x1c,0 x06,0 x06,0 x3e,/2 0 x00,0 x1e,0 x30,0 x30,0 x1c,0 x30,0 x30,0 x1e,/3 0 x00,0 x30,0 x38,0 x34,0 x32,0 x3e,0 x30,0 x30,/4 0 x00,0 x1e,0 x02,0 x1e,0 x30,0 x30,0 x30,0 x1e,/5 0 x00,0 x1c,0 x06,0 x1e,0 x36,0 x36,0 x36,0 x1c,/6 0

14、 x00,0 x3f,0 x30,0 x18,0 x18,0 x0c,0 x0c,0 x0c,/7 0 x00,0 x1c,0 x36,0 x36,0 x1c,0 x36,0 x36,0 x1c,/8 0 x00,0 x1c,0 x36,0 x36,0 x36,0 x3c,0 x30,0 x1c ;/9 unsigned char w; unsigned int i,j,k,m; while(1) for(k=0;k10;k+) /字符个数控制变量 for(m=0;m400;m+) /每个字符扫描显示400次,控制每个字符显示时间 w=0 x01;/行变量w指向第一行 j=k*8; /指向数组

15、led的第k个字符第一个显示码下标 for(i=0;i8;i+) P1=w;/行数据送P1口 P0=ledj; /列数据送P0口 delay1ms(); w=1; /行变量左移指向下一行 j+; /指向数组中下一个显示码 void delay() unsigned char i; for(i=0;i0 x10;i+); 例例3 00-593 00-59简易秒表程序简易秒表程序#include unsigned char msec,sec; /定义msec为50ms计数变量,sec为秒变量void delay(unsigned char i); unsigned char j,k; for(k=

16、0;ki;k+) for(j=0;j4; return(k_new); /无键按下k_new=0 x00void delay(unsigned char m) while(m-) unsigned char i=255; while(i-); 二、矩阵式键盘及其接口二、矩阵式键盘及其接口判有无键按下;判按下的是哪一键;键处理。判有无键按下;判按下的是哪一键;键处理。键位的编码:有二进制组合编码和顺序排列编码。常用顺序排列编码。处理方法:编码值=行首编码值X+列号Y 矩阵式键盘由行线和列线组成。当键按下时,行线和列线短接,通过行线和列线的状态判断按键的状态。 判断方法: 1、扫描法、扫描法(1)

17、判有无键按下:将行线接到单片机的输入口,列线接到输出口,先使所有列线低电平,读行线状态,若行线全为高电平,说明无按键按下。若行线有低电平,说明有按键按下,记录此行号。(2)判断哪个键按下:逐次让某列为低电平,其它列高电平,检查行的输入状态,并记录使行线为低点平的列号,计算并判断出按下按键的位置。1、汇编语言参考程序:(P1口低4位接行输入,高4位接列输出)SMKEY:MOV P1,#0FH ;置P1口低4位为输入状态 MOV A,P1 ;读P1口行号,判断有无按键按下 ANL A,0FH ;屏蔽高4位 CJNE A,0FH,HKEY ;有键按下,转HKEY SJMP SMKEY ;无键按下转回

18、HKEY:LCALL DELAY10 ;延时10ms,去抖 MOV A,P1 ANL A,0FH CJNE A,0FH,WKEY ;确认有键按下,转判哪一键按下 SJMP SMKEY ; 是抖动转回WKEY:MOV P1,1110 1111B ;置扫描码,检测P1.4列 MOV A,P1 ANL A,0FH ;查行 CJNE A,0FH,PKEY ;行不全为1,P1.4列(Y0)有键按下,转键处理 MOV P1,1101 1111B ;置扫描码,检测P1.5列 MOV A,P1 ANL A,0FH CJNE A,0FH,PKEY ;P1.5列(Y1)有键按下,转键处理 MOV P1,1011

19、1111B ;置扫描码,检测P1.6列 MOV A,P1 ANL A,0FH CJNE A,0FH,PKEY ;P1.6列(Y2)有键按下,转键处理 MOV P1,0111 1111B ;置扫描,检测P1.7列 MOV A,P1 ANL A,0FH CJNE A,0FH,PKEY ;P1.7列(Y3)有键按下,转键处理 LJMP SMKEY PKEY: ;键处理 C语言参考程序:如图44 矩阵式键盘,行线接p0.0-p0.3,列线接p2.0-p2.3。P0.0P0.1P0.2P0.3 P2.0 p2.1 p2.2 p2.3/函数名:scan_keyunsigned char scan_key(

20、void)unsigned I, temp,m,n;bit find=0; /键按下标志位P0=0 xffh; /p0口输入for( i=0;i4;i+) p2=0 xfe1; /逐列送低电平 temp=p0; /读行值并取反 temp=temp&0 x0f; /屏蔽低4while(temp!=0 x00)/判断有无键按下 m=1;/保存列号 find=1;/置找到键标志 switch(temp) /判断哪一行有键按下,记录行号到n case 0 x01:n=0;break; case 0 x02:n=1;break; case 0 x04:n=2;break; case 0 x08:

21、n=3;break; default:break; If (find=0) return -1; /无键按下返回-1 else return(n*4+m);/有键按下返回键值 2、线反转法(1)将行线置成输入状态,列线置成低电平,读行线;(2)再使所有列线为输入状态,行线全为低电平,读列线; 有键按下时,通过判断2次读入状态可确定按键的位置。线反转法示例程序 :SMKEY:MOV P1,#0FH ;置P1口高4位为“0”、低4位为输入状态 MOV A,P1 ;读P1口 ANL A,0FH ;屏蔽高4位 CJNE A,0FH,HKEY ;有键按下,转HKEY SJMP SMKEY ;无键按下转回

22、HKEY:LCALL DELAY10 ;延时10ms,去抖 MOV A,P1 ANL A,0FH MOV B,A ;行线状态在B的低4位 CJNE A,0FH,WKEY ;确认有键按下,转判哪一键按下 SJMP SMKEY ; 是抖动转回WKEY:MOV P1,0F0H ;置P1口高4位为输入、低4位为“0” MOV A,P1 ANL A,0F0H ;屏蔽低4位 ORL A,B ;列线状态在高4位,与行线状态合成于B中 ;键处理键处理:键处理是根据所按键散转进入相应的功能程序。为了散转的方便,通常应先得到按下键的键号。键号是键盘的每个键的编号,可以是10进制或16进制。键号一般通过键盘扫描程序

23、取得的键值求出。n 键值是各键所在行号和列号的组合码。键值是各键所在行号和列号的组合码。如图所示接如图所示接口电路中的键口电路中的键“9”9”所在行号为所在行号为2 2,所在列号为,所在列号为1 1,键,键值可以表示为值可以表示为“21H”21H”(也可以表示为(也可以表示为12H12H,表示,表示方法并不是唯一的,要根据具体按键的数量及接口电方法并不是唯一的,要根据具体按键的数量及接口电路而定)。路而定)。根据键值中行号和列号信息就可以计算出根据键值中行号和列号信息就可以计算出键号,如:键号,如:n 键号所在行号键号所在行号键盘列数所在列号,键盘列数所在列号, 即即:2:24 41 19 9

24、 根据键号就可以方便地通过散转进入相应键的功能根据键号就可以方便地通过散转进入相应键的功能程序。程序。7.5.3 7.5.3 键盘和显示器接口示例键盘和显示器接口示例 例例1 1:P122 P122 例例4-19 4-19 LNUM:LNUM:记录行号,记录行号,F0F0:记录有无键按下:记录有无键按下主程序LNUM=4 F0=0调键盘扫描程序F0=1有键按下判断键号查显示码由P2输出显示键盘扫描子程序设置P1口有键按下?去抖后再判断逐列扫描记录列号计算按下的键号F0=1返回NN例例2 2 用用81558155作键盘及显示接口作键盘及显示接口 KD1:MOV A,#00000011B;8155

25、初始化:初始化:PA、PB为基本输出,为基本输出,PC为输入为输入 MOV DPTR,#7F00H ; MOVX DPTR,A ; KEY1:ACALL KS1 ;查有无键按下;查有无键按下 JNZ LK1 ;有,转键扫描;有,转键扫描 ACALL DIS ;调显示子程序;调显示子程序 AJMP KEY1 ; LK1: ACALL DIS ;键扫描;键扫描 ACALL DIS ;两次调显示子程序,延时;两次调显示子程序,延时12ms ACALL KS1 ; JNZ LK2 ; ACALL DIS ;调显示子程序;调显示子程序 AJMP KEY1 LK2:MOV R2,#0FEH ;从首列开始

26、MOV R4,#00H ;首列号送R4 LK4:MOV DPTR,#7F01H ; MOV A,R2 ; MOVX A,DPTR ; INC DPTR ; INC DPTR ;指向C口 MOVX DPTR,A ; JB ACC.0,LONE ;第0行无键按下,转查第1行 MOV A,#00H ;第0行有键按下,该行首键号送A AJMP LKP ;转求键号 LONE: JB ACC.1,LTWO ;第1行无键按下,转查第2行 MOV A,#08H ;第1行有键按下,该行首键号送A AJMP LKP ;转求键号LTWO: JB ACC.2,NEXT ;第2行无键按下,转查下一列 MOV A,#10

27、H ;第2行有键按下,该行首键号送A LKP: ADD A,R4 ;求键号。键号行首键号列号 PUSH ACC ;保护键号 LK3: ACALL DIS ;等待键释放 ACALL KS1 JNZ LK3 POP ACC RET ;键扫描结束。此时A的内容为按下键的键号 NEXT: INC R4 ;指向下一列 MOV A,R2 JNB ACC.5,KND ;判6列扫描完没有。 RL A ;未完,扫描字对应下一列 MOV R2,A AJMP LK4 ;转下一列扫描KND: AJMP KEY1 ;扫完,转入新一轮扫描KS1: MOV DPTR,#7F01H ;查有无键按下子程序。先指向A口 MOV

28、A,#00H MOVX DPTR,A ;送扫描字“00H” INC DPTR INC DPTR ;指向C口 MOVX A,DPTR CPL A ;变正逻辑 ANL A,#0FH ;屏蔽高位 RET ;子程序出口,A的内容非0则有键按下例例3 3 用用82798279作键盘及显示接口作键盘及显示接口 初始化程序如下:初始化程序如下: INIT:MOV DPTR,#7FFFH ;置;置8279命令命令/状态口地址状态口地址 MOV A,#0D1H ;置清显示命令字;置清显示命令字 MOVX DPTR,A ;送清显示命令;送清显示命令 WEIT:MOVX A,DPTR ;读状态;读状态 JB ACC

29、.7,WEIT ;等待清显示;等待清显示RAM结束结束 MOV A,#34H ;置分频系数,晶振;置分频系数,晶振12MHz MOVX DPTR,A ;送分频系数;送分频系数 MOV A,#00H ;置键盘;置键盘/显示命令显示命令 MOVX DPTR,A ;送键盘;送键盘/显示命令显示命令 MOV IE,#84H ;允许;允许8279中断中断 RET显示子程序如下:显示子程序如下: DIS:MOV DPTR,#7FFFH ;置;置8279命令命令/状态口地址状态口地址 MOV R0,#30H ;字段码首地址;字段码首地址 MOV R7,#08H ;8位显示位显示 MOV A,#90H ;置显

30、示命令字;置显示命令字 MOVX DPTR,A ;送显示命令;送显示命令 MOV DPTR,#7FFEH ;置数据口地址;置数据口地址 LP:MOV A,R0 ;取显示数据;取显示数据 ADD A,#6 ;加偏移量;加偏移量 MOVC A,APC ;查表,取得数据的段码;查表,取得数据的段码 MOVX DPTR,A ;送段码显示;送段码显示 INC R0 ;调整数据指针;调整数据指针 DJNZ R7,LP ; RET SEG:DB 3FH,06H,5BH,4FH,66H,6DH ;字符;字符0、1、2、3、4、5段码段码 DB 7DH,07H,7EH,6FH,77H,7CH ;字符;字符6、7、8、9、A、b段码段码 DB 39H,5EH,79H,71H,73H,3EH ;字符;字符C、d、E、F、P、U段码段码 DB 76H,38H,40H,6EH,FFH,00H ;字符;字符H、L、-、Y、日、日、“空空”段码段码键盘中断子程序如下:键盘中断子程序如下:KEY:PUSH PSW PUSH DPL PUSH DPH PUSH ACC PUSH B SETB PSW.3 MOV DPTR,#7FFFH ;置状态口地址;置状态口地址 MOVX A,DPTR ;读;读FIFO状态状态 ANL A,#0FH ; JZ PKYR ; MOV A,#40H ;置读;置读FIFO命令

温馨提示

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

评论

0/150

提交评论