基于c51单片机8位数码管显示电子时钟程序

发布者:码农创想家最新更新时间:2017-12-26 来源: eefocus关键字:c51单片机  8位数码管显示  电子时钟 手机看文章 扫描二维码
随时随地手机看文章

    /*
8位数码管显示  时间格式    05—50—00  标示05点50分00秒
S1 用于小时加1操作
S2 用于小时减1操作
S3 用于分钟加1操作
S4 用于分钟减1操作
*/

    #include
sbit KEY1=P3^0;        //定义端口参数
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED=P1^2;        //定义指示灯参数

    
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //共阴极数码管0—9
unsigned char StrTab[8];        //定义缓冲区
unsigned char minute=19,hour=23,second;        //定义并初始化为 12:30:00

    
void delay(unsigned int cnt)
{
        while(--cnt);
}

    /******************************************************************/
/*                                显示处理函数                                      */
/******************************************************************/
void Displaypro(void)
{

            StrTab[0]=tab[hour/10];        //显示小时
        StrTab[1]=tab[hour%10];
        StrTab[2]=0x40;        //显示"-"
        StrTab[3]=tab[minute/10];        //显示分钟

            StrTab[4]=tab[minute%10];
        StrTab[5]=0x40;        //显示"-"
        StrTab[6]=tab[second/10];        //显示秒

            StrTab[7]=tab[second%10];
}

    main()
{
        TMOD |=0x01;        //定时器0  10ms  inM  crystal  用于计时
        TH0=0xd8;          //初值
        TL0=0xf0;
        ET0=1;
        TR0=1;

            TMOD |=0x10;        //定时器1用于动态扫描
        TH1=0xF8;        //初值
        TL1=0xf0;
        ET1=1;
        TR1=1;
        EA =1;
        Displaypro();        //调用显示处理函数

            while(1)
        {
                if(!KEY1)        //按键1去抖以及动作
                {
                        delay(10000);
                        if(!KEY1)
                        {          
                                hour++;

                                    if(hour==24)

                                            hour=0;        //正常时间 小时 加1
                                Displaypro();
                        }
                }

                    if(!KEY2)        //按键2去抖以及动作
                {
                        delay(10000);
                        if(!KEY2)
                        {
                                hour--;

                                    if(hour==255)

                                            hour=23;        //正常时间 小时减1
                                Displaypro();
                        }
                }
                if(!KEY3)        //按键去抖以及动作
                {
                        delay(10000);
                        if(!KEY3)
                        {
                                minute++;

                                    if(minute==60)

                                            minute=0;        //分加1
                                Displaypro();
                        }
                }      
                if(!KEY4)        //按键去抖以及动作
                {
                        delay(10000);
                        if(!KEY4)
                        {
                                minute--;

                                    if(minute==255)

                                            minute=59;        //分减1
                                Displaypro();
                        }
                }
        }
}

    
/******************************************************************/
/*                          定时器1中断                                  */
/******************************************************************/
void time1_isr(void) interrupt 3 using 0        //定时器1用来动态扫描
{
        statIC unsigned char num;
        TH1=0xF8;        //重入初值
        TL1=0xf0;

            switch (num)

            {
                case 0:P2=0;P0=StrTab[num];break;  //分别调用缓冲区的值进行扫描
                case 1:P2=1;P0=StrTab[num];break;
                case 2:P2=2;P0=StrTab[num];break;
                case 3:P2=3;P0=StrTab[num];break;
                case 4:P2=4;P0=StrTab[num];break;
                case 5:P2=5;P0=StrTab[num];break;
                case 6:P2=6;P0=StrTab[num];break;
                case 7:P2=7;P0=StrTab[num];break;
                default:break;
        }
        num++;        //扫描8次,使用8个数码管
        if(num==8)
                num=0;
}

    
/******************************************************************/
/*                              定时器0中断                                */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
        static unsigned char count;        //定义内部局部变量

            TH0=0xd8;        //重新赋值
        TL0=0xf0;
        count++;
        switch (count)
        {
                case 0:
                case 20:
                case 40:
                case 60:
                case 80:Displaypro();break;        //隔一定时间调用显示处理
                case 50:P1=~P1;break;        //半秒 LED 闪烁
                default:break;
        }

            if (count==100)
        {
                count=0;
                second++;        //秒加1
                if(second==60)
                {
                        second=0;
                        minute++;        //分加1
                        if(minute==60)
                        {
                                minute=0;
                                hour++;        //时加1
                                if(hour==24)
                                        hour=0;
                        }  
                }
        } 
}


关键字:c51单片机  8位数码管显示  电子时钟 引用地址:基于c51单片机8位数码管显示电子时钟程序

上一篇:采用51单片机的共阳数码管流动显示数据实现
下一篇:基于51单片机的数字钟程序

推荐阅读最新更新时间:2024-03-16 15:50

基于AT89C51单片机的无级调光系统的实现
在生活中有很多可以自主调节挡位的设备,比如台灯的亮度、玩具车的速度、风扇的转速等等。它们调节档位的方式各有不同,有些是改变功率,有些是改变动力,但都离不开对激励或输入信号的改变,我们这里简单介绍一下对LED灯的无级调光的实现,可以自己动手做一个可变亮度的小灯。 一、所需器材: AT89C51×1、100Ω定值电阻×1、LED×1、示波器×1、滑动变阻器×1、直流电压表×1、ADC0808×1、500kHz时钟信号×1、+5V直流电源×2。 主要器材介绍:(我们这里只做简单介绍,各接口定义可自行查阅资料——反正这里也用不着) (1)AT89C51:AT89C51是一种带4K字节FLASH存储器(FPEROM—Flas
[单片机]
基于AT89<font color='red'>C51单片机</font>的无级调光系统的实现
通过51单片机实现电子时钟功能并通过LCD1602显示
通过51单片机实现时钟功能并通过LCD1602显示.rar工程文件 点击下载 实验截图如下: 实验中涉及的硬件:51单片机,LCD1602模块,EEPROM AT24C02型号一个,按键3个,蜂鸣器一个 其中LCD1602模块引脚定义如下: EEPROM引脚连接情况如下: 软件环境:uVision4(Keil_C51_V9.00( 点击下载 )).rar,Win7Sp1X64 源代码如下: **************************************************************** author:lee yang data:2011/11/12
[单片机]
C51单片机学习手记之1:一盏闪烁
最近开始学习C51单片机,可谓磕磕绊绊,因为本人比较笨笨啦...(听听Michael Jackson的《Heal The World》就坚持下来了),不知道对大家是否有用... 闲言碎语不要讲,下面我就来说说这迈出的第一步,我从2010年才接触到单片机,想想比别人晚了10多年,不过没关系,只要有心学习,从0-1很难,但从1到100、1000、...可能就没有那么麻烦了。主要要自学单片机原理、电子线路、汇编语言,C语言,如果你刚好学过,那就恭喜啦。 本文旨在介绍单片机入门的基础知识,为和我一样的新手提供一个交流的平台。仿真所使用单片机为 ATMEL公司的AT89C52,软件为PROTEUS和KEIL;只提供原理图和KEIL环境
[单片机]
<font color='red'>C51单片机</font>学习手记之1:一盏闪烁
全功能数字电子钟(C51单片机应用开发)
一、设计目的:   通过单片机应用产品的设计与调试过程,巩固课程所学理论知识,初步了解单片机应用系统设计与调试的方法。 二、设计要求: 设计一个以AT89S51单片机为核心的数字电子钟控制器,实现电子钟的时间、日期交替显示、闹钟功能,并可通过按钮开关或键盘切换显示内容、调整参数、设置闹钟,在单片机实验板上模拟调试实现控制器的功能。具体设计要求如下: 1.开机自检,检查相关接口及数码管显示器、指示灯、蜂鸣器等外设是否正常。 2.8位数码管显示器平常以一定的时间间隔、合适的格式显示时间和日期信息,时间显示时、分、秒;日期显示年(2000~2099)、月、日;设置闹钟功能时显示时、分、开/关状态。 3.可通过按键设定时间、日期
[单片机]
全功能数字电子钟(<font color='red'>C51单片机</font>应用开发)
stc51单片机做的GPS定位及轨迹记录器
基于C3-370C的GPS定位及轨迹记录仪! 在51hei买了C3-370C的GPS,准备做GPS轨迹记录,因为我一直想在旅游的照片上加上坐标信息…… 开始用M48作控制MCU,结果写着写着,发现Flash空间不足,想换个M8或M88的,在常州还不好买,手上正好还有两块STC90C52,8K的,于是就换上C52了。 C52不带AD,那电池检测又成问题,于是从坏的万用表上拆下一个2904运放,做了个简单的电池电压检测。 现在整个设备的供电都由锂电池直接提供,配一块880mah的手机电池,可以用6小时左右; 我用24C64记录轨迹信息,包括日期时间、经纬度在内的一组信息,可存储512条,按1min/条,可存8小时。 数据通过串口传给上
[单片机]
st<font color='red'>c51单片机</font>做的GPS定位及轨迹记录器
如何在Linux下进行stc51单片机的开发
第一次接触 单片机 ,自然选择了简单的51单片机。然而我的操作系统是 Linux 。在 Windows 下上手51似乎很容易。但是 Linux 上搭建 51 开发环境不是很顺。 那么谈谈 Linux 我如何搭建 STC89C52RC 的开发环境吧。 (一) 选择自己喜好的 代码编辑器 即可。vim , emacs , gedit 等都可以。 (二) 安装编译器。一般选择 sdcc 。一般可从发行版的包管理器中直接安装。 如Arch中:   $ sudo pacman -S sdcc 如果不行,需要自行下载编译。 简单介绍使用sdcc: 假如当前目录有一个写好的源文件 main.c 。 使用如下简单方式即可编译。 $ s
[单片机]
基于89C51单片机的语音播报伏特表
  传统的伏特表在我们的日常生活及科学研究中起到了其独特的作用,但是在科学技术日新月异、集成芯片在日常生活中的应用越来越广泛的今天显得比较落伍:①它们的量程往往在出厂以前就限定好的,不能根据具体使用场合进行相应调整;②测量精度有限;③不能够将测量结果用语音播放出来。本文将介绍一种由单片机最小系统、模-数转换电路 、语音电路、LED显示电路组成的单片机式语音播报伏特表。    1、硬件设计   整个系统的组成可以分成四大部分:单片机、模-数转换电路、语音电路、LED显示电路。下面就主要的部分进行具体介绍。   1.1、单片机   目前流行的单片机很多,其中89C51自带有片内ROM和一定数量的RAM,一般不需要扩展片外的存储
[单片机]
基于89<font color='red'>C51单片机</font>的语音播报伏特表
基于89C51单片机、RAM和8251实现无线电台通信卡的设计
当今信息时代,人们需要多种多样的通信手段和设备,常见的不论是有线电话还是无线电台,都为模拟信道,适合传送模块话音信号。目前,通过公用电话网进行计算机通信的技术已经成熟。而无线电台特点是老式电台,在我国使用范围很广,拥有量很大,但其功能单一,不能适应当前数据通信的要求,如何对其进行技术改造,增加数据能信功能,就显得尤为必要。为此,研究设计了无线电台用智能数据通信卡(以下简称通信卡),通过该卡,可给以模拟方式作为话通信的无线电台增加数据通信功能,大大提高了老式电台的性价比。该卡体积小,成本低,可放置于电台内部。 1、通信卡的设计思想 从电台实际工作情况考虑,给电台增加数据通信功能后,应注意解决以下问题: ·不能影响原话音通信功能。
[单片机]
基于89<font color='red'>C51单片机</font>、RAM和8251实现无线电台通信卡的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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