伪代码,参考吧
矩阵:(查表法)
uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delayms(30); //延时30ms
scan1=P1;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key);
}
}
}
}
return (*);
}
数码管:给值就行了
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off
是要做实际的电路实验吗?
下图中的,驱动继电器的三极管,画错了。
另外,继电器上面的,二极管,应该有限流电阻。
驱动数码管,段,应该用 P0。
P3,有第二功能,不宜用于矩阵键盘。
电路,不合理的地方太多了,编程后,也难以实验成功。
你这里没有矩阵键盘呀
用555就可以解决比51便宜实用多了