基于at89c51的99秒倒计时器设计内容摘要:

函数ankey()矩阵按键的原理和方法:矩阵按键的两端都与单片机的I/O口相连,在检测时,人为的通过单片机I/O口送出低电平。 检测时,先送一行为低电平,其余几列全为高电平,确定行数,然后立即轮流检测一次各列是否有低电平,若检测到某一行为低电平,则确定列数,这样就可以确定按下那个数字。 本设计用的是4行3列矩阵按键,它接AT89C51单片机的P1口,接法如图所示:当按下0~9数字键时,会产生相应数值赋给矩阵按键扫描函数中以定义的参数key,当按下*或键时,会分别产生10或11赋给key。 若key=10,则将前面按下的数字送给显示器;若key=11时调用对矩阵按键扫描进行相应处理函数text(uchar )且key赋给它,text(uchar )函数对key值进行相应处理:如果只按下一次数字键,那这数字就会是倒计时的个位,如果按下两次数字键,那第一次的数字就会是倒计时的十位,第二次数字的数字就会是倒计时的个位,当按下或*键时,开始倒计时。 动态数码管显示函数动态数码管显示就是轮流向各位数码管送出段选及相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人眼感觉各位数码管同时都在显示,实际上多位数码管是一位一位轮流显示的,只是轮流比较快,我们分辨不出来。 本设计用的是两位动态共阴数码管显示,它和单片机的连接如图所示:其中那排阻是驱动电路。 复位电路如图:RST为复位信号输入端,高电平有效。 系统上电后,当已经进行过倒计时,这时想进行不同时间的倒计时,只要按下复位按钮后,就可以进行新的倒计时。 总电路图六、总体程序include define uchar unsigned chardefine uint unsigned int sbit sw=P0^6。 //十位位选sbit gw=P0^7。 //个位位选sbit led=P3^7。 //LED灯uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}。 //编码定义uchar numt0,num。 void delayms(uint)。 void text(uchar)。 void display(uchar numdis) //动态数码管显示子函数{ uchar shi,ge。 //分离两个分别要显示的数 shi=numdis/10。 ge=numdis%10。 sw=0。 P2=table[shi]。 //送十位段选数据 delayms(5)。 //延时 sw=1。 gw=0。 P2=table[ge]。 //送个位段选数据 delayms(5)。 gw=1。 }void delayms(uint x)//延时x ms { uint i,j。 for(i=x。 i0。 i) //i=x即延时约x毫秒 for(j=110。 j0。 j)。 }void ankey() // 键盘扫描{ uchar temp,key。 P1=0xf7。 //第1行 11110111 temp=P1。 temp=tempamp。 0xf0。 //temp低4位清0; if(temp!=0xf0) //判断是否有键按下 { delayms(5)。 //延时,消除抖动 { temp=P1。 //重新读取P1口 switch(temp)//判断哪个键按下 { case 0xe7: key=1。 break。 case 0xd7: key=2。 break。 case 0xb7: k。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。