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
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!