51单片机定时器计时1秒数码管静态循环显示0到F+Proteus仿真

51单片机定时器计时1秒数码管静态循环显示0到F+Proteus仿真


  • Proteus
    在这里插入图片描述

实例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/\*\*\*51单片机定时器计时1秒数码管静态循环显示0到F+Proteus仿真\*\*\*/

#include<reg52.h>
//74HC138译码器,引脚
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;

typedef unsigned char u8;

unsigned char code LEDchar[]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
}; //共阴极数码管从0到F的真值

void TimeInit(); //定时器初始化函数
void main()
{
u8 cnt = 0; //记录T0中断次数
u8 sec =0; //记录经过的秒数

LSA = 0; //数码管的位选
LSB = 0;
LSC = 0;

TimeInit(); //定时器初始化

while(1)
{
if(TF0 == 1) //判断T0是否溢出
{
TF0 = 0; //T0溢出后,清楚中断标志
TH0 = (65536-2\*110592/12)/256; //0xB8,定时20ms 0.02秒\*11059200
TL0 = (65536-2\*110592/12)%256; //0x00
cnt++;
if(cnt>=50) //判断是否达到50次,即一秒钟
{
cnt = 0; //清零
P0 = LEDchar[sec]; //当前秒数对应的真值表中的真值送到P0口
sec++; //秒数记录加1
if(sec>=16) //秒数达到0x0F后,重新从0开始
{
sec = 0;
}
}
}
}
}

void TimeInit()
{
TMOD = (TMOD & 0xf0)|0x01; //设置定时器工作在模式1
TH0 = (65536-2\*110592/12)/256; //0xB8,定时20ms
TL0 = (65536-2\*110592/12)%256; //0x00
TR0 = 1; //启动定时器T0工作
}



仿真资源和程序源码

1
2
3
链接:https://pan.baidu.com/s/1wsbWKMNbF4x02mSN-fSvvQ 
提取码:znzc