方法一:利用定時器溢出查詢實現
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//共陰數碼管段選表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();
}
方法二:利用定時器中斷實現
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//共陰數碼管段選表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;
}
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|