AT89S52键盘程序
/********************************************************************/
//键盘扫描子程序 获取键值函数
/****************************************************************************/
uchar keyscan(void)
{ uchar temp;
P0=0xfe; //第一行置低
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay_nms(10);
if(temp!=0xf0)
{
switch(temp) //根据列线获取第一行的键值
{
case 0xe0: key=3; break;
case 0xd0: key=2; break;
case 0xb0: key=1; break;
case 0x70: key=0; break;
}
}
}
P0=0xfd; //扫描第二行,置低
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay_nms(10);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: key=7; break;
case 0xd0: key=6; break;
case 0xb0: key=5; break;
case 0x70: key=4; break;
}
}
}
P0=0xfb; //扫描第三行,置低
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay_nms(10);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: key=11; break;
case 0xd0: key=10; break;
case 0xb0: key=9; break;
case 0x70: key=8; break;
}
}
}
P0=0xf7; //扫描第四行,置低
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay_nms(10);
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: key=15; break;
case 0xd0: key=14; break;
case 0xb0: key=13; break;
case 0x70: key=12; break;
}
}
}
else
{
;
}
return(key);
}
AT89S52键盘程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)