标签:
键盘扫描
这是我学习单片机写的小程序...慢慢来写一天写一点...HE HE...人笨没办法...
这是用八个按键控制LED显示八种状态...
键盘是2X4的键盘...
希望大家多多指点!!!
#include<AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
/*显示数据=====*/
uchar code a[9]={0xff,0xaa,0x55,0xcc,0x33,0xf0,0x0f,0x18,0x81};
uchar key;/*全局变量*/
/*IO口定义======*/
sbit P20=P2^0;
sbit P21=P2^1;
/*子函数说明==*/
uchar key_scan(void);
void delay(uint a);
/*主程序=======*/
void main()
{
uchar i;
while(1)
{
i= key_scan();/*根据I的值达到控制显示目的*/
P0=a[i];
}
}
/*按键扫描程序*/
/*有返回值=====*/
uchar key_scan(void)
{
uchar i;
P2=0xfc; //按键接口
if(P2!=0xfc)//判断有无键按下
{
delay(50);//延时
if(P2!=0xfc)//再判断
{
P2=0xfe;//判断按下的键在哪列
i="P2";
if(i!=0xfe){ i="P2";}//把键值送到I.
else //判断按下的键在哪列
{
P2=0xfd;
i="P2";
if(i!=0xfd) {i="P2";}//把键值送到I.
}
}
}
/*判断键值并返回*/
switch(i)
{
case 0xf9:key="1";break;
case 0xfa:key="2";break;
case 0xf5:key="3";break;
case 0xf6:key="4";break;
case 0xed:key="5";break;
case 0xee:key="6";break;
case 0xdd:key="7";break;
case 0xde:key="8";break;
default:key="0xff";break;
}
return(key);//返回I的值
}
/*延时子函数==*/
void delay(uint a)
{
uint i;
for(i="0";i<a;i++);
}
系统分类:
单片机 | 用户分类:
单片机编程 | 来源:
无分类 | 【推荐给朋友】