学林杯第二届单片机征文大赛公开评奖稿件 深圳学林电子www.51c51.com 版权所有 转载注明出处   请不要忘了:现在为你喜欢的稿件投票!
千元大奖1名:XL2000实验仪  一等奖1名:xl600实验仪  优秀奖:4名:ep51编程器全套散件  参与奖 :5名 ep51编程器pcb
作品1:征文-我是怎样开始学习电子的 山西省大同市 作品6:多功能自行车测速仪  北京大学  崔健
作品2:数字温度计的设计  杭州电子科技大学 陈智杰 作品7:带闹钟智能电子钟 深圳市天安数码城 谢玉平 
作品3:如何使自制的单片机电子钟走时精准 作者 舒新生 作品8:电话回拨服务告知装置 武汉市桥口区 詹显德
作品4:宽带数控放大器 陕西省西安通信学院 韩宏伟 作品9:单片机应用 之摩斯密码电子锁 广东省顺德  吴志光
作品5:一些事,一些情 韶关市 :冯敬锋 作品10:基于aduc842瞬态波形存储器 华中师范大学物理学院 杨程泽
作品11:基于AT89S52单片机的毫欧表电路设计 中南林业科技大学 涉外学院 郭海  

 

返回主页 给我留言 单片机教学 单片机提高 音响技术 品质技术 技术资料 软件下载 学液晶 产品介绍 如何购买

谢玉平  深圳市福田区车公庙天安数码城

带闹钟智能电子钟

石老师:

你好!我在068月开始学习单片机,是一个单片机初学者。

我在一次上网时偶然发现了51单片机学习网,在51单片机学习网网站有好多对我有帮助的知识。我在里面学到了好多东西。看到你们的征文我感到特别的高兴,也祝你们越办越好,多搞一些活动。本人希望可以得到你的指点和帮助,如果可以通过征文提高我的水平,得到一个实验箱来做实验我会非常开心。

这个带闹钟智能电子钟,我花了将近两周的时间,终于成功的完成。其中的也是通过一个电子钟改进而来的。我已经调试通过并用了二个多月,没有出现问题。

电路特点

以一片AT89C2051单片机为主体,其显示数据从P3.0-P3.7口输出,P1口输出对应的六位位选信号。电子钟程序设计时使用了T0作为计时,T1为调整时显示用。只要对程序稍加更改,可以很容易的实现8路定时功能。

电子钟只用一个轻触式按键来完成所有的设置。为了使闹钟音量足够大,采用了PNP型三极管8550来驱动蜂鸣器,驱动电阻用1K的,蜂鸣器为5V小型蜂鸣器。若用NPN来驱动蜂鸣器音量要小一点。LED数码管位驱动用8850,电子钟采用自制的3A开关电源供电。如图1。供电效率高,可和7-24V的直流电源直接连接,电子钟工作电流20MA左右。

                1  LM2576做的3A电源

电子钟功能

一、时间显示:

六位LED数码管显示时间,24小时制分别显示时时:分分:秒秒,最小单位为秒。精确度5/月(与晶振有关,可加电容调整)。

.走时调整:

长按按键05秒钟以上,可以进入闹钟和时间设置状态,按“闹钟分”、“闹钟时”、“走时分”、“走时时”的顺序进行设置。

设置方法为:

1、  走时和闹钟调整:

走时状态,长按按键05秒钟以上后松开按键,“闹钟分”以03秒的速度闪烁显示,再次按下按键不要松开,“闹钟分”会快速的从0059之间变化,从而达到快速设定时间的目的。当显示到需要的时间时松开按键,会自动进入到设置“闹钟时”的状态,可以同样的方法设置“闹钟时”。当松开按键后此时有两种选择,一是长按按键退出闹钟设置状态,返回到正常走时;二是短按一下按键进入继续设置时间的状态。 设置方法相同。

注意:为了对只要设置闹钟时不影响电子钟的走时精确度,在设置闹钟的时候,秒钟位走时不停止,正常显示,但对闹钟设置无任何影响。在进入走时设置后自动把秒设置为00秒,以确保可以在设置后从00秒开始走时,有利于提高我们调时的准确性。

2、  闹钟开关设置:只要短按一下按键即可开启或关闭闹钟。

走时状态,短按一下按键可以查询闹钟时间,约显示两秒钟后,自动设置闹钟开关。其中00为闹钟关闭状态、01为闹钟开启状态。设置完毕自动退出。

注意:如果原来闹钟为开启状态则关闭闹钟,反之,开启闹钟。第一次通电工作时默认为闹钟开启。

硬件电路实现

电路如图2所示,因有秒钟位,末设置秒点闪烁,如果要秒位可在VCC与数码管的DP之间接一个1K电阻即可达到1200显示的效果。

                                  2  电子钟原理图

电路所用的元件较少,根据实际情况可以调整R8的阻值来改变数码管亮度。

本人所做的实物如图3、图4所示。

3         实物图

4        实物图

源程序

源程序如下:      ORG       0000H              ;程序开始入口

                  LJMP      START

                  ORG       0003H              ;外中断0中断程序入口

                  RETI

                  ORG       000BH              ;定时器T0中断程序入口

                  LJMP      INTT0              ;跳至INTTO执行

          ORG       0013H              ;外中断1中断程序入口

          RETI

          ORG       001BH              ;定时器T1中断程序入口

          LJMP      INTT1

          ORG       0023H              ;串行中断程序入口地址

                  RETI

;---------------主程序----------------------;

             START:MOV     R0,#70H             ;70R0,70-7FH显示内存

                   MOV     R7,#0FH

         CLEARDISP:MOV     @R0,#00H            ;0R0中的数为地址的内存中存放(70H)

                   INC     R0

                   DJNZ    R7,CLEARDISP

                   MOV     78H,#2              ;默认时间为12:00,闹钟5:00

                   MOV     79H,#1

                   MOV     74H,#2              ;防止上电时数码管显示00小时

                   MOV     75H,#1

                   MOV     66H,#1              ;中断退出时66H1,分、时计时单元数据移入显存标志

                   MOV     68H,#1              ;上电默认闹钟开状态

                   MOV     7DH,#6              ;闹钟时十位

                   MOV     7CH,#3

                   MOV     69H,#0

                   MOV     7AH,#0AH            ;放入"熄灭符"数据

                   MOV     TMOD,#11H           ;T0T116位定时器

                   MOV     TL0,#0B0H           ;50MS定时初值(T0计时用)

                   MOV     TH0,#3CH

                   SETB    EA                  ;总中断开放

                   SETB    ET0                 ;允许T0中断

                   SETB    TR0                 ;T0定时器开始计时

                   MOV     R4,#14H             ;1秒定时用初值(50MS×20

           START1:LCALL   DISPLAY             ;显示子程序

                   LCALL   BEEP                ;闹钟查询

                   JNB      P1.7,SETTIME        ;P1.7口为0时转时间调整程序

                   JMP     START1              ;P1.7口为1时跳回START1

;-----------------------时间闹钟调整系统--------------------------;

             NFLAG:MOV          A,68H           ;设置闹钟开关状态

                   CJNE         A,#1,BEE68

                   MOV          68H,#0

                   JMP          E6

             BEE68:MOV          68H,#1

                E6:MOV          66H,#8          ;中断退出66H不为1时分、时计时单元数据移入显存标志

                   MOV          72H,7BH

                   MOV          73H,7CH

                   MOV          74H,7DH

                   MOV          75H,7EH

                   LCALL        DDL

                   LCALL        DDL

                   MOV          72H,68H

                   MOV          73H,69H

                   MOV          74H,7AH

                   MOV          75H,7AH

                   LCALL        DDL

                   LCALL        DDL

                   MOV          66H,#1

                   LJMP       START1

           SETTIME:LCALL        DDL

                   JB             P1.7,NFLAG     ;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

                   MOV          TL1,#0B0H      ;T1闪烁定时初值

                   MOV          TH1,#3CH

                   MOV          R2,#06H        ;进入调时状态,赋闪烁定时初值

                   MOV          66H,#8         ;调闹钟时保持走时,关闭时钟显示数据

                   SETB         ET1            ;允许T1中断

                   SETB         TR1            ;开启定时器T1

              SET1:LCALL        DISPLAY        ;调用显示,防止键按下无显示

                   JNB          P1.7,SET1      ;P1.7口为0等待键释放

                   MOV       R5,#00H        ;清设置类型闪烁标志

             SETN1:INC         R5             ;闹钟分调整

              SET5:LCALL        DISPLAY

                   JB             P1.7,SET5

            SEETN1:LCALL        DDL            ;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

                   JB             P1.7,SET6      ;键释放查询,键释放自动转调时

                   MOV               R0,#7CH

                   LCALL      ADD1

                   MOV               A,R3

                   CLR          C

                   CJNE        A,#60H,HHN1

              HHN1:JC            SEETN1

                   LCALL      CLR0

                   JMP          SEETN1

              SET6:INC         R5             ;闹钟时调整

             SEET6:LCALL        DISPLAY

                   JB          P1.7,SEET6

           SEETNH1:LCALL        DDL

                   JB             P1.7,SETF

                   MOV          R0,#7EH

                   LCALL        ADD1

                   MOV          A,R3

                   CLR          C

                   CJNE        A,#24H,HOUU1

             HOUU1:JC           SEETNH1

                   LCALL      CLR0

                    JMP       SEETNH1

              SETF:LCALL        DISPLAY

                   JB             P1.7,SETF

                   LCALL        DDL

                   JNB          P1.7,SETOUT     ;短按调时,长按退出

                   CLR          ET0

                   CLR          TR0

                   MOV       70H,#00H        ;设定后的时间从00秒开始走时

                   MOV       71H,#00H

                   INC         R5

              SET3:LCALL        DISPLAY

                   JB             P1.7,SET3

             SETMM:LCALL        DDL

                   JB             P1.7,SET4

                   MOV               R0,#77H

                   LCALL      ADD1

                   MOV               A,R3

                   CLR          C

                   CJNE        A,#60H,MMH

               MMH:JC          SETMM

                   LCALL      CLR0

                   AJMP         SETMM

              SET4:INC          R5

             SEET4:LCALL        DISPLAY

                   JB          P1.7,SEET4

             SETHH:LCALL        DDL

                   JB             P1.7,SETOUT1

                   MOV          R0,#79H

                   LCALL        ADD1

                   MOV          A,R3

                   CLR          C

                   CJNE        A,#24H,HOUU

              HOUU:JC           SETHH

                   LCALL      CLR0

                   AJMP       SETHH

           SETOUT1:SETB     ET0

                   SETB       TR0             ;计时开始

            SETOUT:MOV     R5,#00H         ;清设置类型闪烁标志

                   CLR        TR1             ;关闭T1

                   CLR        ET1             ;T1中断

                   MOV          66H,#1

           SETOUT2:LCALL        DISPLAY

                   JNB          P1.7,SETOUT2

                   LJMP        START1

;--------------------------延时1秒钟-----------------------;

               DDL:MOV          18H,#36

              DDL0:MOV          17H,#239

              DDL1:LCALL        DISPLAY

                   DJNZ         17H,DDL1

                   DJNZ         18H,DDL0

                   RET

;----------------------------T0中断程序------------------------;

            INTT0: PUSH  ACC                   ;打包

                   PUSH  PSW

                   CLR   ET0

                   CLR   TR0

                   MOV   A,#0B7H

                   ADD   A,TL0

                   MOV   TL0,A

                   MOV   A,#3CH

                   ADDC  A,TH0

                   MOV   TH0,A

                   SETB  TR0

                   DJNZ  R4, OUTT0             ;20次中断未到中断退出

           ADDSS:  MOV R4,#14H               ;20次中断到(1秒)重赋初值

                   MOV         R0,#71H               ;指向秒计时单元(70-71H

                   ACALL ADD1                  ;调用加1程序(加1秒操作)

                   MOV   A,R3                  ;秒数据放入AR32位十进制数组合)

                   CLR   C                     ;清进位标志

                   CJNE  A,#60H,ADDMM

           ADDMM:  JC