简单利用C51的Timer0实现倒计时(F-0)

来源:互联网 发布:淘宝手机货到付款骗局 编辑:程序博客网 时间:2024/05/16 19:23
/****************************用Timer0实现简单的1S倒计时*****************************/#include <reg52.h>#define uchar unsigned charvoid 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 = 0;                          //达到20次后,计数清零                P1 = SecValue[sec];                 //将秒数对应的显示值传到P1口                sec++;                              //秒数自动加1                if(sec >= 16)                       //秒数超过对应值后,自动清零                {                    sec = 0;                }        }    }     }}
1 0