网上抄的一个定时程序,当时编译通不过,在
elecfunwb朋友的指点下,编译通过了,但是上电路的时候又没显示,折腾了好久,数码管总算点亮了,时钟也走时了。可是按键无反应,接线应该是对的,由于是小白,折腾好久了也解决不了,所以请高手帮忙看看是什么问题,先在此感谢了!

这是矩阵键盘电路图
下面是矩阵键盘程序
/************矩阵键盘扫描,同时可进行数码管各位的+- ******************/
void matrixkeyscan() //如何确定时间设定时数码管显示的数字是否会自动+1
{
/*当两行H1、H2重新赋值时存在冲突, 解决办法为:H1=1时H2=0,H2=1时H1=0 或者对P3口进行整体赋值*/
uchar temp; /***扫描第一行**/
H1=0;H2=1;//扫描第一行
temp=P1;
temp=temp|0x1f; //读取L1、L2、L3的状态
/***判断哪个键摁下***/
if(temp!=0xff) //判断是否有键摁下
{
delay_ms(10); //延时
H1=0;H2=1; //扫描第一行//重新读取
temp=P1;
temp=temp|0x1f; //读取L1、L2、L3的状态
if(temp!=0xff) //消抖
{
switch(temp) //判断哪个键摁下
{
case 0x7f:{key=3;k3++;k3=k3%3/*k=0~2*/;
TR0=0/*时间设定时定时器停止*/;
}
break;
case
0xbf:{key=2;k3=0;k2++;if(k2==1){num1=0;TR1=1;
}
}
break;
case
0xdf:key=1;
break;
}
//键1 2 3 分别摁下
clk_weixuan();
while(temp!=0xff) //按键释放才会跳出循环
{
H1=0;H2=1; //扫描第一行//重新读取
temp=P1;
temp=temp|0x1f;//读取L1、L2、L3的状态
}
}
}
/***扫描第二行**/
H2=0;H1=1; //扫描第二行
temp=P1;
temp=temp|0x1f; //读取L1、L2、L3的状态
/***判断哪个键摁下***/
if(temp!=0xff)//判断是否有键摁下
{
delay_ms(10);//延时
H2=0;H1=1;//扫描第二行//重新读取
temp=P1;
temp=temp|0x1f;//读取L1、L2、L3的状态
if(temp!=0xff)//消抖
{
switch(temp)//判断哪个键摁下
{
case 0x7f:{key=6;k6++;if(k6==2)k6=0;}break;
case 0xbf:{key=5;k5++;/*1 2 3 4 */if(k5==5)k5=1;num1=0;TR1=1;
/*内次按下K5 都会显示2s的回路(A/B/C/D),故需要打开定时器且计数清零
*/
}
break;
case 0xdf:key=4;break;
} //键 4 5 6 分别摁下
clk_weixuan();
while(temp!=0xff)//按键释放才会跳出循环
{
H2=0;H1=1;//扫描第二行//重新读取
temp=P1;
temp=temp|0x1f;//读取L1、L2、L3的状态
}
}
}
}