方法一:利用定時器溢出查詢實現(xiàn)
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//共陰數(shù)碼管段選表0-9
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,0x40};
uchar hour,minute,second;
void delay();
void display();
void timerInit();
void main(void)
{
uchar i;
timerInit();
i = 0;
hour = 12;
minute = 34;
second = 56;
while(1){
if( 1 == TF0 ){
TF0 = 0;
TH0 = 0x4B;
TL0 = 0xFC;
i++;
if( 20 == i ){
second++;
i = 0;
}
if( 60 == second ){
second = 0;
minute++;
}
if( 60 == minute ){
minute = 0;
hour++;
}
if( 24 == hour ){
hour = 0;
}
}
display();
}
}
void timerInit()
{
TMOD = 0x01;
TH0 = 0x4B;
TL0 = 0xFC;
TR0 = 1;
}
void delay()
{
uchar i;
for( i = 0; i < 111; i++ ) ;
}
void display()
{
P0 = tabel[ hour / 10 ];
P1 = 0x80;
delay();
P0 = tabel[ hour % 10 ];
P1 = 0x40;
delay();
P0 = tabel[ 10 ];
P1 = 0x20;
delay();
P0 = tabel[ minute / 10 ];
P1 = 0x10;
delay();
P0 = tabel[ minute % 10 ];
P1 = 0x08;
delay();
P0 = tabel[ 10 ];
P1 = 0x04;
delay();
P0 = tabel[ second / 10 ];
P1 = 0x02;
delay();
P0 = tabel[ second % 10 ];
P1 = 0x01;
delay();
}
方法二:利用定時器中斷實現(xiàn)
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//共陰數(shù)碼管段選表0~9和-
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,0x40};
uchar code wei[]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
uchar hour,minute,second,i;
void delay();
void display();
void timerInit();
void main(void)
{
timerInit();
hour = 12;
minute = 34;
second = 56;
while(1){
display();
}
}
void timerInit()
{
TMOD = 0x01;
TH0 = 0x4B;
TL0 = 0xFC;
TR0 = 1;
EA = 1;
ET0 = 1;
}
void delay()
{
uchar i;
for( i = 0; i < 111; i++ ) ;
}
void display()
{
P0 = tabel[ hour / 10 ];
P1 = wei[ 7 ];
delay();
P0 = tabel[ hour % 10 ];
P1 = wei[ 6 ];
delay();
P0 = tabel[ 10 ];
P1 = wei[ 5 ];
delay();
P0 = tabel[ minute / 10 ];
P1 = wei[ 4 ];
delay();
P0 = tabel[ minute % 10 ];
P1 = wei[ 3 ];
delay();
P0 = tabel[ 10 ];
P1 = wei[ 2 ];
delay();
P0 = tabel[ second / 10 ];
P1 = wei[ 1 ];
delay();
P0 = tabel[ second % 10 ];
P1 = wei[ 0 ];
delay();
}
void timer0Int() interrupt 1
{
i++;
if( 20 == i ){
second++;
i = 0;
}
if( 60 == second ){
second = 0;
minute++;
}
if( 60 == minute ){
minute = 0;
hour++;
}
if( 24 == hour ){
hour = 0;
}
TH0 = 0x4B;
TL0 = 0xFC;
}
|