单片机键盘扫描卡死,为什么

[复制链接]
查看11 | 回复3 | 2011-3-22 10:51:36 | 显示全部楼层 |阅读模式
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0};
uchar num,temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=1;
P2=0;
while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
// dula=1;
P0=table[aa-1];
// dula=0;
}
uchar keyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xee:num=1;

break;

case 0xde:num=2;

break;

case 0xbe:num=3;

break;

case 0x7e:num=4;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xed:num=5;

break;

case 0xdd:num=6;

break;

case 0xbd:num=7;

break;

case 0x7d:num=8;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xeb:num=9;

break;

case 0xdb:num=10;

break;

case 0xbb:num=11;

break;

case 0x7b:num=12;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

temp=P1;

switch(temp)

{

case 0xe7:num=13;

break;

case 0xd7:num=14;

break;

case 0xb7:num=15;

break;

case 0x77:num=16;

break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}
return num;
}
程序如上。

回复

使用道具 举报

千问 | 2011-3-22 10:51:36 | 显示全部楼层
这是矩阵键盘的扫描程序吧!如果是独立按键可以直接这样写,if(s0==0){
delay(5);
if(s0==0)
{
while(!s0);
}}矩阵键盘的程序:uchar keycan()//键盘扫描函数{
uchar cord_h,cord_l,cord; //行列值中间变量 P3=0x0f;
//行线输出全为0 cord_h=P3&0x0f;
//读入列线值 if(cord_h!=0x0f)
//先检测有无按键按下 {
delay(100);
//去抖
回复

使用道具 举报

千问 | 2011-3-22 10:51:36 | 显示全部楼层
这键盘扫描程序,好像是买的什么实验板的光盘里面带的。本来键盘扫描用不上几行的,他们就能写成几十行!实在是太垃圾了。建议看看:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/ac1d2663581b3bc9e6113a41.html
回复

使用道具 举报

千问 | 2011-3-22 10:51:36 | 显示全部楼层
keyscan函数里面不要用 while(temp!=0xf0)这种判断,只要条件不满足你的程序就得卡死在这里了.....建议用If判断,或者也可以用外部中断,最好不用等待。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行