|
#include <reg52.h> // 自寫(xiě)頻率計(jì)程序,在學(xué)習(xí)板上通過(guò)
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
code uint8 number[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uint8 a[6];
uint16 counter,counter1;
uint8 ky;
uint32 sec;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit KeyOut1=P2^3;
sbit K1 = P2^4;
bit flag;
void refresh_led()
{
static uint8 j = 0;
switch(j)
{
case 0: ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[0]];break;
case 1: ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;j++;P0 = number[a[1]];break;
case 2: ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[2]];break;
case 3: ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;j++;P0 = number[a[3]];break;
case 4: ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;j++;P0 = number[a[4]];break;
case 5: ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;j = 0;P0 = number[a[5]];break;
default: break;
}
}
void Key1(void)
{
while(!K1);
ky++;
if(ky > 1)
ky=0;
}
void Delay(uint16 ms)
{
uint8 i;
while(ms--)
{
for( i=0;i<125;i++)
;
}
}
main()
{
ENLED = 0; ADDR3 = 1;
KeyOut1=0;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(!K1)
Delay(5);
if(!K1)
Key1();
if(flag==1)
{ flag=0;
sec=counter*65536+TH0*256+TL0;
if(ky==1)
sec=0;
a[0] = sec%10;
a[1] = sec/10%10;
a[2] = sec/100%10;
a[3] = sec/1000%10;
a[4] = sec/10000%10;
a[5] = sec/100000%10;
counter=0;
counter1=0;
TH0=0;
TL0=0;
TR0=1;
}
}
}
void t0(void) interrupt 1 using 1
{
counter ++;
}
void t1(void) interrupt 3 using 2
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
counter1++;
if(counter1==250)
{
TR0=0;
counter1=0;
flag=1;
}
refresh_led();
}
|
評(píng)分
-
查看全部評(píng)分
|