51单片机通过计时器实现倒计时
文章目录
- 51单片机通过计时器实现倒计时
- 实验环境
- 仿真图
- 代码实现
- 成果图
实验环境
软件: Keil5+Proteus7
元件: AT89C51 * 1,7SEG-MPX2-CA * 1
仿真图
代码实现
//名称: 定时器实现数码管倒计时
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define SEG P3sbit 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 数字00xF9, // 1111 1001 数字10xA4, // 1010 0100 数字20xB0, // 1011 0000 数字30x99, // 1001 1001 数字40x92, // 1001 0010 数字50x82, // 1000 0010 数字60xF8, // 1111 1000 数字70x80, // 1000 0000 数字80x90 // 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;}
}