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

[复制链接]
1115|5
 楼主| 小分子 发表于 2016-7-31 21:14 | 显示全部楼层 |阅读模式
本帖最后由 小分子 于 2016-8-1 21:36 编辑
  1. /****************************
  2. 用Timer0实现简单的1S倒计时
  3. *****************************/
  4. #include <reg52.h>
  5. #define uchar unsigned char

  6. void Timer0Init();             //定时器0初始化函数声明
  7. void SecProcess();                 //倒计时处理函数声明

  8. void main()
  9. {

  10.         Timer0Init();
  11.         SecProcess();
  12. }
  13. void Timer0Init()
  14. {
  15.         TMOD = 0x01;                //定时器0工作模式为1
  16.         TH0 = 0x4B;                 //定时为50MS,定时器初始值为=65536-(0.05/(12/110592))= 19240
  17.         TL0 = 0x28;
  18.         TR0 = 1;                        //开启定时器0
  19. }
  20. void SecProcess()
  21. {
  22.         uchar count = 0;                                                                //用于计数,从而达到1S定时
  23.         uchar sec = 0;                                                                        //记录经过的秒数
  24.         uchar code SecValue[]={ 0x8e,0x86,0xa1,0xc6,
  25.                                                 0x83,0x88,0x90,0x80,
  26.                                                 0xf8,0x82,0x92,0x99,
  27.                                                 0xb0,0xa4,0xf9,0xc0};
  28.         P1 = 0xFF;                                                                            //使P1口初始化
  29.         while (1)
  30.         {
  31.                 if(TF0 == 1)                                                                //判断T0是否溢出
  32.                  {
  33.                         TF0 = 0;                                                                //在T0溢出后,使TF0位清零
  34.                         TH0 = 0x4B;                //再次写入初值,否则计数器溢出后将从0计数,这样定时就不是50MS
  35.                         TL0 = 0x28;
  36.                         count++;                                                  //计数值自加1
  37.                         if(count >= 20)                                       //判定T0溢出是否达到20次(是否到达1S)
  38.                         {                                   //对于溢出判断定时,只能这样判断count >= 20;但是不能写成count == 20。
  39.                                 count = 0;                                        //达到20次后,计数清零
  40.                                 P1 = SecValue[sec];                    //将秒数对应的显示值传到P1口
  41.                                 sec++;                                          //秒数自动加1
  42.                                 if(sec >= 16)                              //秒数超过对应值后,自动清零
  43.                                 {
  44.                                         sec = 0;
  45.                                 }
  46.                 }
  47.         }        
  48.   }
  49.         
  50. }


戈卫东 发表于 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
点一个什么样的灯呢?

什么样的灯都可以哦。。。。。只要你喜欢
LittleSnowBall 发表于 2016-8-1 22:54 | 显示全部楼层
小分子 发表于 2016-8-1 21:37
点一个什么样的灯呢?

鬼吹灯
戈卫东 发表于 2016-8-1 22:58 | 显示全部楼层

这个灯好像不行。。。。。。。关键是没有地方买。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部