|
#include <reg51.h>
// 函數(shù)聲明
void Timer0_Init(void);
void UART_Init(void);
void Send_Current_Number(void); // 專門用于發(fā)送當(dāng)前數(shù)字的函數(shù)
// 數(shù)碼管編碼
unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char currentNum = 0;
unsigned char timer50ms = 0;
// 定時(shí)器初始化
void Timer0_Init() {
TMOD = 0x21; // 定時(shí)器0模式1,定時(shí)器1模式2
TH0 = 0x3C; // 50ms定時(shí)值(12MHz)
TL0 = 0xB0;
ET0 = 1; // 允許定時(shí)器0中斷
EA = 1; // 總中斷允許
TR0 = 1; // 啟動(dòng)定時(shí)器0
}
// 串口初始化
void UART_Init() {
SCON = 0x50; // 模式1,允許接收
TH1 = 0xFD; // 9600波特率(12MHz)
TL1 = 0xFD;
TR1 = 1; // 啟動(dòng)定時(shí)器1
}
// 專用數(shù)字發(fā)送函數(shù)
void Send_Current_Number(void) {
SBUF = currentNum + '0';
while(!TI); // 等待發(fā)送完成
TI = 0; // 清除發(fā)送標(biāo)志
}
// 定時(shí)器中斷
void Timer0_ISR() interrupt 1 {
TH0 = 0x3C; // 重裝定時(shí)值
TL0 = 0xB0;
if(++timer50ms >= 10) { // 0.5秒到達(dá)
timer50ms = 0;
// 更新顯示
P1 = LED7Code[currentNum];
// 發(fā)送當(dāng)前數(shù)字
Send_Current_Number();
// 數(shù)字循環(huán)
currentNum++;
if(currentNum > 9) currentNum = 0;
}
}
void main() {
P1 = LED7Code[0]; // 初始顯示0
currentNum = 0; // 顯式初始化
UART_Init(); // 初始化串口
Timer0_Init(); // 初始化定時(shí)器
// 初始發(fā)送數(shù)字0
Send_Current_Number();
while(1); // 主循環(huán)
}
|
-
|