基于51单片机的数字时钟

发布者:innovator8最新更新时间:2021-01-05 来源: 51hei关键字:51单片机  数字时钟 手机看文章 扫描二维码
随时随地手机看文章

#include

#define uchar unsigned char

#define uint unsigned int


sbit qingling=P1^0;       

sbit tiaofen=P1^1;               

sbit tiaoshi=P1^2;       

sbit sounder=P1^3;               


uint a,b;

uchar hour,minu,sec,   

      hour0,minu0,sec0,

          hour1,minu1,sec1;

          h1,h2,m1,m2,s1,s2,

          k,s;

          

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]=        {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


void keyscan();

void init();

void delay(int z);

void display(uchar,uchar,uchar);

void sounde();


         

void main()

{

        init();

        while(1)

        {                                 

                while(TR1)

                {

               

                        keyscan();                       

                        while(s==1)                               

                        {                                                                         

                                keyscan();                                                  

                                display(hour1,minu1,sec1);

                        }

                         display(hour0,minu0,sec0);               

                       

                        while(k)       

                        {

                                 display(hour,minu,sec);       

                        }

                    

                }

        }


}



void init()

{

        a=0;

        b=0;

        k=0;

        s=0;

        hour0=0;

        minu0=0;

        sec0=0;

        hour=0;

        minu=0;

        sec=0;

        hour1=0;

        minu1=0;

        sec1=0;


        TMOD=0x11;                                 

        TH0=(65536-5000)/256;

        TL0=(65536-5000)%256;

        TH1=(65536-50000)/256;

        TL1=(65536-50000)%256;

       

        EA=1;

        EX0=1;                 

        EX1=1;               

        ET0=1;

        ET1=1;

        IT0=1;                 

        IT1=1;


        PX0=1;

        PX1=1;

       

        TR0=0;                         

        TR1=1;                 

}



void timer0_int() interrupt 1       

{

        TH0=(65536-5000)/256;

        TL0=(65536-5000)%256;

        a++;

        if(a==2)

        {

                a=0;

                sec++;

                if(sec==100)

                        {

                                sec=0;               

                                minu++;

                                if(minu==60)

                                {

                                        minu=0;                       

                                        hour++;

                                        if(hour==60)         

                                        {

                                                hour=0;

                                        }

                                }

                        }

        }

       

}



void ex0_int() interrupt 0

{               

        k++;

        if(k==3)

        k=0;

        if(k==1)

        {

                TR0=~TR0;

                if(TR0==1)

                {                         

                        hour=0;

                        minu=0;

                        sec=0;               

                }

        }

        if(k==2)

        {

                TR0=~TR0;

        }         

}



void ex1_int() interrupt 2

{

        s++;

        if(s==3)

        s=0;

}



void timer1_int() interrupt 3                 

{

        TH1=(65536-50000)/256;

        TL1=(65536-50000)%256;

        if(s==2)

        {

                if(hour1==hour0 && minu0==minu1)

                sounde();

        }

        b++;

        if(b==20)

        {

                b=0;

                sec0++;

         if(sec0==60)

           {  

              sec0=0;

                minu0++;

              if(minu0==60)

               {

                   minu0=0;

                   hour0++;

                   if(hour0==24)

                         hour0=0;

                        

               }

[1] [2]
关键字:51单片机  数字时钟 引用地址:基于51单片机的数字时钟

上一篇:单片机通过ESP8266将温度数据上传到OneNET平台
下一篇:51单片机模拟串口源程序

推荐阅读最新更新时间:2024-11-13 09:43

常用的51单片机程序
51程序集 ;片内RAM初始化子程序 IBCLR:MOVA,R0 MOVR1,A CLRA IBC1:MOV@R1,A INCR1 DJNZR7,IBC1 RET ;片外RAM初始化子程序 EBCLR1:MOVA,ADDPL MOVDPL,A MOVA,ADDPH MOVDPH,A CLRC EBC11:MOVX@DPTR,A INCDPTR DJNZR7,EBC11 RET ;片外RAM初始化子程序(双字节个单元) EBCLR2:MOVA,ADDPL MOVDPL,A MOVA,ADDPH MOVDPH,A MOVA,R7 JZEBC21 INCR6 EBC21:CLRA MOVX@DPTR,A INCD
[单片机]
INT1 中断五位计数器 PROTEUS 和51单片机教程
程序源代码如下: /* INT1中断5位计数 */ #include reg51.h typedef unsigned char uint8; typedef unsigned int uint16; sbit K2 = P3^4; void delay(uint16 x) { uint16 i,j; for(i = x; i 0; i --) for(j = 114; j 0; j --); } code uint8 LED_CODE = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; code uint8 Scan_BITs =
[单片机]
INT1 中断五位计数器 PROTEUS 和<font color='red'>51单片机</font>教程
基于51单片机嵌入式系统仿真设计
本文介绍一种嵌入式系统仿真方法,通过一种特殊设计的指令集仿真器ISS将软件调试器软件Keil uVision2和硬件语言仿真器软件Modelsim连接起来,实现了软件和硬件的同步仿真。 缩略词解释: BFM:总线功能模块。在HDL硬件语言仿真中,BFM完成抽象描述数据和具体的时序信号之间的转换。 PLI:Verilog编程语言接口,是C语言模块和Verilog语言模块之间交换数据的接口定义。 TCL:字面意思是工具命令语言,是一种解释执行语言,流行EDA软件一般都集成有TCL。使用TCL用户可以编写控制EDA工具的脚本程序,实现工具操作自动化。 ISS:CPU指令集仿真器,可以执行CPU的机器码。 TFTP:简单文件传输协议,
[单片机]
基于<font color='red'>51单片机</font>嵌入式系统仿真设计
学习笔记之-51单片机中断
1.中断的概念 通俗的讲,中断就是cup正在工作的时候,突然外部来了某一请求,要求cpu转去处理请求的事件,当事情做完之后cup再回来继续它的工作。这一过程称为中断 。 单片机中断响应可以分为以下几个步骤: 1、停止主程序运行。当前指令执行完后立即终止现行程序的运行; 2、保护断点。把程序计数器PC 的当前值压入堆栈,保存终止的地址(即断点地址),以便从中断服务程序返回时能继续执行该程序; 3、寻找中断入口; 4、执行中断处理程序; 5、中断返回。执行完中断处理程序后,就从中断处返回到主程序,继续往下执行。 流程图如下:     中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点: 分时操作:CP
[单片机]
学习笔记之-<font color='red'>51单片机</font>中断
51单片机控制数码管动态显示程序
说明: 驱动四位一体数码管动态显示数字,可方便的移植到其它程序中。 例如:1、硬件改为三位一体或二位一体数码管,只需修改Display_Scan()函数COM个数。 2、本例中,采用了共阴数码管,如果用在共阳数码管,只需修改相应段码表。   本程序使用P0口作为段码数据发送端,P2.0-P2.3作为数码管扫描选通, 使用P0口时,因单片机内部没有上拉电阻,所以要外接上拉电阻(参考阻值470欧姆). // STC89C52RC // +---------------+ // | | // | | Digital Number // | | _______________________ // | | | __ __ __ __
[单片机]
基于51单片机的定时器程序设计
这个基于51单片机的定时器设计,使用共阴数码管显示,如果要换成共阳数码管只需要将程序内数组改为共阳数码管的数组,38译码器LSA,LSB,LSC分别接单片机的P2^2, P2^3,P2^4,蜂鸣器使用的是无源蜂鸣器,接单片机P1^5,三个低电平触发按键分别接的P3^1,P3^2,P3^3. sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit key0=P3^1; //定义P31口是k0 sbit key1=P3^0; //定义P33口是k1 sbit key2=P3^2; //定义P33口是k2 sbit beep=P1^5; 程序运行后,先进入设置模式,key0和key1分别设
[单片机]
基于<font color='red'>51单片机</font>的定时器程序设计
89C51单片机与TLC2543芯片的串行A/D驱动程序设计
串行A/D转换器转换后的结果是以串行方式输出,数字量以串行方式输出可简化系统的连线,缩小电路板的面积,节省系统的资源。下面以TLC2543为例,介绍串行A/D驱动程序的设计。 89C51单片机与TLC2543芯片的接口电路图如下图所示。TLC2543的3个控制输入端CS(的反)、I/OCLOCK、DATAINPUT和一个数据输出端DATAOUT分别与单片机的P1.4、Pl.l、P1.2和P1.3引脚相连,单片机采用的晶振频率为12MHz。 电路设计时,我们将TLC2543有两个基准电压输入REF+、REF-分别与电源(VCC)、GND相连,这样连接可保证数字输出的满度和零点,但在高精度的测量要求中,如果VCC的质量一般,应
[单片机]
89C<font color='red'>51单片机</font>与TLC2543芯片的串行A/D驱动程序设计
MCS51单片机采用什么样的抗干扰技术
普及型MCS-51系列单片机(如8031和8032)既然无复位指令,又没有集成WATCHDOS电路,那么普及型MCS-51单片机是采用什么样的抗干扰技术呢?如果没有外接硬件WATCHDOG电路,就必须采用软件抗干扰技术。常用的软件抗干扰技术有:软件陷阱、指令冗余、软件WATCHDOG等,它们的作用是在系统受干扰时能及时发现,再用软件的方法使系统复位。所谓软件复位就是用一系列指令来模仿复位操作,这就是MCS-51系列单片机所特有的软件复位技术。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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