#include "reg52.h"
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
// sbit led = P2 ^ 0;
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4;
// display 0-9 A-F
u8 smgduan[17] = {0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71};
sbit key1 = P3 ^ 1;
sbit led = P2 ^ 0;
static u32 number = 86389;
// unsigned char h = 23, m = 59, s = 59;
// unsigned char f1 = 0, f2 = 0, f3 = 0;
void delay(uint i)
{
while (i--)
;
}
void keypros()
{
if (0 == key1)
{
delay(1000);
if (0 == key1)
{
led = ~led;
}
while (!key1)
;
}
}
void Timer0Init()
{
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
ET0 = 1;
EA = 1;
TR0 = 1;
// TL1 = (65536 - 50000) % 256;
// TH1 = (65536 - 50000) / 256;
}
void smg_display(u8 location, u8 num)
{
switch (location - 1)
{
case (0):
LSA = 1;
LSB = 1;
LSC = 1;
break;
case (1):
LSA = 0;
LSB = 1;
LSC = 1;
break;
case (2):
LSA = 1;
LSB = 0;
LSC = 1;
break;
case (3):
LSA = 0;
LSB = 0;
LSC = 1;
break;
case (4):
LSA = 1;
LSB = 1;
LSC = 0;
break;
case (5):
LSA = 0;
LSB = 1;
LSC = 0;
break;
case (6):
LSA = 1;
LSB = 0;
LSC = 0;
break;
case (7):
LSA = 0;
LSB = 0;
LSC = 0;
break;
}
P0 = smgduan[num];
delay(100);
P0 = 0x00;
}
void showNumbers()
{
u32 h, m, s;
h = number / 3600;
m = number % 3600 / 60;
s = number % 60;
if (h < 10)
{
smg_display(1, 0);
smg_display(2, h);
}
else if (h < 24)
{
smg_display(1, h / 10);
smg_display(2, h % 10);
}
else
{
number = 0;
}
if (m < 10)
{
smg_display(3, 0);
smg_display(4, m);
}
else
{
smg_display(3, m / 10);
smg_display(4, m % 10);
}
if (s < 10)
{
smg_display(5, 0);
smg_display(6, s);
}
else
{
smg_display(5, s / 10);
smg_display(6, s % 10);
}
}
void main()
{
Timer0Init();
led = 1;
showNumbers();
while (1)
{
showNumbers();
// keypros();
// displayNumber();
}
}
void Timer0() interrupt 1
{
static unsigned int i;
TH0 = 0xfc;
TL0 = 0x18;
i++;
if (1000 == i)
{
i = 0;
number++;
}
}