使用计时器实现倒计时的51单片机程序详解

51单片机通过计时器实现倒计时

文章目录

  • 51单片机通过计时器实现倒计时
  • 实验环境
  • 仿真图
  • 代码实现
  • 成果图
  • 实验环境


    软件: Keil5+Proteus7

    元件: AT89C51 * 1,7SEG-MPX2-CA * 1

    image-20220406143628503

    仿真图


    image-20220406143110110

    代码实现


    //名称: 定时器实现数码管倒计时
    #include <reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    #define SEG P3
    
    sbit SCON1 = P2^0; 
    sbit SCON2 = P2^1;
    
    uchar num=15,ge,shi;
    uchar count=0;
    uchar flag;
    
    //定义表格存放共阳极LED的点阵码
    unsigned char code ledTab[]={
    	0xC0, // 1100 0000 数字0
    	0xF9, // 1111 1001 数字1
    	0xA4, // 1010 0100 数字2
    	0xB0, // 1011 0000 数字3
    	0x99, // 1001 1001 数字4
      	0x92, // 1001 0010 数字5
    	0x82, // 1000 0010 数字6
    	0xF8, // 1111 1000 数字7
    	0x80, // 1000 0000 数字8
    	0x90  // 1001 0000 数字9
    };  
    
    void T0INTinit() //定时器T0初始化1秒
    {
    	TMOD=0x01;
    	TH0=(65536-50000)/256;
    	TL0=(65536-50000)%256;
    	EA=1;
    	ET0=1;
    	TR0=1;
    }
    
    
    void T0INT() interrupt 1
    {
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    flag++;
    	if(flag==20)//当定时到1秒时执行花括号里面的语句
    	{
    		flag=0;
    	  num--;
        if (num == 0)
         num = 15;
    	}
    }
    
    
    //主程序
    void main(){
    	T0INTinit();
    	while(1){	//死循环
    		SEG=0xff; //消影,不然只显示一位
    		shi = num / 10;
    		ge = num % 10;
    		switch(count){	
    			//通过余晖效应,虽然是不同时间,但人眼感觉是一起亮的
    			case 0: SCON1=0;SCON2=1;SEG=ledTab[ge];break;
    			case 1: SCON1=1;SCON2=0;SEG=ledTab[shi];break;
    		}
    		count++;
    		if(count>1) count=0;
    	}
    }
    

    成果图


    4

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用计时器实现倒计时的51单片机程序详解

    发表评论