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

51单片机通过计时器实现倒计时,第1张

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

文章目录
  • 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;
	}
}
成果图

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1325975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存