找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2836|回复: 2
打印 上一主题 下一主题
收起左侧

数码管中断定时0---99

[复制链接]
跳转到指定楼层
楼主
ID:148885 发表于 2016-12-9 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}

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


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:150555 发表于 2016-12-9 22:12 | 只看该作者
你想表达什么?
回复

使用道具 举报

板凳
ID:138155 发表于 2016-12-10 08:52 | 只看该作者
没有看明白程序完整吗
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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