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

本文介绍了如何使用51单片机配合定时器T0进行倒计时,并通过7段数码管实时显示剩余时间。实验环境包括Keil5开发环境和Proteus仿真平台,所需元件有AT89C51和7SEG-MPX2-CA。代码详细展示了定时器初始化、中断处理和主程序流程,最后附有实验成果图。
摘要由CSDN通过智能技术生成

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

普中51倒计时C语言程序可以使用C语言的时间函数和循环语句来实现。具体步骤如下: 1. 引入头文件:在程序开头引入<time.h>头文件,以便使用时间函数。 2. 初始化计时器:使用time_t类型的变量start_time保存程序开始运行时的时间,通过调用time(NULL)函数获取当前时间并赋值给start_time。 3. 进入倒计时循环:设置一个变量count并初始化为51,使用while循环,当count大于等于0时执行循环体。 4. 打印倒计时时间:在循环体内使用printf函数输出当前倒计时时间,即count的值。 5. 更新倒计时时间:在循环体内使用time(NULL)函数获取当前时间的值,并通过减去start_time的值得出已经过去的秒数。将已经过去的秒数除以1并取整,再减去当前倒计时的秒数51,即可得到经过的秒数。 6. 更新count的值:通过count初始值51再减去经过的秒数得到新的count的值。 7. 调整程序运行速度:为了能够看到倒计时效果,在每次循环结束后使用sleep函数暂停程序的运行一秒钟。 8. 循环结束后的处理:当count小于0时,跳出循环体,输出倒计时结束的提示。 下面是一个简单的实现示例: ```c #include <stdio.h> #include <time.h> int main() { time_t start_time, current_time; int count = 51; start_time = time(NULL); while (count >= 0) { printf("倒计时:%d\n", count); current_time = time(NULL); count = 51 - ((int)current_time - (int)start_time); sleep(1); } printf("倒计时结束!\n"); return 0; } ``` 以上就是一个简单的普中51倒计时C语言程序实现。通过循环和时间函数,可以实现每秒递减的倒计时效果。
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.T.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值