- 51单片机通过计时器实现倒计时
- 实验环境
- 仿真图
- 代码实现
- 成果图
软件: Keil5+Proteus7
元件: AT89C51 * 1,7SEG-MPX2-CA * 1
仿真图代码实现
//名称: 定时器实现数码管倒计时 #include成果图#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; } }



