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

    proteus版本8.10

    总结

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

    物联沃分享整理
    物联沃-IOTWORD物联网 » C51单片机实现0到99数字显示功能

    发表评论