C51实现0到99数字显示

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

文章目录

  • 一、实验要求
  • 二、实验代码和原理图
    • 1.实验代码
    • 2.原理图
  • 总结


一、实验要求

用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.原理图

C51实现0到99数字显示_第1张图片proteus版本8.10

总结

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

你可能感兴趣的:(单片机,单片机,嵌入式硬件,c语言,51单片机)