求数码电子钟程序详解阿
#include "reg51.h"
unsigned char r=0x04; //0000 0100
sbit p3_4=P3^4;
unsigned char number[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char value;
int count=5;
int sec=0,min=0,hour=0;
int array[6]={0,0,0,0,0,0};
sbit button1=P3^2;
sbit button2=P3^3;
int state=0;
int count1=0;
void dishiqi(void) interrupt 1
{
if(count==-1){
count=5;
r=0x04;
}
count1++;
P1=~r;
if(count1<=250){
if(state==1) P1=P1|0xC0; 1100 0000
else if(state==2) P1=P1|0x30; 0011 0000
else if(state==3) P1=P1|0x0C; 0000 1100
}
if(count1==500) count1=0;
if(count==3 || count==1)
value=number[array[count]]|0x80;
else value=number[array[count]];
P0=value;
r = r<<1;
count--;
TH0 = 0xF8;
TL0 = 0x30;
p3_4=~p3_4;
}
void jishu(void) interrupt 3
{
int a,b;
sec++;
if(sec==60) {
sec=0;
min++;
}
if(sec<=59){
a=sec/10;
b=sec%10;
array[5]=b;
array[4]=a;
}
if(min==60)
{
min=0;
hour++;
}
if(min<=59){
a=min/10;
b=min%10;
array[3]=b;
array[2]=a;
}
if(hour==24) hour=0;
a=hour/10;
b=hour%10;
array[1]=b;
array[0]=a;
}
void delay()
{
unsigned char i,j;
for(i=100;i>0;i--)
for(j=100;j>0;j--);
}
void presskey1(void) interrupt 0
{
// EX0=0;
delay();
if(button1==0)
{
while(button1==0);
state++;
if(state==4)state=0;
count1=0;
}
}
void presskey2(void) interrupt 2
{
delay();
if(button2==0)
{
int a,b;
while(button2==0);
if(state==1)
{
hour++;
if(hour==24) hour=0;
a=hour/10;
b=hour%10;
array[1]=b;
array[0]=a;
}
else if(state==2)
{
min++;
if(min==60)min=0;
else if(min<=59){
a=min/10;
b=min%10;
array[3]=b;
array[2]=a;
}
}
else if(state==3)
{
sec++;
if(sec==60) sec=0;
else if(sec<=59){
a=sec/10;
b=sec%10;
array[5]=b;
array[4]=a;
}
}
}
}
void main(void)
{
TMOD = 0x61;//T0做定时,T1做计数
TH0 = 0xF8; //定时2ms
TL0 = 0x30;
TH1=0x06;
TL1=0x06;
TR1=1;
TR0=1;
ET1=1;
ET0 = 1;
EX0 = 1;
EX1 = 1;
EA = 1;
IP=0x0A;
while (1);
}