智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2624|回复: 5
打印 上一主题 下一主题

[华南赛区] 定时器程序问题

[复制链接]

9

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
QQ
威望
257
贡献
64
兑换币
0
注册时间
2010-10-15
在线时间
3 小时
跳转到指定楼层
1#
发表于 2010-11-11 16:06:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在下面程序的基础上,怎样实现199秒倒计时
#include <reg52.h>

typedef   unsigned char  uchar;
typedef   unsigned int   uint;

uchar  Count,Sec,shift,n;

uchar code  LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,
                          0x82,0xF8,0x80,0x90,0xff};
uchar data  display[2];
/********************************************************

主函数

*********************************************************/
main()
{
   P0 = 0xff;            //端口初始化
   P2 = 0xff;
   Count = 0x00;
   Sec = 0x00;
   n = 0x00;
   shift = 0xfe;         //送位码初值

   TMOD = 0x01;
   TH0 = 0x4c;           //50ms定时
   TL0 = 0x00;
   ET0 = 1;
   
   T2CON = 0x00;         //设置T2CON寄存器
   TH2 = 0xf8;           //2ms定时
   TL2 = 0xcc;
   ET2 = 1;              //启用Timer2中断
   EA = 1;               //总中断允许
   TR2 = 1;              //启动定时器2
   TR0 = 1;              //启动定时器0

   while(1) ;

}

/*********************************************************

  Timer0中断函数 (负责定时)

**********************************************************/
void Timer0() interrupt 1
{
   TH0 = 0x4c;               //50ms定时
   TL0 = 0x00;
   ++Count;                  //中断计数单元加1
   if(Count == 20)           //50ms×20=1s
   {
     Count = 0;              //清中断计数单元
     ++Sec;                  //秒单元加1
     if(Sec == 100)
     Sec = 0;                //清秒单元
   }
}

/*********************************************************

  Timer2中断函数 (负责数码管显示)

**********************************************************/
void  timer2() interrupt 5
{
   TR2 = 0;
   TF2 = 0;                      //手工清中断标志  
   TH2 = 0xf8;                   //2ms定时常数
   TL2 = 0xcc;

   if(n >= 2)                    //两位数码管显示
   {
     n = 0;
     shift = 0x7f;               //送位码初值
     P2 = 0xff;                  //关闭显示
   }
   else
   {
     display[0] = Sec%10;          //个位
     display[1] = Sec/10;          //十位

     P0 = LEDData[display[n++]];   //送段码
     P2 = shift;                   //送位码
     shift = (shift>>1)|0x80;      //调整位码
   }
   TR2 = 1;
}

/**********************************************************/

1

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
379
威望
285
贡献
82
兑换币
0
注册时间
2010-11-12
在线时间
6 小时
2#
发表于 2010-11-13 18:38:02 | 只看该作者
帮不忙  只能瞎看
回复 支持 反对

使用道具 举报

3

主题

113

帖子

0

精华

高级会员

Rank: 4

积分
529
QQ
威望
342
贡献
131
兑换币
0
注册时间
2010-11-13
在线时间
28 小时
3#
发表于 2011-2-24 01:52:50 | 只看该作者
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
QQ
威望
246
贡献
26
兑换币
0
注册时间
2011-4-6
在线时间
3 小时
4#
发表于 2011-4-27 09:06:28 | 只看该作者
?、
回复 支持 反对

使用道具 举报

1

主题

23

帖子

0

精华

高级会员

Rank: 4

积分
775
威望
423
贡献
194
兑换币
68
注册时间
2012-8-6
在线时间
79 小时
毕业学校
厦门大学
5#
发表于 2012-9-9 01:39:48 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 15:13 , Processed in 0.091915 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表