四乘四键盘显示.doc

上传人:苏美尔 文档编号:8973795 上传时间:2021-01-27 格式:DOC 页数:8 大小:42KB
返回 下载 相关 举报
四乘四键盘显示.doc_第1页
第1页 / 共8页
四乘四键盘显示.doc_第2页
第2页 / 共8页
四乘四键盘显示.doc_第3页
第3页 / 共8页
四乘四键盘显示.doc_第4页
第4页 / 共8页
四乘四键盘显示.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《四乘四键盘显示.doc》由会员分享,可在线阅读,更多相关《四乘四键盘显示.doc(8页珍藏版)》请在三一文库上搜索。

1、四乘四键盘显示1、 设计要求4*4矩阵键盘共16个键,每按一次键,数码管就显示一次按键代表的值。2、 元件选取单片机:STC89C52RC;电阻:470;发光二极管;4*4键盘;共阳极七段数码管3、 设计思想本设计硬件上采用STC89C52RC单片机的最小系统,单片机的P1口与键盘相连,P1.0P1.3管脚分别与键盘的四行连接,P1.4P1.7管脚分别与键盘的四列相连;P0口P1.0P1.7管脚与数码管1的adp相连,P2口P2.0P2.7管脚分别与数码管2的adp相连,数码管的公共端接+5V电源,控制数码管的显示;发光二极管的阴极与单片机的P3.0管脚连接,阳极与+5V电源连接,低电平有效,

2、控制二极管发光;程序上采用定时扫描方式,利用定时T0产生50ms定时中断,CPU响应中断后进入Scan_Key()子程序对键盘进行扫描,对P1口初值0xf7扫描第一行,进入延时程序消抖动后,进入switch()语句,屏蔽行的低四位,取列的高四位,检测哪一列有键按下,若有键按下,标志位FLAG0=1,发光二极管的到低电平发光;令P1口的初值右移一位后或0x80进行高位补一,扫描第二行,如此循环右移,四行便全都检测到了。当有键按下时,m!=0xf0,进入while循环不停地执行m&0xf0语句,使m=0xf0;按键松开后,m=0xf0跳出while循环,执行中断程序,显示按键的值。如此软件与硬件结

3、合,能合理的完成设计要求,每按一次键,数码管就显示一次按键代表的值。四、原理图YNY开始开定时器中断,定时器0初始化是否有键按下?键盘扫描发光二极管发光,确定按键值中断程序开始数码管显示按键值定时器0重装初值中断返回数码管显示按键值按键是否放开?N四、程序流程5、 调试过程调试过程中,遇到了以下问题:一是数码管不能正常显示,经检查是数码管公共端未接电源,连接后数码管还是不能正常显示,经检查是单片机接触不良,将单片机拔出,对照底座重新插入,然后在仿真数码管显示正常;二是发光二极管在按键按下后不能正常发光,经检查是软件编程存在缺陷,定时时间短,单片机接收不到二极管的低电平,故不发光。经改进后,将二

4、极管管脚赋低电平的语句嵌入到键盘扫描程序中,二极管工作正常。6、 程序清单#include#define RELOAD_H ( 65536-50000)/256;/定义定时器0重装值#define RELOAD_L ( 65536-50000)%256;extern void Timer0_Init(void); /定时器初始化子函数extern void Delay(unsigned int n);extern void Scan_Key(void);unsigned char dispcode2;unsigned char dofly16;unsigned char ptr,m;unsig

5、ned int t,c;bit FLAG0=0; /定义是否有键按下sbit Beep = P30;/发光二极管管脚void main(void)Timer0_Init(); while(1) Scan_Key();/扫描键盘void Timer0_Init(void) /定时器0初始化TMOD=0x01; /定时器0,方式1 TL0=RELOAD_L; /TL0定时器0低8位计数器 TH0=RELOAD_H; /TH0定时器0高8位计数器 TR0=1; /定时器/计数器0启动位./TR0=1:开始计时或计数ET0=1; /定时器/计数器0中断使能EA=1; /全局中断使能void Timer

6、0_ISR(void) interrupt 1 /定时器0中断服务程序 P0=doflyc; P2=doflyt;TL0=RELOAD_L; /定时器0初值重装 TH0=RELOAD_H;void Delay(unsigned int n) /延时unsigned int i,j; for(i=0;in;i+) for(j=0;j80;j+);unsigned char dofly16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /数码管显示程序void Scan_Key(void) / 键盘扫描程序char a1,i;bit FLAG0=0;a1=0xf7; /列扫描初值ptr=0;for(i=0;i1)|0x80; while(m!=0xf0)m=P1;m=m&0xf0; Beep=1; if(FLAG0) dispcode0=ptr % 10; /求个位的数值 dispcode1=ptr / 10;/求十位上的数值 c=dispcode0; t=dispcode1;

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1