AT89C51电子时钟按键问题
时间:10-02
整理:3721RD
点击:
实现电子时钟的功能,并可以通过按键调时间
#include<reg51.h>
unsigned char i=20,led0=0,led1=0,led2=0,led3=0,led4=0,led5=0,sec=0,min=0,min1=0,min2=0,hour1=0,hour2,hour=0;unsigned char display[10]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
void delay(unsigned char x) //延时函数程序
{
unsigned char k;
while(x--)
for(k=0;k<125;k++)
{}
}
void button()
{
switch(P0) //BUTTON
{
case 0xfe:P2=0xfc; P1=led2; delay(1); //led2 min1
min1++;
if(min1==10)
{
min1=0;
}
led2=display[min1]; break;
case 0xfd: P2=0xfb; P1=led3; delay(1); //led3 min2
min2++;
if(min2==10)
{
min2=0;
}
led3=display[min2]; break;
case 0xfb: P2=0xf9; P1=led4; delay(1); //led4 hour1
hour1++;
if(hour1==2)
{
hour1=0;
}
led4=display[hour1]; break;
case 0xf7: P2=0xf8; P1=led5; delay(1); //led5 hour2
hour2++;
if(hour2==10)
{
hour2=0;
}
led5=display[hour2]; break;
} }
void main( ) //主函数
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
while(1) //74LS138选址
{
button();
P2=0xff; P1=led0; delay(1);
P2=0xfe; P1=led1; delay(1);
P2=0xfc; P1=led2; delay(1);
P2=0xfb; P1=led3; delay(1);
P2=0xf9; P1=led4; delay(1);
P2=0xf8; P1=led5; delay(1);
}
}
void T0_int(void) interrupt 1 //中断程序{
TH0=0x3c;
TL0=0xb0;
i--;
if(i<=0)
{
sec++;
if(sec==60)
{
sec=0;
min++;
}
led0=display[sec%10];
led1=display[sec/10];
if(min==60)
{
min=0;
hour++;
}
led2=display[min%10];
led3=display[min/10];
if(hour==24)
{
hour=0;
}
led4=display[hour%10];
led5=display[hour/10];
i=20;
}}
AT89C51电子时钟
可以正常的运行,但就是按键不了,求解答
看不清你这个图,但是你这个键盘程序有问题,应该只有一位为0才对,不知道你是怎么考虑的,这个程序是哪儿来的
这程序乱得可以啊!
看得有点懵!先把你程序写规范再说吧!
自己写的,我们的期末考试
恩恩呢,确实需要改进
P0.0 P0.1 P02 分别接3个按键,P0.0这按键是调 时的,P0.1是调分的十位,P0.2是调分的个位,都是按一次就++,另外一个就74LS138了。
怎么啦?
看来大家都有意见啊来自: Android客户端