#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code LedChar[] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
};
unsigned char LedBuff[6] = { //数码管显示缓冲区,初值 0xFF 确保启动时都不亮
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
unsigned char flag1s = 0; //1 秒定时标志
unsigned char i = 0; //动态扫描的索引
unsigned int cnt = 0; //记录 T0 中断次数
void main()
{
unsigned long sec = 0; //记录经过的秒数
ENLED = 0; //使能 U3,选择控制数码管
ADDR3 = 1;
TMOD = 0x01; //设置 T0 为模式 1
TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms
TL0 = 0x67;
TR0 = 1; //启动 T0
EA = 1; //使能总中断
ET0 = 1; //使能 T0 中断
while(1)
{
if(flag1s == 1) //判断 1 秒定时标志
{
flag1s = 0;
++sec;
//以下代码将 sec 按十进制位从低到高依次提取并转为数码管显示字符
LedBuff[0] = LedChar[sec%10];
LedBuff[1] = LedChar[sec/10%1
6.动态数码管的显示
最新推荐文章于 2023-07-16 09:39:58 发布