×
单片机 > 单片机程序设计 > 详情

51单片机完成时钟形式显示

发布时间:2020-06-18 发布时间:
|

题目要求: 

用四个数码管完成时钟形式显示。 

如显示1 2. 0 0 

然后一个按键控制暂停并闪烁,另一个按键控制分钟加1 

要求:当第一个按键不按下时,第二个按键无法完成加1动作。 

仿真图,如下: 

  

按键K1控制暂停闪烁,开始,K2加1 

这里需要说明一下,因为没有教到时钟,时钟部分,将在下一个微博实现,其实很简单,用时钟中断即可完成,那样的时钟比较准确。


写代码之前,要仔细看仿真的接口问题,这样才能写好代码,代码如下:


#include

/*  按下key1 暂停并闪烁,再按一下 继续,  key2按下加1,但是key2必须在key1按下后操作*/

unsigned char c[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90}; // 0-9


sbit key1=P1^0;

sbit key2=P1^1;


int hour;   //  小时

int min;    //  分钟


void delay()

{

    int i,j;

    for(i=1;i<10;i++)

    {

        for(j=1;j<100;j++);

    }

}


void display()

{

    P2=0X7F;

    P0=c[hour/10];

    delay();

    P2=0XBF;

    P0=c[hour%10]&0X7F; //  第二个数码管显示时,需要有点,要注意

    delay();

    P2=0XDF;

    P0=c[min/10];

    delay();

    P2=0XEF;

    P0=c[min%10];

    delay();

    P2=0XFF;    

}


void delay_2()

{

    int i,j;

    for(i=1;i<2;i++)

    {

        for(j=1;j<10;j++)

        {

            display();

        }

    }

}


void delay_3()

{

    int i,j;

    for(i=1;i<20;i++)

    {

        for(j=1;j<200;j++);

    }

}


void delay_4()

{

    int i,j;

    for(i=1;i<100;i++)

    {

        for(j=1;j<100;j++);

    }

}


void display_2()

{

    for(hour=0;hour<24;hour++)

    {

        for(min=0;min<60;min++)

        {

            display();

            if(0 == key1)

            {

                delay_3(); // 消抖

                if(0 == key1)

                {

                    while(1)

                    {

                        display();

                        delay_4();

                        if(0 == key1)

                        {

                            delay_3();//消抖

                            if(0 == key1)

                            {

                                break; // 再按key1退出闪烁

                            }

                        }

                        if(0 == key2)

                        {

                            delay_3();//消抖

                            if(0 == key2)

                            {

                                min++;// 分钟加1

                                if(60 == min)

                                {

                                    min=0;

                                }

                            }   

                        }   

                    }

                }   

            }

            delay_2();


        }

    }

}

void main()

{

    while(1)

    {

        display_2();            

    }

}



结果如下: 

关键字:51单片机  时钟形式  显示 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32CubeMX系列教程02_STM32CubeMX工具.HAL库下载.安装说明