简单定时器及中断的应用(9999倒计数)

初步了解到定时器,还有中断,或者说他们是一体的,用自己的话来说,定时器就是中断这个呆瓜的闹钟,一旦 有事情做程序就在自己弄,然后,设定好自己的闹钟(中断),

然后呢在一开始或者,某个时间点将闹钟“按下”,于是能够看得见的时间开始流失,流失到某个点的时候,“啦啦啦”闹钟响了,有时候他甚至还设很多闹钟,根据事情对自己的重要性。好了,闹钟响后,程序就跳到那个位置去执行相应的语句。这是简单,初步的中断。




#include<reg52.h>
#include<intrins.h>
#define uint unsigned int 
#define uchar unsigned char 
sbit dula=P2^6;
sbit wela=P2^7;
uchar temp,tt,t1;
uchar aa,bb,cc,bai,shi,ge,flag,flag1;
uint shu;//要记得uint的范围可是比uchar大的,所以这里到9999了必须用uint。
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x67,0x76,0x38,0x3f,0};
void display(uchar aa,uchar bb,uchar cc,
uchar bai);
void delay(uint z);
void init();
void main()
{
      init();
      while(1)
 {
 display(aa,bb,cc,bai);


 }
   
 


}
void init ()

  shu=9999;
  TMOD=0X01;//确定定时器的工作方式 开启定时器零和定时器1
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;//开启总中断
  ET0=1;//开启定时器0的中断;
  TR0=1; //启动定时器0;
}
void timer0() interrupt 1
 {
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    tt++;
if(tt==20)
{
tt=0;
shu--;
   aa=shu/1000;
bb=shu/100%10;
cc=shu/10%10;
bai=shu%10;


}
 }


void display(uchar aa,uchar bb,uchar cc,
uchar bai)
{
        dula=1;
P0=table[aa];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);




dula=1;
P0=table[bb];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);




dula=1;
P0=table[cc];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);


 
   dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(5);
}








void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值