单片机(ISIS 7 Professional):简易数码管显示0~99计时器代码项目

本文介绍了如何使用C语言设计一个通过按钮控制的0~99计时器。计时器具备开始、暂停和清零三种功能,通过单片机的中断服务程序实现时间的递增,并通过LED显示当前计数值。文章提供了详细的代码实现,包括延时函数、中断服务程序和按键处理程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一篇文章主要介绍用C语言制作一个按钮控制的简易0~99计时器。

设计思路:一个按钮实现三个功能:开始、暂停、清零,当第一次按下按钮的时候开始计时,第二次按下按钮时暂停计时,第三次按下按钮时清零。

基本电路图如下:

  使用的代码如下:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar count,key_flag,num;
sbit key = P3^2;
bit key_state;

void Delay(uchar n)					//延时程序 
{
	uchar i,j;
	for(i = 0;i < n;i++)
		for(j = 0;j < 200;j++);
}
void Timer0() interrupt 1			//T0中断服务程序 
{
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	num++;
	if(num == 20)					//每50ms*20=1s刷新一次 
	{
		num = 0;
		count++;
		P2 = tab[count%10];		//显示个位 
		if(count/10 == 0)			//显示十位,十位为0则不显示  
			P0 = 0xc0;
		else
			P0 = tab[count/10];
		if(count == 60)				//计满59秒后回0 
			count = 0;
	}
}
void Key_Event()					//按键处理子程序 
{
	if(key_state == 0)
		key_flag = (key_flag+1)%3;
	switch(key_flag)
	{
		case 1:					//启动计时 
		TR0 = 1;break;
		case 2:						//停止计时 
		TR0 = 0;break;
		case 0:						//清零 
		P0 = 0xff;P2 = 0xc0;count = 0;num = 0;break;
	}
}
void main()
{
	P0 = 0xff;P2 = 0xc0;count = 0;num = 0;
	key_flag = 0;					//按键标志初值为0 
	key_state = 1;
	TMOD = 0x01;					//T0定时50ms 
	TCON = 0x01;
	TH0 = (65536-50000)/256;
	TL0 = (65536-50000)%256;
	EA = 1;							//开放中断 
	ET0 = 1;						//等待按键 
	EX0 = 1;
	TR0 = 1;
	while(1)
	{
		if(key_state != key)
		{
			Delay(10);
			key_state = key;
			Key_Event();
		}
	}
}
/*仅供学习参考*/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值