利用芯片74138控制的数码管的C程序

来源:百度知道 编辑:UC知道 时间:2024/06/06 17:41:19
void ReadKey(void); //扫描键盘 获取键值

void main(void) //入口函数
{
while(1){
ReadKey(); //调用键盘扫描
if(l_key!=0xff) //如果有键按下,将其输出P2口LED灯显示,
{ switch(l_key)
{ case 0x7e:
num=1;
break;
case 0xbe:
num=2;
break;
case 0xde:
num=3;
break;
case 0xee:
num=4;
break;
}
P2=table[num] ;
} //这里取反是因为LED灯采用共阴接法
}
}

void ReadKey(void) //读键盘值
{
P0=0xfe; //将第一列拉低,扫描是否有按键按下,第一列按键包括:0,4,8,C
l_key=P0; //读取键值
if(l_key!=0xfe) //如果l_key不等于0xfe,说明有键按下,就返回,否则继续扫描下一列
return;
P0=0xfd; //将第二列拉低,扫描是否有按键按下,第二列按键包括:1,5,9,D
l_key=P0; //读取键值
if(l_key!=0xfd) //如果l_key不等于0xfd,说明有键按下,就返回,否则继续扫描下一列
return;
P0=0xfb; //将第三列拉低,扫描是否有按键按下,第三列按键包括:2,6,A,F
l_key=P0; //读取键值
if(l_key!=0xfb) //如果l_key不等于0xfb,说明有键按下,就返回,否则继续扫描下一列
return;

从你程序没看出什么问题,可以从以下方面检查下:
1.
不知道你table数组存的什么东西,
你可以直接将P2=table[num] ;直接改为P2=table[3];和P2=table[4];首先确定问题是不是出在3、4led显示上,
2.
如果不是,可以将
case 0x7e:
num=1; //改为3
break;
case 0xbe:
num=2; //改为4
break;
确定是不是没有产生3、4按键,检查3、4按键的外部电路。