标题: 基于51单片机的定时闹钟装置设计 汇编语言源程序 [打印本页]
作者: 哇哇哇哇哇w 时间: 2019-11-22 21:18
标题: 基于51单片机的定时闹钟装置设计 汇编语言源程序
本帖最后由 哇哇哇哇哇w 于 2019-11-23 09:19 编辑
一主要功能1)能显示:时时—分分。
2)能够设定定时时间、修改定时时间。3)定时时间到能发出提示声音。
4)提示声音发出后,若要用提示声音驱动某外围元件动作,可接在A1处
二本次设计的系统电路图如下
使用了AT89C51作为控制芯片,连接外围电路组成最小系统。P1口接五个按钮(S1—5)作为控制键输入,外接4位数码管显示时间,另外P3.7附加蜂鸣器作为定时闹钟铃响使用,同时,若要使闹钟信号驱动其他外设元件,可以与蜂鸣器下三极管的发射极相接。按键分为设置当前时间,设置定时时间键,小时加键键,分钟加键,退出键。
AT89C51是一个低电压,高性能CMOS型8位单片机,片内含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
作者: milly129 时间: 2020-4-30 09:59
你好 请问单片机闹钟那个有文件吗 或者说那个芯片用的是51还是52 看图片上的是52 如果有文件是最好 可以发我一下吗!!!真的万分感谢你
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |