C51实现0到99数字显示

本文介绍了一个使用2位数码管显示计时的实验,实现了从00至99秒的循环计时功能,并通过按键控制计时的启动、停止及清零。文中提供了详细的C语言代码和Proteus 8.10版本的原理图。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、实验要求

用2位数码管显示计时时间,最小计时单位为“秒”,计时范围00~99s。当第1次按一下并松开计时功能键时,秒表开始计时并显示;第2次按一下并松开计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计时到99s,将重新开始从0计时;第3次按一下并松开计时功能键,秒表清0。再次按一下计时功能键,则重复上述计时过程。

二、实验代码和原理图

1.实验代码

#include"reg51.h"
#define uint unsigned int
uint count=0;
static uint temp=0;//利用静态变量来记录按下的次数
	
uint code SegCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(uint ms);
void k1();
void k2();
void k3();
void k4();

void main()
{
	P0=0X00;//灯灭
	P2=0X00;//等待按键按下
	while(1)
	{
		if(P3==0x7f)
		{
			//测试了一下,有时候松的太快反映不过来。
			delay(20);//防止误碰
			if(P3==0X7F)
			{
				while(P3==0x7f);//松手判断
			    temp++;
			}
		}
		switch (temp)
		{
			case 1:k1();break;
			case 2:k2();break;
			case 3:k3();break;
			case 4:k4();break;
			default:break;	
		}
		
	}//防止跑飞
}

void k1()//要求1
{
	while(1)
	{
		P0=SegCode[count/10];//显示高位
		P2=SegCode[count%10];//显示低位
		count++;
		delay(100);//隔一秒
		if(P3==0x7f)
		{
			while(P3==0x7f);//松手判断
			temp++;
			break;
		}
	}
}

void k2()
{
   if(count==99)
	   count=0;
   P0=SegCode[count/10];//显示高位
   P2=SegCode[count%10];//显示低位
}

void k3()
{
   count=0;
   P0=SegCode[count/10];//显示高位
   P2=SegCode[count%10];//显示低位
	
}
void k4()
{
    temp=0;
	P0=0X00;
	P2=0X00;
}
	

void delay(uint ms)//实现每个数字显示隔一秒
{
	uint i;
	while(ms--)
		for(i=0;i<113;i++);
	
}

2.原理图

在这里插入图片描述proteus版本8.10

总结

本次实验不是特别难,我所做的也只是一种方法而已。代码之路何其艰辛,条条大路通罗马,大家要是还有其他方法,可以在评论区留言。我期待与大家进行学习交流。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值