动态数码管显示与键盘.ppt
College of Communication Engineering,Jilin University,第14章 动态数码管显示与键盘识别,College of Communication Engineering,Jilin University,本章提要,14.1 数码管显示 14.1.1 七段数码管原理与结构 14.1.2 七段数码管编码 14.1.3 数码管动态扫描 14.1.4 数码管显示硬件设计 14.1.5 数码管显示软件设计 14.1.6 LED显示应用实例 14.2 键盘识别 14.2.1 开关与键盘 14.2.2 键盘的消抖问题 14.2.3 键盘的识别功能 14.2.4 键盘的硬件设计 14.2.5 键盘扫描法软件设计 14.2.6 键盘的扫描策略 14.2.7 键盘识别应用实例,College of Communication Engineering,Jilin University,本章提要,14.1 数码管显示 14.1.1 七段数码管原理与结构 14.1.2 七段数码管编码 14.1.3 数码管动态扫描 14.1.4 数码管显示硬件设计 14.1.5 数码管显示软件设计 14.1.6 LED显示应用实例 14.2 键盘识别 14.2.1 开关与键盘 14.2.2 键盘的消抖问题 14.2.3 键盘的识别功能 14.2.4 键盘的硬件设计 14.2.5 键盘扫描法软件设计 14.2.6 键盘的扫描策略 14.2.7 键盘识别应用实例,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.1 七段数码管原理与结构把7个细长的LED排成 字型8个LED,使用一个公用端 共阳型:所有LED的阳极连在一起 共阴型:所有LED的阴极连在一起单独控制每个段的亮灭,可以表示出数字 09使用多个数码管表示数字应用非常广泛多种颜色,多种尺寸,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.2 七段数码管编码,共阴型:1 表示点亮 0 表示熄灭共阳型:取反,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.3 数码管动态扫描通过段控制信息确定数码管显示的数字(多位复用)通过位控制信号使得任意时刻只有一位数码管处于显示状态利用视觉暂留现象,定时更改位控制信息和段控制信息,得到稳定的数字显示多个LED同时点亮的电流都经过公共端,MCU的IO无法承受,必须使用三极管为了减小MCU的灌入电流,段控制端都连接了输出驱动器74LS07,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.4 数码管显示硬件设计,实验中可将段控制连接到P口,将位控制连接到T口,连线关系如下:,实验板上有4位数码管,共阳极结构,引出12根连线,8根段控制,4根位控制,对应关系如下:,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.5 数码管显示软件设计,LED动态显示:按人眼的反应,刷新频率得大于80Hz,即所有LED在12ms内必须刷新一次。现有4组LED,即每段显示3ms。这个3ms可以用软件延迟实现,但为提高CPU效率,一般使用定时器。,显示一位数字:const unsigned char DisplayDecode=0 x3f,0 x06,0 x5b,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;/0-9 ABCDEF DDRP|=0 xFF;DDRT|=0 xFF;/点亮一个数码管,显示2 PTP=DisplayDecode2;PTT=0 xFE;,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.5 数码管显示软件设计,示例程序/unsigned char showdata4;void Show()unsigned char DisplayNumber;PTT=0 x0f;for(DisplayNumber=0;DisplayNumber4;DisplayNumber+)PTP=DisplayDecodeshowdataDisplayNumber;if(DisplayNumber=2)PTP,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.5 数码管显示软件设计,示例程序void delay(unsigned int countert)/3ms unsigned int i,j;for(i=0;icountert;i+)for(j=0;j4000;)j+;,123/1,晶振16M,总线时钟8M,延时为:4000*(1+2+3)/(8*106)s=3ms,College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.6 LED显示应用实例(实验11)任务:(1)在4位数码管上显示班级和学号,之间用小数点分隔(2)在4位数码管上实现“0”字符跑马灯(3)编制实验1中的已知年月,求天数的C程序,将天数显示在数码管中间两位上,前后放上分隔符“-”例如:(4)利用实验1中的已知年月,求天数的汇编程序作子程序,实现混合编程。(5)利用DIP开关实现上述功能的菜单(中断控制),College of Communication Engineering,Jilin University,14.1 数码管显示,14.1.6 LED显示应用实例(实验11)硬件连线:,数码管12线连P口和T口,College of Communication Engineering,Jilin University,本章提要,14.1 数码管显示 14.1.1 七段数码管原理与结构 14.1.2 七段数码管编码 14.1.3 数码管动态扫描 14.1.4 数码管显示硬件设计 14.1.5 数码管显示软件设计 14.1.6 LED显示应用实例 14.2 键盘识别 14.2.1 开关与键盘 14.2.2 键盘的消抖问题 14.2.3 键盘的识别功能 14.2.4 键盘的硬件设计 14.2.5 键盘扫描法软件设计 14.2.6 键盘的扫描策略 14.2.7 键盘识别应用实例,College of Communication Engineering,Jilin University,本章提要,14.1 数码管显示 14.1.1 七段数码管原理与结构 14.1.2 七段数码管编码 14.1.3 数码管动态扫描 14.1.4 数码管显示硬件设计 14.1.5 数码管显示软件设计 14.1.6 LED显示应用实例 14.2 键盘识别 14.2.1 开关与键盘 14.2.2 键盘的消抖问题 14.2.3 键盘的识别功能 14.2.4 键盘的硬件设计 14.2.5 键盘扫描法软件设计 14.2.6 键盘的扫描策略 14.2.7 键盘识别应用实例,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.1 开关与键盘开关(Switch)状态闭合和断开种类船形开关,拨位开关按键 带有自恢复装置的开关,常开常闭型各种形状,各种尺寸耐高压,轻触式,带指示键盘 由多个按键组合而成为了区分按键,给每个按键安排了一个代码,称键码。编码键盘和非编码键盘相比,前者较复杂,较贵。后者较简单,极便宜。非编码键盘分独立式键盘和行列式键盘,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.2 键盘的消抖问题按键用于产生一个脉冲,1个MCU的IO口可以检查一个按键的状态按下和释放的时刻会有抖动需要设计硬件消抖电路或软件消抖硬件消抖:阻容滤波或双稳态触发器软件消抖:延时等待(12ms),void delay(void)unsigned int i,j;for(i=0;i4;i+)for(j=0;j4000;)j+;,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.3 键盘的识别功能有无键按下软件延时消抖扫描求键码等待键释放查表求键值,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.4 键盘的硬件设计,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.4 键盘的硬件设计,实验板上有一个4*4的薄膜键盘,板上无上拉电阻,接口是X1-4、Y1-4,实验中可连接到PORTA口上,Y1-4(PA0-3)为输出,X1-4(PA4-7)做为输入,使能PORTA的上拉电阻,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.5 键盘扫描法软件设计,当所有行输出为0,列输入码若不全为1,说明有键按下;令一行输出为0,其余行输出为1,列输入码若不全为1,说明该行有键按下:根据行输出码和列输入码中同时为0的行号和列号,可以确定键号。多键识别时需要依次扫描所有行(shift+A)窜键问题:软件处理连续输入问题:需要考虑扫描策略,示例程序 unsigned char KeyScan()unsigned char Input,Output,Keynumber,Keyvalue1,i;Keyvalue1=0 xFF;Output=0 xF0;PORTA=Output;Input=PORTA4;if(Input!=0 x0F)delay(4);Input=PORTA4;if(Input!=0 x0F)Output=0 x01;for(i=0;i4;if(Input!=0 x0F)switch(Input)case 0 x0E:Keynumber=0;break;case 0 x0D:Keynumber=1;break;case 0 x0B:Keynumber=2;break;case 0 x07:Keynumber=3;break;Keynumber=Keynumber+i*ColumnSize;Keyvalue1=KeyDecodeKeynumber;break;else Output=1;return(Keyvalue1);,键值表const unsigned char KeyDecode=0 x01,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08,0 x09,0 x00,0 x0a,0 x0b,0 x0c,0 x0d,0 x0e,0 x0f;,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.6 键盘的扫描策略,循环扫描:可行、可靠,占用CPU时间;定时扫描:可能丢失按键动作,需要确定扫描频率,触点接触时间在几十到几百ms量级;键盘中断:发现有任何按键按下时启动键盘扫描,需要设计相应的硬件电路,示例程序 void main(void)/*put your own code here*/unsigned char Keyresult;showdata0=1;showdata1=2;showdata2=3;showdata3=4;EnableInterrupts;Init_PORT();Show();for(;)Keyresult=KeyScan();/键盘扫描 if(Keyresult!=0 xFF)showdata0=Keyresult;Show();/显示,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.7 键盘识别应用实例(实验10)任务:键入某一个键(0-F),PORTB口小灯上显示;延续前面实验,键盘输入班级和学号在数码管上显示;延续前面实验,键盘输入年和月对应天数在数码管显示;(4)扩展内容:组合键:按F+1显示班级,F+2显示学号反转法识别键盘编制函数y=3*x+4,x由键盘输入,y用数码管显示菜单由键盘实现,College of Communication Engineering,Jilin University,14.2 键盘识别,14.2.7 键盘识别应用实例(实验10)硬件连线:,键盘8线连A口,