单片机的键盘扫描程序深成解析

来源:百度知道 编辑:UC知道 时间:2024/05/12 01:03:39
晶振12M 单片机用的AT89S52此程序后面本人不明白《电脑如何理解》望高手指点一二,小弟拜谢。详细点最好小弟是本着和大家交流的心态。悬赏分我都用完了是0分所以见谅!
程序如下
#include<reg52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
void delay(void);
uchar kbscan(void);
void main(void)
{
uchar key;
while(1)
{ key=kbscan();
delays();
}
}
void delays(void)
{ uchar i;
for(i=300;i>0;i++)
}
//kbscan(void) 键扫描函数
uchar kbscan(void)
{ uchar sccode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{ delays();
if((P1&0xf0)!=0xf0)
{
sccode=0xfe; /*逐行扫描初值*/
while((sccode&0x10)!=0)
{ P1=sccode; /*输出行扫描码*/
if((P1&0xf0)!=0xf0)
{ recode=(P1&0xf0)|0xf0;
return((~scoode)+(~recode));/*返回特征字节码*/
}
else sccode=(sccode<<1)|0x01;/*行扫描码左移一位*/
}
}
} return(0); /*无键按下,返回值为

我们一般没有必要做这么复杂的扫描程序,当然作为学习还是可以的.
这个程序有一定的难度,但是你把键盘扫描的原理搞清楚了,也就不难了.一般的单片机教材上都有.