历史上的今天
今天是:2025年08月05日(星期二)
2021年08月05日 | 基于8051实现的电子时钟(Version1.1)
2021-08-05 来源:eefocus
程序实现的功能:
1. 实验箱上电后, 不显示当前时间.
2. 向8051发送"Start.E"后, 电子时钟开始工作, 并显示当前时间(时 分 秒).
3. 向8051发送"Stop.E"后, 电子时钟暂停工作, 并隐藏当前时间.
#include #include unsigned char code DIG_CODE[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//对应数码管显示0~9 char buf[30];//存放收到的数据 int tcount = 0;//记录经过的2ms区间段个数 int hour = 23, minute = 59, second = 55; void T0_INT() interrupt 1 //timer0中断, 每2ms触发一次 { TR0 = 0;//关闭timer0 TH0 = 0xF8; TL0 = 0x30;//65536 - 2000 = 63536 = F830H if(tcount % 6 == 0) { //秒数个位 P2 = 0;//右数第一个数字亮 P0 = DIG_CODE[second % 10]; tcount ++; } else if(tcount % 6 == 1) { //秒数十位 P2 = 1 << 2;//右数第二个数字亮 P0 = DIG_CODE[second / 10]; tcount ++; } else if(tcount % 6 == 2) { //分钟个位 P2 = 2 << 2; P0 = DIG_CODE[minute % 10]; tcount ++; } else if(tcount % 6 == 3) { //分钟十位 P2 = 3 << 2; P0 = DIG_CODE[minute / 10]; tcount ++; } else if(tcount % 6 == 4) { //小时个位 P2 = 4 << 2; P0 = DIG_CODE[hour % 10]; tcount ++; } else if(tcount % 6 == 5) { //小时十位 P2 = 5 << 2; P0 = DIG_CODE[hour / 10]; tcount ++; } if(tcount == 500)//2ms * 500 = 1000ms = 1s -> 1s时间到 { tcount = 0; second ++; if(second == 60) { second = 0; minute ++; if(minute == 60) { minute = 0; hour ++; if(hour == 24) { hour = 0; } } } } TR0 = 1;//重新开启timer0 } int main() { int i; P2 = 111 << 2; P0 = 0;//数码管全灭 TMOD = 0x21; SCON = 0x50;//设置串行通信格式 TH0 = 0xF8; TL0 = 0x30; TH1 = 0xE6; TL1 = 0xE6; IE = 0x82; TR0 = 0;//暂不开启timer0 TR1 = 1;//开启timer1以产生波特率 while(1) { if(RI == 1)//收到数据 { RI = 0; buf[i ++] = SBUF;//接收串口发来的数据 buf[i] = '




