简单51计时器
前言
闲来无聊,虽然期末考试临近,但还是不想复习。突然有朋友问我这个
用单片机控制两个LED数码,采用静态链接,要求两个数码管显示00~99计数,时间间隔为1s(中断方式)。分别设计出电路图和程序。
我一寻思,这个简单,我就直接源代码一敲就发给他了。事后还是觉得有必要验证一下,就在Protues里面仿真试了一下,果然有两个小细节错了 😦
正文
单片机用的是AT89C52,程序是在Keil里面编写的(懒得写注释了)
#include "reg52.h"
unsigned char DUMA[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int ms=0,s=0;
void main()
{
TMOD=0x01;
EA=1;
ET0=1;
TF0=1;
TR0=1;
while(1)
{
if(ms>=1000)
{
ms=0;
s++;
if(s==100)
s=0;
}
P2=~DUMA[s/10];
P3=~DUMA[s%10];
}
}
void timer0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ms++;
}
Proteus的设计也很简单,就是一个最简系统加上两个七段数码管,效果就是下面这样:
项目工程源文件在这里
链接: https://pan.baidu.com/s/1xupcTSfhRc0gdB8BesXPhQ 提取码: msq3