51单片机8段数码管时钟代码
时间: 2023-11-27 10:53:27 浏览: 90
基于51单片机的8位数码管显示时钟的汇编代码
5星 · 资源好评率100%
以下是一个基于51单片机的8段数码管时钟代码:
```
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P2^0;
sbit D2=P2^1;
sbit D3=P2^2;
sbit D4=P2^3;
sbit D5=P2^4;
sbit D6=P2^5;
sbit D7=P2^6;
sbit D8=P2^7;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//0-9
0xbf,0xff,0x7f,0xdf,0xef,0xf7,0xfb,0xfd
//A,b,c,d,E,F,G
};
void delay(uint i)
{
while(i--);
}
void main()
{
uchar hour,min,sec;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
TR0=1;
hour=12;
min=0;
sec=0;
while(1)
{
D1=1;
P0=table[hour/10];
delay(100);
D1=0;
D2=1;
P0=table[hour%10];
delay(100);
D2=0;
D3=1;
P0=table[min/10];
delay(100);
D3=0;
D4=1;
P0=table[min%10];
delay(100);
D4=0;
D5=1;
P0=table[sec/10];
delay(100);
D5=0;
D6=1;
P0=table[sec%10];
delay(100);
D6=0;
}
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
}
```
代码中使用了定时器中断,每秒钟触发一次中断,计算并更新时、分、秒,并在8段数码管上显示。其中,table数组中存储了数字0到9以及A、b、c、d、E、F、G的对应段码。
阅读全文