找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5292|回复: 1
收起左侧

基于51单片机的定时闹钟装置设计 汇编语言源程序

[复制链接]
ID:553064 发表于 2019-11-22 21:18 | 显示全部楼层 |阅读模式
本帖最后由 哇哇哇哇哇w 于 2019-11-23 09:19 编辑

一主要功能1)能显示:时时—分分。
2)能够设定定时时间、修改定时时间。
3)定时时间到能发出提示声音。
4)提示声音发出后,若要用提示声音驱动某外围元件动作,可接在A1处
本次设计的系统电路图如下
0OA56{7GIDV1LR])~9FZJIO.png
使用了AT89C51作为控制芯片,连接外围电路组成最小系统。P1口接五个按钮(S1—5)作为控制键输入,外接4位数码管显示时间,另外P3.7附加蜂鸣器作为定时闹钟铃响使用,同时,若要使闹钟信号驱动其他外设元件,可以与蜂鸣器下三极管的发射极相接。按键分为设置当前时间,设置定时时间键,小时加键键,分钟加键,退出键。
  AT89C51是一个低电压,高性能CMOS8位单片机,片内含4KB的可反复擦写的Flash只读程序存储器ROM)128B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51为用户提供了许多高性价比应用场合,可灵活应用于各种控制领域。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
主要特性:
·与MCS-51 兼容
·4K字节可编程闪烁存储器
·寿命:1000写/擦循环
·数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128×8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
引脚使用说明:
VCC:供电电压。
GND:接地。
    P0口P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当
P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
管脚……备选功能
P3.0……RXD(串行输入口)
P3.1…… TXD(串行输出口)
P3.2……/INT0(外部中断0)
P3.3……/INT1(外部中断1)
P3.4……T0(记时器0外部输入)
P3.5……T1(记时器1外部输入)
P3.6……/WR(外部数据存储器写选通)
P3.7……/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
ST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度

全部程序清单
ORG 0000H
                  LJMP MAIN
                  ORG 000BH
                  LJMP TIME

          ;×××××主程序部分:×××××
                  ORG 0100H
                  MAIN:MOV SP,#50H
                  MOV 21H,#00H        ;分钟 BIN
                  MOV 22H,#00H        ;小时 BIN
                  MOV 23H,#01H
                  MOV 24H,#01H
                  MOV 25H,#00H
                  MOV 30H,#00H   
                  MOV 31H,#00H   
                  MOV 32H,#00H   
                  MOV 33H,#00H   
                  MOV 34H,#00H   
                  MOV 35H,#00H
                  MOV 36H,#01H
                  MOV 37H,#00H
                  MOV 38H,#01H
                  MOV 39H,#00H
                  MOV TMOD,#01H   ;16位计数器
                  MOV TH0,#03CH    ;赋计数初值
                  MOV TL0,#0B0H
                  MOV IE,#10000111B
                  SETB TR0             ;T0启动计数
              MOV R2,#14H
              MOV P2,#0FFH
            LOOP: LCALL TIMEPRO
                  LCALL  DISPLAY1
                  JB P1.1,M1           
                  LCALL  SETTIME   ;调用设定时间程序
                  LJMP  LOOP
            M1:JB P1.2,M2         
                  LCALL  SETATIME  ;调用设定时间程序
                  LJMP  LOOP
               M2:JB P1.4,M4            
                  LCALL  LOOKATIME  ;调用设定闹钟时间程序
           M4:LJMP LOOP
            DELAY:MOV R4,#030H          ;延时时间
            DL00:MOV R5,#0FFH
            DL11:MOV R6,#9H
            DL12:DJNZ R6,DL12
                 DJNZ R5,DL11
                 DJNZ R4,DL00
                      RET
       ;×××××设定时间程序:×××××
SETTIME:

             L0:LCALL DISPLAY1          ;调用时间允许程序
        MM1:  JB P1.2,L1            
                MOV C,P1.2
                JC MM1
                LCALL  DELAY1          ;调用延时
                JC MM1
     MSTOP1:    MOV C,P1.2
                JNC MSTOP1              ;判断P1.2是否释放?释放则继续
                LCALL DELAY1           ;调用延时
                MOV  C,P1.2
                JNC  MSTOP1
                 INC 22H                  ;小时增加1
                  MOV A,22H
                  CJNE A,#18H,GO12         ;判断小时是否到24时?未到继续循环
                  MOV 22H,#00H             ;小时复位
                  MOV 34H,#00H
                  MOV 35H,#00H
                  LJMP L0
               L1:JB P1.3,L2                 
                  MOV C,P1.3
                  JC L1
                  LCALL  DELAY1          ;延时
                  JC L1
        MSTOP2:   MOV C,P1.3
                  JNC MSTOP2               ;判断P1.3是否释放?释放则继续
                  LCALL DELAY1            ;调用延时
                  MOV  C,P1.3
                  JNC  MSTOP2
                  INC 21H                   ;分钟增加一
                  MOV A,21H
                  CJNE A,#3CH,GO11         
                  MOV 21H,#00H             ;分钟复位
                  MOV 32H,#00H
                  MOV 33H,#00H
                  LJMP L0
            GO11:MOV      B,#0AH         ;A中的内容分成高低两部分
                 DIV      AB
                 MOV      32H,B
                 MOV      33H,A
                 LJMP    L0

            GO12:     MOV      B,#0AH
                 DIV      AB
                 MOV      34H,B
                 MOV      35H,A
                 LJMP     L0
              L2:JB P1.4,L0               
                 MOV C,P1.4
                 JC  L2
                 LCALL  DELAY1         ;调用延时
                 MOV  C,P1.4
                 JC  L2
        STOP1:   MOV  C,P1.4             ;判断按键P1.4是否释放?
                 JNC STOP1
                 LCALL  DELAY1          ;调用延时
                 MOV  C,P1.4
                 JNC STOP1
                 LJMP  LOOP

        ;×××××设置闹钟时间×××××

         SETATIME:LCALL DISPLAY2       ;调用时间运行
               N0:LCALL DISPLAY2
         MM2:         JB P1.3,N1          ;判断P1.3是否按下?

                  MOV C,P1.3
                  JC MM2
                  LCALL  DELAY1        
                  JC MM2
        MSTOP3:   MOV C,P1.3            ;判断P1.3是否释放?
                  JNC MSTOP3
                  LCALL DELAY1         
                  MOV  C,P1.3
                  JNC  MSTOP3
                  INC 24H                ;设定小时增加1
                  MOV A,24H
                  CJNE A,#24,GO22      
                  MOV 24H,#00H          ;时钟复位
                  MOV 38H,#00H
                  MOV 39H,#00H
                  LJMP N0
               N1:JB P1.1,N2              ;判断P1.1是否按下?

                  MOV C,P1.1
                  JC N1
                  LCALL  DELAY1      
                  JC N1
        MSTOP4:   MOV C,P1.1           ;判断P1.1是否释放?
                  JNC MSTOP4
                  LCALL DELAY1         
                  MOV  C,P1.1
                  JNC  MSTOP4
                  INC 23H                ;设定闹钟分钟增加1
                  MOV A,23H
                  CJNE A,#60,GO21        ;判断A是否到60?
                  MOV 23H,#00H          ;分钟复位
                  MOV 36H,#00H
                  MOV 37H,#00H
                  LJMP N0
            GO21:MOV      B,#0AH       ;A中的内容分成高低两部分
                 DIV      AB
                 MOV      36H,B
                 MOV      37H,A
                 LJMP    N0

            GO22:     MOV      B,#0AH
                 DIV      AB
                 MOV      38H,B
                 MOV      39H,A
                 LJMP     N0
              N2:JB P1.4 ,N0               ;判断P1.4是否按下?
                 MOV C,P1.4
                 JC  N2
                 LCALL  DELAY1         
                 MOV  C,P1.4
                 JC  N2
        STOP2:   MOV  C,P1.4            ;判断P1.4是否释放?
                 JNC STOP2
                 LCALL  DELAY1      
                 MOV  C,P1.4
                 JNC STOP2
                 LJMP LOOP

         TIMEPRO:MOV A,21H           
                    MOV B,23H
                    CJNE A,B,BK           ;判断分钟是否运行到设定的闹钟的分钟?
                    MOV A,22H
                    MOV B,24H
                    CJNE A,B,BK            ;判断时钟是否运行到设定的闹钟的时钟?
                    SETB 25H.0
                    MOV C,25H.0
                    JC XX
                 XX:   LCALL TIMEOUT     ;调用时间闹钟响应程序
              BK:RET
           TIMEOUT:

                 X1:LCALL BZ               ;调用喇叭响应程序
                    LCALL DISPLAY2        
                    CLR 25H.0               
                    JB P1.4, X1               ;判断P1.4是否按下?
                   LCALL    DELAY        
                   CLR 25H.0
                   LJMP DISPLAY1            
              BZ:  CLR P3.7                  ;喇叭响应程序
                  MOV R7,#250               ;响应延时时间
               T2:   MOV R6,#124
               T3:  DJNZ R6,T3

                    DJNZ R7,T2
                    SETB P3.7
                    RET
            LOOKATIME:LCALL DISPLAY2    ;调用时间运行程序
         MM:     JB P1.4,LOOKATIME        ;判断按键P1.4是否按下
                 MOV C,P1.4
                 JC  MM
                 LCALL  DELAY1
                 MOV  C,P1.4
                 JC  MM
        STOP3:   MOV  C,P1.4
                 JNC STOP3
                 LCALL  DELAY1
                 MOV  C,P1.4
                 JNC STOP3
                 LJMP  LOOP
DELAY1:  MOV  R4,#14H              ;时间延时
        DL001:   MOV  R5,#0FFH
        DL111:   DJNZ R5,DL111
                 DJNZ R4,DL001
                 RET
        ;×××××时间运行程序×××××
        TIME:   PUSH ACC                    ;现场保护
                PUSH PSW
            MOV        TH0,#03CH             ;赋初值
                 MOV        TL0,#0B0H
                DJNZ        R2,RET0
                MOV        R2,#14H
                MOV        A,20H
                CLR C
            MOV     30H,#0
            MOV     31H,#0
                MOV        A,21H
                INC        A                              ;分钟自加1
                  CJNE        A,#3CH,GO2                ;判断分钟是否到60分?
            MOV  21H,#0H                     ;60分复位
            MOV  32H,#0
            MOV  33H,#0
                MOV        A,22H
                INC        A                              ;时钟自加1
                CJNE        A,#18H,GO3                ;判断时钟是否到24时?
                MOV   22H,#00H                   ;24时复位
            MOV   34H,#0
            MOV   35H,#0
                AJMP        RET0
        GO1:        MOV        20H,A            
                MOV     B,#0AH
                DIV     AB
                MOV     31H,A
                MOV     30H,B
                 AJMP        RET0
        GO2:        MOV        21H,A
                MOV     B,#0AH
                DIV     AB
                MOV     33H,A
                MOV     32H,B
                AJMP        RET0
        GO3:        MOV        22H,A
                MOV     B,#0AH
                DIV     AB
                MOV     35H,A
                MOV     34H,B
                       AJMP        RET0
        RET0:   POP PSW                  ;恢复现场
                POP ACC
                RETI
           ;×××××运行部分×××××
        DISPLAY1:        MOV        R0,#30H
                    MOV        R3,#0FEH
                    MOV        A,R3
        PLAY1:  MOV   P2,A
               MOV   A,@R0
               MOV   DPTR,#DSEG1       ;表首地址送DPTR
               MOVC  A,@A+DPTR      
               MOV   P0,A               
               LCALL  DL1
               MOV P2,#0FFH              ;送高电平到P2
               MOV   A,R3
               RL       A                 ;
               JNB    ACC.6,LD1
               INC      R0
               MOV   R3,A
               LJMP  PLAY1               ;调用查表程序
        LD1:   RET
        DISPLAY2:  PUSH ACC              ;现场保护
            PUSH PSW
        MOV        R0,#36H
                    MOV        R3,#0FBH
                    MOV        A,R3
        PLAY2:  MOV   P2,A
               MOV   A,@R0
               MOV   DPTR,#DSEG1         ;表首地址送DPTR
               MOVC  A,@A+DPTR          ;ASCII特码
               MOV   P0,A                  ;查表结果送A
               LCALL DL1
               MOV P2,#0FFH                ;送高电平到P2
               MOV   A,R3
               RL       A
               JNB    ACC.6,LD2
               INC      R0
               MOV   R3,A
               LJMP  PLAY2
        LD2:   POP PSW                     ;恢复现场
           POP ACC
         RET
          ;×××××延时时间×××××
        DL1:        MOV        R7,#02H              ;延时时间
        DL:            MOV        R6,#020H
        DL6:        DJNZ        R6,$
                    DJNZ        R7,DL
                    RET
        DSEG1:DB 3FH,06H,5BH,4FH,66H
              DB 6DH,7DH,07H,7FH,6FH
        END



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:741487 发表于 2020-4-30 09:59 | 显示全部楼层
你好 请问单片机闹钟那个有文件吗 或者说那个芯片用的是51还是52 看图片上的是52 如果有文件是最好 可以发我一下吗!!!真的万分感谢你
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表