打印

用Timer0实现简单的1S倒计时

[复制链接]
766|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小分子|  楼主 | 2016-7-31 21:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小分子 于 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;
                                }
                }
        }        
  }
        
}


相关帖子

沙发
戈卫东| | 2016-7-31 21:21 | 只看该作者
还可以让它点个灯。。。。。。。

使用特权

评论回复
板凳
小分子|  楼主 | 2016-8-1 21:37 | 只看该作者
戈卫东 发表于 2016-7-31 21:21
还可以让它点个灯。。。。。。。

点一个什么样的灯呢?

使用特权

评论回复
地板
戈卫东| | 2016-8-1 22:29 | 只看该作者
小分子 发表于 2016-8-1 21:37
点一个什么样的灯呢?

什么样的灯都可以哦。。。。。只要你喜欢

使用特权

评论回复
5
LittleSnowBall| | 2016-8-1 22:54 | 只看该作者
小分子 发表于 2016-8-1 21:37
点一个什么样的灯呢?

鬼吹灯

使用特权

评论回复
6
戈卫东| | 2016-8-1 22:58 | 只看该作者

这个灯好像不行。。。。。。。关键是没有地方买。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

粉丝