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

发布者:泥匠手最新更新时间:2019-05-14 来源: eefocus关键字:51单片机  时钟形式  显示 手机看文章 扫描二维码
随时随地手机看文章

题目要求: 

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

如显示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单片机  时钟形式  显示 引用地址:51单片机完成时钟形式显示

上一篇:LCD1602芯片的使用——简单易懂
下一篇:基于单片机的简易数字电压表设计

推荐阅读最新更新时间:2024-11-12 12:28

基于51单片机对电子储物柜系统的设计
电路描述: 安全是我们日常的生活中最关心的问题。 每个人都觉得安全问题是非常至关重要的,在家里的门和安全,可以尽可能多的安全。 为了对于门访问安全 因此,我们打算通过引进一个电子密码锁系统,该系统包括一个人得到一个访问某些项目之前要输入密码的安全性,以及在家里,一个房间密码锁系统,不只是普通的单用户密码锁系统,需要用户插入已编程的代码来访问一个房间; 它是一个密码锁系统,有密码而且可以启用多个用户访问。 在基于51单片机的门储物柜,只允许授权人员进入限制区域的门禁系统。 该系统由8位微控制器AT89C2051具有ROM的2K字节的程序存储器完全控制。 该系统具有通过该密码,可以通过它来输入键盘。 当输入的密码与存储在存储器
[单片机]
基于<font color='red'>51单片机</font>对电子储物柜系统的设计
51单片机 printf函数 调试程序
主要分三个部分(1)51单片机程序部分;(2)keil工具部分;(3)为何printf输出为串口。 (1)51单片机程序部分 #include stdio.h #include reg51.h void InitUART(void)//使用定时器1作为串口波特率发生器 { TH1 = 0xF3; //晶振12mhz 波特率串口上设为2400才不显示乱码代码是4800 TL1 = TH1; TMOD |= 0x20; //定时器1方式2 SCON = 0x50; //串口接收使能 ES = 1; //串口中断使能 TR1 = 1; //定时器1使能 TI = 1; //发送中断
[单片机]
单片机动态数码管显示DS18B20测温显示程序
动态数码管显示DS18B20测温显示,折腾好几天了,终于搞定了,开始要么不能正常显示温度,要么乱跳动。究其原因是DS18B20读写的时序太严格了,程序中动态数码管显示需要开定时中断扫描显示,折腾多天的问题就是这个定时中断打断了正常的读写时序。 单片机源程序如下: /********* 测试DS18B20测温数码管动态显示 **********/ #include STC90C52.h #include ds18b20.h #define uchar unsigned char #define uint unsigned int #define LedDuan P0 /*定义数码管段码的控制脚*/ #define
[单片机]
单片机动态数码管<font color='red'>显示</font>DS18B20测温<font color='red'>显示</font>程序
51单片机寄存器配置小技巧
整型数据转换二进制数据的技巧知识点: 该技巧比较适合应用在51单片机寄存器的配置方面;减少了我们的计算量。 思路—— 我们比较习惯直接的整型数据;当我们需要配置寄存器,这时能不能直接利用该数据作为我们配置寄存器的数据呢?这过程需要将数据转换,例如将一个int 型 11110111 转换成 0xf7 该如何做到呢? 此时可以利用到##在C语言中的粘合作用,具体百度。 一, #define Bin(n) LongToBin(0x##n##l) //注意该处l是L的小写,而不是1。 此时使用时11110111则变为十六进制的0x11110111 而在此之前应先定义LongToBin(n) 二, #d
[单片机]
<font color='red'>51单片机</font>寄存器配置小技巧
C51单片机学习——8×8LED点阵屏学习笔记
1.8×8LED点阵屏电路图 8×8LED点阵屏由8行8列共64个LED灯组成。 通过控制其中部分LED灯亮可以组成图形或者数字,和数码管类似。 点阵分为共阳极和共阴极,行控制线接的LED阳极的点阵称为共阳极点阵,行控制线接的LED阴极的点阵称为共阴极点阵。 如何点亮LED灯:正极给高电平,负极给低电平 2.74HC595芯片 芯片查询链接 管脚说明: 3.点阵模块电路图 4.开发板1602液晶接口电路原理图 5.实践编程 ①显示一个点 参考程序: #include sbit DIO = P3^4; sbit SCK = P3^5; sbit RCK = P3^6; void mian()
[单片机]
C<font color='red'>51单片机</font>学习——8×8LED点阵屏学习笔记
解析如何选择LED显示屏“封装器件”
  如何选择如何选择 LED显示屏 封装器件呢?一般认为显示屏有以下五大关键性能指标与LED品质参数息息相关:亮度与视角、均匀性与清晰度、像素失控率、寿命、能耗与能效。   如何选择LED显示屏封装器件看亮度与视角   ·显示屏亮度主要取决于LED发光强度和LED密度   ·显示屏视角应解决光通量浪费问题   显示屏亮度主要取决于LED的发光强度和LED密度。近几年LED在衬底、外延、芯片及封装等方面的新技术层出不穷,尤其是氧化铟锡(ITO)电流扩展层技术及工艺的稳定与成熟,使LED的发光强度有了大幅提高。目前,国际一流品牌小功率LED在水平视角为110度、垂直视角为50度的情况下,绿管的发光强度已高达4000mcd,红
[电源管理]
51单片机C语言学习 6
第六课 变量   上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:       数据类型   变量名表   在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。   而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一
[单片机]
51单片机设计方案TOP10(九)
基于51单片机的光功率计的设计    摘要: 通过光电传感器将待测光信号变化转变为模拟信号,对模拟信号进行AD处理分析得到光信号的参数特性并在51单片机上通过串口通讯输出。    1 背景概述   1.1 光功率定义   光功率是光在单位时间内所做的功。光功率常用单位是毫瓦(mW)和分贝(dB),其中两者关系为1mW=0dB,而小于1mW的分贝为负值。例如,在光纤收发器或交换机说明书中,有其产品的发光和接收光功率,通常发光小于0dB。   接收端所能够接收的最小光功率称为灵敏度,能接收的最大光功率减去灵敏度的值称为动态范围,发光功率减去接收灵敏度是允许光纤损耗值。    1.2 使用分贝做单位主要有两个好处   (
[模拟电子]
<font color='red'>51单片机</font>设计方案TOP10(九)
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved