//k2~k4 分别控制le1~le4
void delay(unsigned int x) //延时函数
{
while(x--) //延时数减一
}
void key_event (unsigned char d) //根据扫描到的键值,亮相应的LED
{
switch(d)
{
case 14: P1^=(1<<0) break //k1 键按下了
case 13: P1^=(1<<1) break//k2键按下了
case 11: P1^=(1<<2) break//k3键按下了
case 7: P1^=(1<<3) break//k4键按下了
//
default: P1^=(1<<7) break//缺省值,都不亮
}
}
void key() //按键扫描
{
static char i
unsigned char a
unsigned char b
a=P2//0000aaaa ,00007654 3210
a>>=4//a=a>>4 //移动4位,a 取值
if(a!=15) //至少有个键按下
{
if(i==0) //0 的时候,标示没有建按下
{
delay(1000) //延时 1000次
b=P2 //把按键的口赋给变量 b
b>>=4 //移动四位,b 取值
if(a==b) //如果a和b相等
{
key_event(b) //这次按键有效
i=1 //1 不允许其它键按下
}
}
}
else
{
i=0 //不是有效键按下,清 0
}
}
void main() //主函数开始
{
while(1) //进入循环,检测按键按下情况
{
key()
}
}
楼主的要求,不够详尽。
http://blog.163.com/asm_c/blog/static/2482031132014427210656/
参考。
你的显示子程序的名称是:void DigDispaly()
可是在主程序调用时,却写成了
DigDisplay()
比较一下,这两个一样吗,难道都不是你自己写的吗?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)