本帖最后由 小分子 于 2016-8-1 21:36 编辑
/****************************
用Timer0实现简单的1S倒计时
*****************************/
#include <reg52.h>
#define uchar unsigned char
void Timer0Init(); //定时器0初始化函数声明
void SecProcess(); //倒计时处理函数声明
void main()
{
Timer0Init();
SecProcess();
}
void Timer0Init()
{
TMOD = 0x01; //定时器0工作模式为1
TH0 = 0x4B; //定时为50MS,定时器初始值为=65536-(0.05/(12/110592))= 19240
TL0 = 0x28;
TR0 = 1; //开启定时器0
}
void SecProcess()
{
uchar count = 0; //用于计数,从而达到1S定时
uchar sec = 0; //记录经过的秒数
uchar code SecValue[]={ 0x8e,0x86,0xa1,0xc6,
0x83,0x88,0x90,0x80,
0xf8,0x82,0x92,0x99,
0xb0,0xa4,0xf9,0xc0};
P1 = 0xFF; //使P1口初始化
while (1)
{
if(TF0 == 1) //判断T0是否溢出
{
TF0 = 0; //在T0溢出后,使TF0位清零
TH0 = 0x4B; //再次写入初值,否则计数器溢出后将从0计数,这样定时就不是50MS
TL0 = 0x28;
count++; //计数值自加1
if(count >= 20) //判定T0溢出是否达到20次(是否到达1S)
{ //对于溢出判断定时,只能这样判断count >= 20;但是不能写成count == 20。
count = 0; //达到20次后,计数清零
P1 = SecValue[sec]; //将秒数对应的显示值传到P1口
sec++; //秒数自动加1
if(sec >= 16) //秒数超过对应值后,自动清零
{
sec = 0;
}
}
}
}
}
|