一、 实验原理及电路
实验原理:在电路图中,单片机AT89C51的P1口接有一按键矩阵,P0和P2口接15个灯,P3口接一个led数码显示管。刚开始时,电路处于扫描按键是否被按下的状态。当有某个按键被按下时,在键盘扫描函数的作用下,会有一小段消抖动的时间。当确定没抖动情况下,程序就会查找出是哪个按键被按下了。之后就会执行按键功能函数。
以下是按键扫描函数(包括消抖动程序)和按键功能函数: 按键扫描函数 按键功能函数 uchar rdkey() uchar i;
{ void k(uchar n) uchar scan1,scan2,keycode,j; {P3=tab[n]; P1=0x0f; if(n>=8) scan1=P1; {
if((scan1&0x0f)!=0x0f) for(i=0;i<=8;i++)
{ {P2=led[i]; P0=0x00; delayms(30); delayms(100); scan1=P1; }} if((scan1&0x0f)!=0x0f) else{
{ for(i=0;i<=n;i++) P1=0xf0; {
scan2=P1; P0=led[i];P2=0xff;delayms(100); keycode=scan1|scan2; } for(j=0;j<=15;j++) } { } if(keycode= = key_code[j]) {
key=j;
return(key); } } } }
else P1=0xff; return (16);}
按键扫描函数是通过首先检查行(给P1赋值为0x0f,再将P1赋给变量scan1,用0x0f与scan1相与,可检查出第几行的按键被按下),再检查列的方法(将P1赋值为0xf0,再将P1赋给scan2,此时被按下键的那一列的值会变为0),然后再将两次检查的数按位或,最后将按位或后的那个数与组合键编码对比组合键编码,找出被按下的按键数,返回按键值。
按键功能函数是当第n号按键按下时,连接在P3的显示器显示n,同时连接在P0,P2上的灯会从第0个开始,逐一亮到第n个。由于用到两个I/O口,所以当按键号数大于8时,程序应该将P0口赋值为0x00(共阳极)。
实验电路图如下(此时被按下的按键是六号按键,即第7个按键):
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库单片机按键与显示实验报告(2)在线全文阅读。
相关推荐: