欢迎来到天天文库
浏览记录
ID:57021114
大小:42.00 KB
页数:8页
时间:2020-07-31
《四乘四键盘显示.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、四乘四键盘显示一、设计要求4*4矩阵键盘共16个键,每按一次键,数码管就显示一次按键代表的值。二、元件选取单片机:STC89C52RC;电阻:470Ω;发光二极管;4*4键盘;共阳极七段数码管三、设计思想本设计硬件上采用STC89C52RC单片机的最小系统,单片机的P1口与键盘相连,P1.0—P1.3管脚分别与键盘的四行连接,P1.4—P1.7管脚分别与键盘的四列相连;P0口P1.0—P1.7管脚与数码管1的a—dp相连,P2口P2.0—P2.7管脚分别与数码管2的a—dp相连,数码管的公共端接+5V电源,控制数码管的显示;发光二极管的
2、阴极与单片机的P3.0管脚连接,阳极与+5V电源连接,低电平有效,控制二极管发光;程序上采用定时扫描方式,利用定时T0产生50ms定时中断,CPU响应中断后进入Scan_Key()子程序对键盘进行扫描,对P1口初值0xf7扫描第一行,进入延时程序消抖动后,进入switch()语句,屏蔽行的低四位,取列的高四位,检测哪一列有键按下,若有键按下,标志位FLAG0=1,发光二极管的到低电平发光;令P1口的初值右移一位后或0x80进行高位补一,扫描第二行,如此循环右移,四行便全都检测到了。当有键按下时,m!=0xf0,进入while循环不停地执
3、行m&0xf0语句,使m=0xf0;按键松开后,m=0xf0跳出while循环,执行中断程序,显示按键的值。如此软件与硬件结合,能合理的完成设计要求,每按一次键,数码管就显示一次按键代表的值。四、原理图YNY开始开定时器中断,定时器0初始化是否有键按下?键盘扫描发光二极管发光,确定按键值中断程序开始数码管显示按键值定时器0重装初值中断返回数码管显示按键值按键是否放开?N四、程序流程五、调试过程调试过程中,遇到了以下问题:一是数码管不能正常显示,经检查是数码管公共端未接电源,连接后数码管还是不能正常显示,经检查是单片机接触不良,将单片机拔
4、出,对照底座重新插入,然后在仿真数码管显示正常;二是发光二极管在按键按下后不能正常发光,经检查是软件编程存在缺陷,定时时间短,单片机接收不到二极管的低电平,故不发光。经改进后,将二极管管脚赋低电平的语句嵌入到键盘扫描程序中,二极管工作正常。六、程序清单#include#defineRELOAD_H(65536-50000)/256;//定义定时器0重装值#defineRELOAD_L(65536-50000)%256;externvoidTimer0_Init(void);//定时器初始化子函数externvoidDe
5、lay(unsignedintn);externvoidScan_Key(void);unsignedchardispcode[2];unsignedchardofly[16];unsignedcharptr,m;unsignedintt,c;bitFLAG0=0;//定义是否有键按下sbitBeep=P3^0;//发光二极管管脚voidmain(void){Timer0_Init();while(1){Scan_Key();//扫描键盘}}voidTimer0_Init(void)//定时器0初始化{TMOD=0x01;//定时器0,
6、方式1TL0=RELOAD_L;//TL0定时器0低8位计数器TH0=RELOAD_H;//TH0定时器0高8位计数器TR0=1;//定时器/计数器0启动位.//TR0=1:开始计时或计数ET0=1;//定时器/计数器0中断使能EA=1;//全局中断使能}voidTimer0_ISR(void)interrupt1//定时器0中断服务程序{P0=dofly[c];P2=dofly[t];TL0=RELOAD_L;//定时器0初值重装TH0=RELOAD_H;}voidDelay(unsignedintn)//延时{unsignedint
7、i,j;for(i=0;i8、按下{case0x70:ptr=i*4;//第一行被按否?如有则是tab[i*4]键FLAG0=1;Beep=0;//表示有按键break;case0xb0:ptr=i*4+1;//第二行被按否?如有则是t
8、按下{case0x70:ptr=i*4;//第一行被按否?如有则是tab[i*4]键FLAG0=1;Beep=0;//表示有按键break;case0xb0:ptr=i*4+1;//第二行被按否?如有则是t
此文档下载收益归作者所有