我用的是TX-1C的实验板 在做书上的习题 题目如下:实验板上电后 按顺序按下矩阵键盘后 在数码管上依次显示0~F,也就是说 4×4的键盘 与16个数 一对一对应 并且最终显示在数码管上。----------- 我自己写的程序 2,3,4横排的键盘显示正常 但只有第一横排的四个按键 按下去没有任何反应。求哪位高手帮我解解惑 谢谢! 程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit h1=P3^0; //h1是第一横排
sbit h2=P3^1;
sbit h3=P3^2;
sbit h4=P3^3;
sbit l1=P3^4; //l1是第一竖列
sbit l2=P3^5;
sbit l3=P3^6;
sbit l4=P3^7;
sbit wela=P2^7;
sbit dula=P2^6;
uchar num,aa;
uchar code table[]={ // 0~F的数组
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{
TMOD=0x11;
TH0=(65536-600)/256;
TL0=(65536-600)%256;
TH1=(65536-600)/256;
TL1=(65536-600)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
aa=0;
P0=0xff;
wela=1;
P0=0x00; //开启数码管的位选
wela=0;
P0=0x00; //清零
while(1)
{
dula=1;
P0=table[num]; // 数码管显示
dula=0;
}
}
void T0_
timer() interrupt 3
{
TH1=(65536-600)/256;
TL1=(65536-600)%256;
aa++;
if(aa==1) //第一次中断时 给第一横排 一个低电平 其它横排为高电平
{
h1=0;
h2=1;
h3=1;
h4=1;
}
if(aa==2) //第二次中断时 给第二横排 一个低电平 其它横排为高电平
{
h1=1;
h2=0;
h3=1;
h4=1;
}
if(aa==3) //第三次中断时 给第三横排 一个低电平 其它横排为高电平
{
h1=1;
h2=1;
h3=0;
h4=1;
}
if(aa==4) //第四次中断时 给第四横排 一个低电平 其它横排为高电平
{
h1=1;
h2=1;
h3=1;
h4=0;
aa=0; //aa清零 一边下一次中断来临时 从第一排开始
}
}
void T1_timer() interrupt 1
{
TH0=(65536-600)/256;
TL0=(65536-600)%256;
if(l1==0) //当中断连临时 检测第一竖列 有无低电平
{ //若有低电平 则继续判断 是哪一横排有低电平
if(h1==0) //从而确定是哪个按键
{num=0;while(!l1);}
if(h2==0)
{num=4;while(!l1);}
if(h3==0)
{num=8;while(!l1);}
if(h4==0)
{num=12;while(!l1);} //之后的3个if语句 都是跟第一句 同样的思路
}
if(l2==0)
{
if(h1==0)
{num=1;while(!l2);}
if(h2==0)
{num=5;while(!l2);}
if(h3==0)
{num=9;while(!l2);}
if(h4==0)
{num=13;while(!l2);}
}
if(l3==0)
{
if(h1==0)
{num=2;while(!l3);}
if(h2==0)
{num=6;while(!l3);}
if(h3==0)
{num=10;while(!l3);}
if(h4==0)
{num=14;while(!l3);}
}
if(l4==0)
{
if(h1==0)
{num=3;while(!l4);}
if(h2==0)
{num=7;while(!l4);}
if(h3==0)
{num=11;while(!l4);}
if(h4==0)
{num=15;while(!l4);}
}
}
来自小组:
电路分析设计
一周热门 更多>