基于51单片机的电子钟的设计

发布者:yuehui最新更新时间:2015-10-10 来源: eefocus关键字:51单片机  电子钟 手机看文章 扫描二维码
随时随地手机看文章
//本程序为2005带单片机课程设计时所写,并有相关的硬件电路板

//本程序在硬件上测试通过
//晶振为11.0592MHZ
//程序中用单片机的P1口的I/O引脚做按键
//用四位一体的共阴数码管显示
org 0000h
              ljmp start
          ORG           001BH         ;INT T1 入口地址
              lJMP          INT_T1
         ORG           0080H
start:
              MOV           SP,#60H
              mov           30h,#0
              mov           31h,#0
              mov           32h,#0
              mov           33h,#0
                  mov           34h,#0
                  mov           35h,#0
                  mov           36h,#0
                  mov           37h,#0
              MOV           R3,#0H                ;时
              MOV           R2,#0H                ;分
              mov           r1,#0h                ;秒
              MOV           R6,#0H                ;标志
              mov           r7,#0h                ;标志
              MOV           38h,#0H                ;标志
              mov           39h,#0h                ;标志
              MOV           TMOD,#10H
              MOV           TL1,#00H             ;50 mS 的时间常数
              MOV           TH1,#04CH
              MOV           R0,#10
              mov           r4,#2
              setb p2.7
              SETB          TR1
              SETB          ET1
              SETB          EA                    ;允许中断
loop:
              lcall scankey
              cjne          r7,#0ffh,wait1
              lcall display2
              sjmp loop
        wait1:
              CJNE          R6,#0FFH,wait
              LCALL         DISPLAY1
                 MOV 34H,30H
                 MOV 35H,31H
                 MOV 36H,32H
                 MOV 37H,33H
              sjmp loop
        wait:
              lcall display
              SJMP          loop

        INT_T1:                               ;INT_T1中断服务子程序
              PUSH          DPH                   ;保护现场
              PUSH          DPL
              PUSH          ACC
              PUSH          PSW
              CLR           TR1
              MOV           TL1,#00H              ;50mS 定时常数
              MOV           TH1,#4CH
              SETB          TR1
              DJNZ           R4,EXIT1
              MOV           R4,#2
              mov a,30h
              CJNE          a,#09h,s0
              MOV           30h,#0
              mov a,31h
              CJNE          a,#9H,s1
             MOV           31h,#0H
             mov a,32h
             CJNE          a,#9H,s2
             MOV           32h,#0H
             mov a,33h
             CJNE          a,#9H,s3
             MOV           33h,#0H
        s3:
           mov a,33h
           add a,#1
           mov 33h,a
        s2:
           mov a,32h
           add a,#1
           mov 32h,a
        s1:
           mov a,31H
           add a,#1
           mov 31H,a
        s0:
           mov a,30H
           add a,#1
           mov 30H,a
              DJNZ          R0,EXIT1               ;判断毫秒=0
              MOV           R0,#10                ;DELAY 1 SECOND
              cpl p2.7
                     mov a,38h
                   cjne a,#0ffh,next1
                      ljmp hour1
                  next1:
                         mov a,39h
                       cjne a,#0ffh,next2
                       ljmp minute1
             next2:         CJNE          R1,#59H,SECOND        ;判断秒=59
              MOV           R1,#99H
minute1:CJNE          R2,#59H,MINUTE        ;判断分=59
              MOV           R2,#99H
        hour1:CJNE          R3,#23H,HOUR          ;判断时=23
              MOV           R3,#99H
HOUR:
              MOV           A,R3
              ADD           A,#1                  ;时加1
              DA            A
              MOV           R3,A
               mov a,38h
               cjne a,#00,exit1
MINUTE:
              MOV           A,R2
              ADD           A,#1                  ;分加1
              DA            A
              MOV           R2,A
              mov a,39h
              cjne a,#00,exit1
SECOND:
              MOV           A,R1
              ADD           A,#1                  ;秒加1
              DA            A
              MOV           R1,A
         EXIT1:
               mov 38h,#0h
               mov 39h,#0h
              POP           PSW                   ;恢复现场
              POP           ACC
              POP           DPL
              POP           DPH
              RETI                          ;中断返回
DISPLAY:
              MOV           A,R3
              ANL           A,#0FH
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              ;MOV           P2,#0fbh
                  setb p2.0
              clr p2.2
              setb p2.1
              setb p2.3
              lcall delay
              MOV           A,R3
              SWAP          A
              ANL           A,#0FH
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              setb p2.0
              clr p2.3
              setb p2.2
              setb p2.1
              ;MOV           P2,#0f7h
              lcall delay
              MOV           A,R2
              ANL           A,#0fH
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              setb p2.1
              clr p2.0
              setb p2.2
              setb p2.3
              ;MOV           P2,#0feh
              lcall delay
              MOV           A,R2
              SWAP          A
              ANL           A,#0FH
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              setb p2.0
              clr p2.1
              setb p2.2
              setb p2.3
              ;MOV           P2,#0fdh
              lcall delay
            RET
display1:
              MOV           A,30h
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV           P2,#0feh
              lcall delay
              MOV           A,31h
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV          P2,#0fdh
              lcall delay
              MOV           A,32H
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV           P2,#0fbh
              lcall delay
              MOV           A,33H
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV           P2,#0f7h
              lcall delay
           RET

display2:
              MOV           A,34h
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV           P2,#0feh
              lcall delay
              MOV           A,35h
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV          P2,#0fdh
              lcall delay
              MOV           A,36H
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV           P2,#0fbh
              lcall delay
              MOV           A,37H
              mov dptr,#ledseg
              movc a,@a+dptr
              MOV           P0,A
              MOV           P2,#0f7h
              lcall delay
           RET
delay:                                ;延时子程序
              PUSH          0                     ;保存现场
              PUSH          1
              MOV           0,#1H
DELAY1: MOV           1,#0FH
              DJNZ          1,$
              DJNZ          0,DELAY1
              POP           1                     ;恢复现场
              POP           0
              RET
scankey:
              setb p1.0
              jb         p1.0,p11
              lcall delay
              jb         p1.0,p11
              mov r6,#0ffh
              mov r7,#0h
              mov           30h,#0
              mov           31h,#0
              mov           32h,#0
              mov           33h,#0
              SJMP loop1
           p11:
               setb p1.1
               jb         p1.1,P12
               lcall delay
               jb         p1.1,p12
               mov r6,#0h
               mov r7,#0h
               sjmp loop1
           p12:
              SETB P1.2
              JB P1.2,p13
              lcall delay
              jb p1.2,p13
              mov r7,#0ffh
              sjmp loop1
          p13:
              setb p1.3
              jb p1.3,p14
              lcall delay
              jb p1.3,p14
               mov 38h,#0ffh
              sjmp loop1
         p14:
              setb p1.4
              jb p1.4,loop1
              lcall delay
              jb p1.4,loop1
              mov 39h,#0ffh
              sjmp loop1
         loop1:
              ret
LEDSEG: DB           3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
              DB           7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
              DB           6DH,02H,08H,00H,59H,0FH,76H         
         end

关键字:51单片机  电子钟 引用地址:基于51单片机的电子钟的设计

上一篇:基于51单片机的音乐采灯程序
下一篇:51单片机的串口收发C51程序

推荐阅读最新更新时间:2024-03-16 14:34

51单片机做的温湿度测量仪
本人去年用51单片机做的温湿度传感器模块,有实物,有程序,供大家分享。 该1602液晶的D0~D7数据口连接单片机的P17~P10口,所以程序里的指令和数据都是逆向输入的。 程序和电路图下载: http://www.51hei.com/f/温湿度传感器+1602原理图.rar #include reg52.h #include intrins.h #include math.h #define uchar unsigned char #define uint unsigned int #define noACK 0 #define ACK 1 #define STATUS_REG_W 0x06 #define STA
[单片机]
<font color='red'>51单片机</font>做的温湿度测量仪
51单片机 | 实现SMC1602液晶屏显示实例
LCD1602 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1602的意思是每行显示16个字符,一共可以显示两行。如果是12232液晶(图形型液晶)则表示由122列32行组成,即共有122*32个点 p.s.注意使用温度,通常液晶的工作范围为0~+55℃,存储温度范围为-22~+60℃。 - - - - - - - - - - - - - - - - - - - - - -
[单片机]
<font color='red'>51单片机</font> | 实现SMC1602液晶屏显示实例
51单片机-代码文件和测试
创建好“infrared.c”和“infrared.h”文件。 1.infrared.c的代码 #include reg52.h #include infrared.h unsigned char irflag = 0; //红外接收标志,收到一帧正确数据后置1 unsigned char ircode ; //红外代码接收缓冲区 /* 初始化红外接收功能 */ void InitInfrared() { IR_INPUT = 1; //确保红外接收引脚被释放 TMOD &= 0x0F; //清零T1的控制位 TMOD |= 0x10; //配置T1为模式1 TR1 = 0; //停止T
[单片机]
<font color='red'>51单片机</font>-代码文件和测试
基于51单片机和加速度传感器在人体坐姿的中的应用
本文把加速度传感器作为检测的模块,一方面可用来防止坐姿的不当,提醒本人注意坐姿,另一方面可用来做运动的测量装置如(计步器)(灯光调节器)(音乐调节器)。可把它作为一个运动检测的扩展平台,故其具有广阔的应用前景。   坐姿纠正系统   本设计主要是完成对颈部、背部、腰部以及腿部的测量。首先是静止状态下颈部和背部的检测。有关数据表明:人体在正常情况下,当脊柱的倾斜度偏离正常生理弯曲大于15度,时间达到40~50秒,就有可能形成不良姿势习惯。这时利用置于颈部的加速度传感器给出的倾斜度数据进行报警提醒,对于初始的人体正常生理弯曲,将设定一个固定的门限值,以针对不同的对象,来得到最佳的报警提示。其次是运动状态下时腰部和腿部的检测
[单片机]
基于<font color='red'>51单片机</font>和加速度传感器在人体坐姿的中的应用
51单片机入门之静态数码管
LED数码管是单片机外围接口设备中常用的显示设备,有七段管和米字管两种,实验室中常用的是七段管。其工作方式有两种:共阴极和共阳极。所谓共阴极是把LED的com端都接地,而共阳极就是把com端都接高电平。其驱动显示方式也有两种:静态显示和动态显示。 静态显示中每个数码管占用单片机的一个八位口I/O口,工作时点亮的段常亮。于该种方式而言,硬件电路简单,编程简单,但是浪费单片机的I/O口。下面简单演示一下该种驱动方式。 P2口接一个数码管,数码管显示的数字每秒钟自动加一,加到9后清0,一直循环,本实验中数码管采用共阴极接法。 实验原理图如下: 实验程序如下: view plain copy #include #def
[单片机]
<font color='red'>51单片机</font>入门之静态数码管
51单片机在锅炉水处理控制中的应用
0 引 言 自然水中通常含有钙镁等离子,俗称硬水。在锅炉用水中需要去除水中的钙镁离子而形成软水以防止锅炉结垢。在生产中锅炉水的软化处理是一项重要的安全指标,所以,对于锅炉水处理的技术要求愈来愈高。单片机以其较高的灵活性和稳定性广泛应用在自动控制领域。本文所设计的锅炉水处理控制装置,由高低水位控制进水阀开关,选用单片机为核心,C语言编程实现循环时间电路控制。该装置已成功应用于成都富华水处理公司。 1 软水生产工艺过程及对自控系统的要求 1.1 生产工艺过程 软化水设备的工作原理是基于阳离子交换原理。水由交换柱上流下,与交换树脂中的盐离子充分接触达到把原水中的杂质、易结垢的重金属阳离子去除掉。其生产工艺大致分为下列几步:①条件
[单片机]
<font color='red'>51单片机</font>在锅炉水处理控制中的应用
8051单片机(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
#include STC89C5xRC.H int main() { char buf; TMOD = 0x21; //设定timer1的工作模式 SCON = 0x50; //设置串行通信格式 TH1 = 0xE6; //设定timer1的初始值 TL1 = 0xE6; TR1 = 1; //开启timer1 while(1) { if(RI == 1) { //如果收到数据 buf = SBUF; RI = 0; SBUF = buf;//将收到的数据发回去 while(TI == 0); //等待数据发送完毕 TI = 0;
[单片机]
80<font color='red'>51单片机</font>(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
怎样研发一个以80C51单片机为核心的压力测量控制系统?
1 引言 目前我国发展煤炭生产机械化发展迅速。综采设备的应用,是提高效率、改善安全状况的措施。 影响开机率的一个主要因素是支架对工作面的顶板控制的好坏,因此,对综采工作面进行矿压监测与控制是很有必要的。要做到这一点,首先需要对井下工作面的液压支架的实际工作状况进行监测,通过对检测数据处理、分析,评定其效果,并采取相应措施,以提高开机率、提高产量。本文以监测综采液压支架的压力为研究内容,开发了一套基于单片机的压力测量控制系统。 2 压力测量控制系统功能设计 压力测量控制系统用于监测支架压力, 每台测量控制系统配有四只传感器, 可分别通过高压油管连接支架的立柱、平衡千斤顶, 前探梁千斤顶的油压腔。压力测量控制系统接收到通讯测量控制
[单片机]
怎样研发一个以80C<font color='red'>51单片机</font>为核心的压力测量控制系统?
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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