第7章 51单片机的键盘与数码显示电路.ppt_第1页
第7章 51单片机的键盘与数码显示电路.ppt_第2页
第7章 51单片机的键盘与数码显示电路.ppt_第3页
第7章 51单片机的键盘与数码显示电路.ppt_第4页
第7章 51单片机的键盘与数码显示电路.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、作者:夏路易,电子工业出版社所有,第7章 扫描数码管、键盘与点阵显示 7.1 扫描数码管显示 (1)直接扫描数码管 采用单独的引脚输出段码与位码,占用I/O引脚少,引脚数量等于8位(段码)加数码管的数量(位码),节省电源功率,但是浪费CPU时间,因为必须定时更换段码与位码,保证显示的连续性。需要点亮一个数码管一段时间(持续1ms以上),再切换到另外一个。 例如三个数码管组成的显示器,数码管的工作点电流为10mA,2V压降,则可以采用30mA,33%占空比的电流工作,若是每个数码管显示时间为5ms,需要15ms完成一次显示,则每个数码管的闪烁频率为66Hz。若是增加数码管数量,则占空比降低,若要

2、保证亮度需要增加电流,但是最大不要超过100mA。图所示的是共阴极数码管的扫描工作接线图。,作者:夏路易,电子工业出版社所有,段驱动连接器IDATA与51单片机的P0口相连,位驱动连接器IDS与P2口相连,段驱动信号高电平有效,驱动晶体三极管9013的信号也是高电平有效。,作者:夏路易,电子工业出版社所有,例题7-1 直接扫描数码管 8位共阴极数码管,采用扫描方式。输出1、2、3、4、5、6、7、8。 #include unsigned char code table1=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f;

3、/段码,高电平有效 unsigned char code table3=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20,0 x40,0 x80; /位码,高电平有效 unsigned char i; /i是数码管扫描变量 unsigned char a,b; /a、b是循环变量,void main(void) while(1) for(i=0;i0;a-) /循环延时 for(b=248;b0;b-); ,作者:夏路易,电子工业出版社所有,(2)总线法扫描数码管 采用两个8D锁存器74373分时锁存段码与位码,则可以节省I/O引脚,例如8位数码管扫描显示可以采用10个I

4、/O口实现。其中8位用来分时送段码与位码,另外2位用于连接74373的锁存控制端,分别控制锁存段码与位码。,图中的D0D7信号与P3口相连,LE1与LE2与P2_0和P2_1引脚相连。D0D7信号分时送出段码与位码。 74373功能为: OE是输出使能控制,OE=1时,输出高阻,OE=0时,输出等于锁存器输出。 LE为锁存控制端,LE=1时,锁存器输出与输入相同,LE=0时,锁存器锁存输入信号。,作者:夏路易,电子工业出版社所有,例题7-2 采用总线法扫描数码管,8位共阴极数码管,显示输出数字1、2、3、4、5、6、7、8。 源程序如下: #include unsigned char code

5、 table1=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /段码,高电平有效 unsigned char code table3=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; /位码,低电平有效 unsigned char i; /i是数码管扫描变量 unsigned char a,b; /a、b是循环变量 void main(void) while(1) for(i=0;i0;a-) /延时 for(b=248;b0;b-); ,作者:夏路易,电子工业出版社所

6、有,7.2 扫描键盘 扫描式键盘又叫行列式键盘或矩阵式键盘。用I/O口线组成行列结构,按键设置在行列的交点上。例如用22的行、列结构可构成4个键的键盘,44的行列结构可构成16个键的键盘。因此,在按键数量较多时,可以节省I/O口引脚。,作者:夏路易,电子工业出版社所有,行、列线分别连接到按键开关的两端。行线通过上拉电阻接到电源VCC,被钳位在高电平状态。 键盘中有无按键按下的判断方法是:将列线的所有I/O线均置成低电平,然后将行线电平状态读入。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入不全为1。若是列线为高4位,则可以判断低4位,如果低4位不全为1,则有按键按下。 键盘中哪个键

7、按下的判断方法是:由列线逐列置低电平后,检查行输入状态而确定的。其方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列。而且是在此列与电平为0的行线相交的交点上的那个键。一旦找到哪个按键按下,就可以赋键值。,作者:夏路易,电子工业出版社所有,例题7-3 4x4扫描键盘 如下的键盘扫描程序,对图7-3所示的键盘进行扫描。P3高4位(P3_4P3_5)为列扫描(KL0KL3),顺序输出低电平;P3低4位为行扫描(Kh0Kh3),顺序读入数据,检测哪一行为0; 源程序如下: #include unsigned char code tab

8、le=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90 ,0 x88,0 x83,0 xc6,0 xA1,0 x86,0 x8e; /共阳数码管的十六进制-7段译码表 unsigned char temp; /暂存变量 unsigned char key; /键值变量 unsigned char i,j; /循环变量,作者:夏路易,电子工业出版社所有,void main(void) while(1) P3=0 xff; /使P3口输出高电平,准备接收输入信号 P3_4=0; /使P3_4为0,然后检测键盘,如果低4位不等于F

9、,表示键盘按下 temp=P3; /将P3口数值保存在变量temp temp=temp ,作者:夏路易,电子工业出版社所有,switch(temp) /根据低4位的值,用分支语句确定键值 case 0 x0e: /如果P3低4位为1110,所以1110 1110 key=7; break; case 0 x0d: /如果P3低4位为1101,所以1110 1101 key=8; break; case 0 x0b: /如果P3低4位为1011,所以1110 1011 key=9; break; case 0 x07: /如果P3低4位为0111,所以1110 0111 key=10; brea

10、k; temp=P3; P1_0=P1_0; P0=tablekey; /P0口相连的数码管显示键值 temp=temp ,作者:夏路易,电子工业出版社所有,P3=0 xff; P3_5=0; /使P3_5为0,然后检测键盘,如果低4位不等于F,表示键盘按下 temp=P3; temp=temp ,作者:夏路易,电子工业出版社所有,switch(temp) case 0 x0e: /如果P3低4位为1110,所以1101 1110 key=4; break; case 0 x0d: /如果P3低4位为1101,所以1101 1101 key=5; break; case 0 x0b: /如果P

11、3低4位为1011,所以1101 1011 key=6; break; case 0 x07: /如果P3低4位为0111,所以1101 0111 key=11; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp ,作者:夏路易,电子工业出版社所有,P3=0 xff; P3_6=0; /使P3_6为0,然后检测键盘,如果低4位不等于F,表示键盘按下 temp=P3; temp=temp ,作者:夏路易,电子工业出版社所有,switch(temp) case 0 x0e: /1011 1110 key=1; break; case 0 x0d:

12、/1011 1101 key=2; break; case 0 x0b: /1011 1011 key=3; break; case 0 x07: /1011 0111 key=12; break; temp=P3; P1_0=P1_0; P0=tablekey; temp=temp ,作者:夏路易,电子工业出版社所有,P3=0 xff; P3_7=0; /使P3_7为0,然后检测键盘,如果低4位不等于F,表示键盘按下 temp=P3; temp=temp ,作者:夏路易,电子工业出版社所有,switch(temp) case 0 x0e: / 0111 1110 key=0; break;

13、case 0 x0d: /0111 1101 key=13; break; case 0 x0b: /0111 1011 key=14; break; case 0 x07: /0111 0111 key=15; break; temp=P3; P1_0=P1_0; P0=tablekey; /显示按键值 temp=temp ,作者:夏路易,电子工业出版社所有,7.3 发光二极管点阵显示 点阵发光二极管器件内部如图所示。 若是行加高电平,列加低电平,则行列交叉点的发光二极管亮,其实可以把每一行相连的8个发光二极管看作一个数码管的8个段,列相当于段,行相当于行,若是列加段码,行加位码,就与共阳极

14、扫描数码管显示的情况相同。,作者:夏路易,电子工业出版社所有,如图所示,若要显示数字1,则需要8个列码为:0 xff,0 xff,0 xff,0 xff,0 xde,0 x80,0 xfe,0 xff。因为使共阳接线方式,所以列码为0(低电平)的位置,发光二极管亮。,作者:夏路易,电子工业出版社所有,例题7-4 发光二极管点阵定时顺序显示数字09。 公共端为阳极(行),连接PNP型晶体管9102的集电极,9012基极信号为低电平有效。列控制低电平有效。每给定一次列数据,就扫描1行,列数据值为零的发光二极管,由于在行公共端上加高电平,会被点亮。对应8列数据,扫描8次,完成1次显示。 单片机的P0

15、口输出行扫描信号,顺序输出低电平;P2口输出列数据。,作者:夏路易,电子工业出版社所有,#include unsigned char code tab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; /行扫描表,低电平有效(驱动9012) unsigned char code digittab108=0 xff,0 xff,0 xc1,0 xbe,0 xbe,0 xbe,0 xc1,0 xff, /0 0 xff,0 xff,0 xff,0 xff,0 xde,0 x80,0 xfe,0 xff, /1 0 xff,0 xff,0 xd8,0

16、xba,0 xba,0 xba,0 xc6,0 xff, /2 0 xff,0 xff,0 xff,0 xb6,0 xb6,0 xb6,0 xc9,0 xff, /3 0 xff,0 xff,0 xf3,0 xeb,0 xdb,0 x80,0 xfb,0 xff, /4 0 xff,0 xff,0 x8d,0 xae,0 xae,0 xae,0 xb1,0 xff, /5 0 xff,0 xff,0 xc1,0 xb6,0 xb6,0 xb6,0 xd9,0 xff, /6 0 xff,0 xff,0 xbf,0 xbf,0 xbf,0 xb0,0 x8f,0 xff, /7 0 xff,0

17、xff,0 xc9,0 xb6,0 xb6,0 xb6,0 xc9,0 xff, /8 0 xff,0 xff,0 xcd,0 xb6,0 xb6,0 xb6,0 xc1,0 xff; /9, /字型码,8个列数据组成一个数字,低电平有效 unsigned int timecount; /每个数字显示时间变量 unsigned char cnta; /行数据扫描变量 unsigned char wdn; /更换显示数字的字变量,作者:夏路易,电子工业出版社所有,void main(void) TMOD=0 x01; /定时器0,模式1 TH0=(65536-3000)/256; /设置初值 T

18、L0=(65536-3000)%256; TR0=1; /启动定时器 ET0=1; /允许定时器中断 EA=1; /允许所有中断 while(1); /无限空循环 ,作者:夏路易,电子工业出版社所有,void t0(void) interrupt 1 using 0 /定时器中断服务程序 TH0=(65536-3000)/256; /重置初值 TL0=(65536-3000)%256; /重置初值 P0=tabcnta; /每次中断扫描一行(接9012基极)低电平有效 P2=digittabwdncnta; /从字变量wdn值选择的8个列数据中,由cnta选择一个显示 cnta+; /行扫描变量加1 if(cnta=8) /如果8个行扫描完毕,相当于8个列数据顺序输出完毕 cnta=0; /返回第1行,重新进行行扫描 timecount+; /对中断计数 if(timecount=333) /每333次中断,更换一个被显示的数字 timecount=0; wdn+; /字变量加1 , if(wdn=10) /字变量等于10,相当于分为10次分别输出了10个数字09。 wdn=0; /字变量归0,作者:夏路易,电子工业出版社所有,本章参考文献:914 第7章 习题 1.

温馨提示

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

评论

0/150

提交评论