基于AT89C51单片机的多功能电子万年历的设计
更新时间:2024-05-24 08:39:01 阅读量: 综合文库 文档下载
单片机应用系统设计
课 题: 基于AT89C51单片机的多功能电子万年
历的设计
姓 名:
班 级: 学 号: 指导老师: 日 期:
单片机课程设计
目录
一.绪言……………………………………………………………3
二.系统总体方案设计……………….………………………………3
三.硬件系统设计:…………………….……………………….4
四.系统软件设计………………….……………………………5
五.设计总结……………………………………………………8
六.参考文献……………………………………………………8
七.附录………………………………………………………….9
2
单片机课程设计
一.绪论
随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。
本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。
万年历是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。
本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行。
二.系统总体方案设计 1. 系统设计硬件框图
振荡电路 LED显示频 按键调节 AT89C51 DS1302
2. 实现的基本原理
在本实验中,我引用了DS1302的时,分,秒功能,当时计数字24时通过74LS164给
模块年月日进位,当日模块对应其相应月份进行向月进位时,就给月进位,当月满12时,给年进位。
3
单片机课程设计 三.硬件系统设计 1.元器件介绍 名称 DS1302 图形 功能 U181VCC1X1VCC22 可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能 576RSTSCLKI/OX2DS13023 3 74LS164 U498RSRG8C1/->12&1D45610111213 74LS164是一个串行输入并行输出的移位寄存器,并带有清除端。其中; Q0—Q7 并行输出端 。 A,B串行输入端。 MR 清除端, 为0时,输出清零。 CP 时钟输入端。 74LS164 AT89C51 U219XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161722222222at89c51单片机是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的Flash只读程序存储器和128bytes的随机数据存储器(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准MCS-51指令系统。功能强大的at89c51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。 18XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 4 单片机课程设计
2.硬件原理图
ABCDEFGHJK00D?年12月日星期月日小时分秒LED-BLUE12R3580U3RSRG8C1/->&1D31011121374LS16434R2580U4RSRG8C1/->4&1D1011574LS16412135RP1619U2XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD3938373635343332212223242526272810111213141516172021222324252627RESPACK-8R1580U5RSRG8C1/->618XTAL2&RSTU01:A4009U01:B4009U01:D4009U01:C4009U01:E4009U01:F4009U02:A40091DU02:B4009293031VCC1X1VCC2117P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51X1RSTSCLKI/ODS130232678HZX274LS1641213PSENALEEABAT11.5VU1107889FILE NAME:DESIGN TITLE:PATH:BY:9万年厉.DSNDATE:2009-6-16C:\\Documents and Settings\\wufeng\\桌面万年历万C:\\Documents and Settings\\wufeng\\桌面万年历万年厉.DSN1of万年厉1REV:TIME:0:21:00PAGE:ABCDEFGHJK
四.系统软件设计
仿真过程
1、打开PROTEUS软件,并出画单片机电子万年历具体运行电路图。 3、检查所画电路运行图,确保没有错误以后,加载源程序。
4、加载完成后,单击电路图框下的开始按钮,进行仿真,观察LED数码管现实情况,此时LED数码管开始显示数字。调节开关进行时间的调节。当秒的显示间隔快与或慢与实际间隔时,调节石英晶体震荡器的频率参数,从而使秒的间隔达到标准。然后检查电路其它问题,并对其的各参数进行调整,使之正确。 仿真结果
通过对源程序的编译,改正了其中的很多错误,然后运行,保证源程序的正确性。然后按原理图选择正确合理的电器元件,画出正确的电路图,加载源程序运行,顺利实现了单片机数字电子钟的“小时”、“分钟”、“秒”的显示。
1主程序流程图设计
5
单片机课程设计
CLR P0.6
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允许协 LCALL WRITE
MOV DS1302_ADDR,#90H
MOV DS1302_DATA,#0A6H ;1302充电,充电电流.1mA lcall write
SETB ET0 ; SETB TR0
main1: MOV DS1302_ADDR,#8DH ;READ OUT YEAR LCALL READ
MOV TIME_YEAR,DS1302_DATA
MOV DS1302_ADDR,#8BH ;READ OUT WEEK LCALL READ
MOV WEEK,DS1302_DATA
MOV DS1302_ADDR,#89H ;READ OUT MONTH LCALL READ
MOV TIME_MONTH,DS1302_DATA
MOV DS1302_ADDR,#87H ;READ OUT DAY LCALL READ
MOV TIME_DAY,DS1302_DATA
MOV DS1302_ADDR,#85H ;READ OUT HOUR LCALL READ
MOV HOUR,DS1302_DATA
MOV DS1302_ADDR,#83H ;READ OUT MINTUE LCALL READ
MOV MINTUE,DS1302_DATA
MOV DS1302_ADDR,#81H ;READ OUT SECOND LCALL READ
MOV SECOND,DS1302_DATA
MOV R0,TIME_YEAR ;存 LCALL DIVIDE MOV 7BH,R1 MOV 4BH,R1 MOV 7CH,R2 MOV 4CH,R2
MOV 78H,WEEK MOV 48H,WEEK
MOV R0,TIME_MONTH ; 打开秒闪定时器 年分离,送显示缓月分离,送显示缓
11
单片机课程设计
存
LCALL DIVIDE MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2
MOV R0,TIME_DAY ;日分离,送显示缓存 LCALL DIVIDE MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2
MOV R0,HOUR ; LCALL DIVIDE MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2
MOV R0,MINTUE ; LCALL DIVIDE MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2
MOV R0,SECOND ; LCALL DIVIDE MOV 70H,R1 MOV 40H,R1 MOV 71H,R2 MOV 41H,R2
LCALL GENGXIN ; MOV R0,CONVERT_MONTH ; LCALL DIVIDE MOV 5BH,R1 MOV 52H,R1 MOV 5CH,R2 MOV 53H,R2
MOV R0,CONVERT_DATE LCALL DIVIDE MOV 59H,R1 MOV 50H,R1 MOV 5AH,R2 MOV 51H,R2 LCALL GETWEEK
12
小时分离,送显示缓存 分分离,送显示缓存 秒分离,送显示缓存 更新农历程序
农历月分离,送显示缓存 单片机课程设计
MOV 78H,WEEK LCALL DISPLAY
GOON:JNB P1.1,SETGG ;调整日历 ;JNB P1.4,QIDONG ;启动秒钟指示灯 ; LCALL QIDONG AAA: JNB F0,SSS
CLR P1.0 ;闰月,则p1.0清,指示灯亮 LJMP MAIN1
SSS: SETB P1.0 ;非闰月,则p1.0置位,指示灯灭 LJMP MAIN1 SETGG: LJMP SETG
QIDONG: LCALL DISPLAY ; ;JNB P1.4,QIDONG ; LCALL QIDONG
CPL 30H ;30 JB 30H,ON CLR TR0 CLR ET0 AJMP QDOUT ON: SETB TR0 SETB ET0 QDOUT: AJMP AAA
;***************************** ;* ;*****************************
INTT2: 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 ; CLR PSW.4 DJNZ R7,INTT2OUT MOV R7,#10 CPL 20H JB 20H,S1
SETB P0.7 ; AJMP INTT2OUT
秒钟指示灯开启/关闭 秒灯闪烁程序 * 累加器入栈保护 状态字入栈保护 关T0中断允许 关闭定时器T0
中断响应时间同步修正 低位初值修正
重装初值(低位修正值) 高位初值修正 重装初值(高位修正值) 开启定时器T0 秒指示灯闪烁 13
单片机课程设计
S1:
CLR P0.7
INTT2OUT: POP PSW ;出栈 POP ACC SETB ET0 RETI
;********************************* ;* 写程序 * ;********************************* WRITE: CLR SCLK NOP SETB RST NOP
MOV A,DS1302_ADDR MOV R4,#8
WRITE1: RRC A ;送地址给 NOP NOP CLR SCLK NOP NOP NOP MOV IO,C
SETB SCLK ;送入地址在时钟上升沿有效 NOP NOP NOP NOP
DJNZ R4,WRITE1 CLR SCLK NOP
MOV A,DS1302_DATA MOV R4,#8 WRITE2: RRC A
NOP ;送数据给,时钟上升沿,数据输入 CLR SCLK NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP
14
单片机课程设计
NOP
DJNZ R4,WRITE2 CLR RST RET
;******************************* ;* 读程序 * ;******************************* READ: CLR SCLK NOP NOP SETB RST NOP
MOV A,DS1302_ADDR MOV R4,#8 READ1: RRC A NOP MOV IO,C NOP NOP NOP
SETB SCLK ;送入地址在时钟上升沿有效 NOP NOP NOP ;CLR SCLK CLR SCLK NOP NOP
DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP NOP NOP MOV C,IO NOP NOP NOP NOP
NOP ;从ds1302中读取数据,时钟下降沿有效 RRC A NOP NOP NOP
15
单片机课程设计
NOP SETB SCLK NOP
DJNZ R4,READ2 MOV DS1302_DATA,A CLR RST RET
;******************************* ;* 公历设置程序 * ;******************************* SETG: CLR TR0 CLR ET0 SETB TR1 SETB ET1 CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH CLR 0EH CLR 0FH
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ; LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302 LCALL WRITE GWAIT: LCALL DISPLAY JNB P1.1,GWAIT
SETG1: LCALL DISPLAY JNB P1.1,SETGMON
JNB P1.3,GADDYEAR JNB P1.4,GDECYEAR JNB F0,SSSYEAR
CLR P1.0 ; LJMP SETG1 SSSYEAR: SETB P1.0 AJMP SETG1 SETGMON: AJMP SETG2
GADDYEAR: MOV R7,66H ; 16
允许写 停止振荡 闰月,则p1.1清,指示灯亮年加
单片机课程设计
LCALL ADD1 MOV 66H,A
GADDYEAR1: LCALL GETWEEK ;年加同时换算出星期 LCALL YMD ;转换农历月日 MOV DS1302_ADDR,#8CH ;年值送 MOV DS1302_DATA,66H LCALL WRITE
MOV DS1302_ADDR,#8AH ;星期值送 MOV DS1302_DATA,64H LCALL WRITE MOV R0,66H
LCALL DIVIDE ; MOV 4BH,R1 MOV 7BH,R1 MOV 4CH,R2 MOV 7CH,R2 MOV R0,64H
LCALL DIVIDE ; MOV 48H,week MOV 78H,week WAIT1: LCALL DISPLAY JNB P1.3,WAIT1 AJMP SETG1
GDECYEAR: MOV R7,66H ; LCALL DEC1 MOV 66H,A
LCALL GETWEEK ; LCALL YMD ; MOV DS1302_ADDR,#8CH ; MOV DS1302_DATA,66H LCALL WRITE
MOV DS1302_ADDR,#8AH ; MOV DS1302_DATA,64H LCALL WRITE MOV R0,66H
LCALL DIVIDE ; MOV 4BH,R1 MOV 7BH,R1 MOV 4CH,R2 MOV 7CH,R2 MOV R0,64H
17
年分离送显示缓冲 星期分离送显示缓冲 年减 年减同时换算出星期 转换农历月日 年值送 星期值送 年分离送显示缓冲 单片机课程设计
LCALL DIVIDE ;星期分离送显示缓冲 MOV 48H,week MOV 78H,week WAIT2: LCALL DISPLAY JNB P1.4,WAIT2 AJMP SETG1
SETG2: SETB 0AH ;调月时闪标志 GWAIT3: LCALL DISPLAY JNB P1.1,GWAIT3 SETG3: LCALL DISPLAY JNB P1.1,SETGDAY JNB P1.3,GADDMONTH JNB P1.4,GDECMONTH JNB P1.2,JUMPYEAR JNB F0,SSSMONTH
CLR P1.0 ; LJMP SETG3 SSSMONTH: SETB P1.0
AJMP SETG3 JUMPYEAR: LCALL DISPLAY CLR 0AH
JNB P1.2,JUMPYEAR AJMP SETG1 SETGDAY: AJMP SETG4
GADDMONTH: MOV R7,65H ; LCALL ADD1 MOV 65H,A
CJNE A,#13H,GADDMONTH1 MOV 65H,#01H
GADDMONTH1: LCALL GETWEEK ; LCALL YMD ; MOV DS1302_ADDR,#88H ; MOV DS1302_DATA,65H LCALL WRITE
MOV DS1302_ADDR,#8AH ; MOV DS1302_DATA,64H LCALL WRITE
MOV R0,65H
LCALL DIVIDE ; MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2
18
闰月,则p1.1清,指示灯亮月加 月加同时换算出星期 转换农历月日 月值送 星期值送 月分离送显示缓冲 单片机课程设计
MOV 4AH,R2 MOV R0,64H
LCALL DIVIDE ;星期分离送显示缓冲 MOV 48H,week MOV 78H,week WAIT4: LCALL DISPLAY JNB P1.3,WAIT4 AJMP SETG3
GDECMONTH:MOV R7,65H ; LCALL DEC1 MOV 65H,A
CJNE A,#00H,GDECMONTH1 MOV 65H,#12H
GDECMONTH1: LCALL GETWEEK ; LCALL YMD ; MOV DS1302_ADDR,#88H ; MOV DS1302_DATA,65H LCALL WRITE
MOV DS1302_ADDR,#8AH ; MOV DS1302_DATA,64H LCALL WRITE
MOV R0,65H
LCALL DIVIDE ; MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 MOV R0,64H
LCALL DIVIDE ; MOV 48H,week MOV 78H,week WAIT5: LCALL DISPLAY JNB P1.4,WAIT5 AJMP SETG3
SETG4: SETB 0BH ; GWAIT6: LCALL DISPLAY JNB P1.1,GWAIT6 SETG5: LCALL DISPLAY JNB P1.1,SETGHOUR JNB P1.3,GADDDAY JNB P1.4,SETGDDAY JNB P1.2,JUMPMONTH
19
月减 月减同时换算出星期转换农历月日 月值送 星期值送 月分离送显示缓冲 星期分离送显示缓冲 调日时闪标志 单片机课程设计
JNB F0,SSSDATE
CLR P1.0 ;闰月,则p1.1清,指示灯亮 LJMP SETG5 SSSDATE: SETB P1.0
AJMP SETG5 JUMPMONTH: LCALL DISPLAY CLR 0BH
JNB P1.2,JUMPMONTH AJMP SETG3 SETGHOUR: AJMP SETG6 SETGDDAY: AJMP GDECDAY GADDDAY: MOV A,65H CJNE A,#01H,FEB
LCALL MMONTH ; AJMP GADDDAY1
FEB: CJNE A,#02H,MARCH
MOV R3,66H ; LCALL ZH ;BCD MOV A,R3 JZ RFEB
MOV R7,63H ; LCALL ADD1 MOV 63H,A CJNE A,#29H,FEB1 MOV 63H,#01 FEB1: AJMP GADDDAY1
RFEB: MOV R7,63H ; LCALL ADD1 MOV 63H,A CJNE A,#30H,FEB2 MOV 63H,#01 FEB2: AJMP GADDDAY1
MARCH: CJNE A,#03H,APRIL
LCALL MMONTH ; AJMP GADDDAY1 APRIL: CJNE A,#04H,MAY
LCALL LMONTH ; AJMP GADDDAY1 MAY: CJNE A,#05H,JUNE
LCALL MMONTH ; 20
一月日加 二月日加 码转换成HEX 平年二月有天 闰年二月有天 三月加 四月加 五月加
单片机课程设计
AJMP GADDDAY1 JUNE: CJNE A,#06H,JULY
LCALL LMONTH ;六月加 AJMP GADDDAY1 JULY: CJNE A,#07H,AUGUST
LCALL MMONTH ;七月加 AJMP GADDDAY1
AUGUST: CJNE A,#08H,SEPTEMBER
LCALL MMONTH ;八月加 AJMP GADDDAY1 SEPTEMBER:CJNE A,#09H,OCTOBER
LCALL LMONTH ; AJMP GADDDAY1 OCTOBER: CJNE A,#10H,NOVEMBER
LCALL MMONTH ; AJMP GADDDAY1 NOVEMBER: CJNE A,#11H,DECEMBER
LCALL LMONTH ; AJMP GADDDAY1 DECEMBER: CJNE A,#12H,ERROR
LCALL MMONTH ; AJMP GADDDAY1 ERROR: AJMP WAIT7
GADDDAY1: LCALL GETWEEK
LCALL YMD ; MOV DS1302_ADDR,#86H ; MOV DS1302_DATA,63H LCALL WRITE
MOV DS1302_ADDR,#8AH ; MOV DS1302_DATA,64H LCALL WRITE MOV R0,63H
LCALL DIVIDE ; MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 MOV R0,64H
LCALL DIVIDE ; MOV 48H,week MOV 78H,week
WAIT7: LCALL DISPLAY
21
九月加 十月加 十一月加 十二月加 转换农历月日 日值送 星期值送 日分离送显示缓冲 星期分离送显示缓冲 单片机课程设计
JNB P1.3,WAIT7 AJMP SETG5
;***************************************************************************************** GDECDAY: mov A,65H CJNE A,#01H,DFEB
LCALL DMMONTH ;一月日减 AJMP GDECDAY1 DFEB: CJNE A,#02H,DMARCH
MOV R3,66H ;二月日减 LCALL ZH ;BCD MOV A,R3 JZ DRFEB
MOV R7,63H ; LCALL DEC1 MOV 63H,A CJNE A,#00H,DFEB1 MOV 63H,#28H DFEB1: AJMP GDECDAY1
DRFEB: MOV R7,63H ; LCALL DEC1 MOV 63H,A CJNE A,#00H,DFEB2 MOV 63H,#29H DFEB2: AJMP GDECDAY1 DMARCH: CJNE A,#03H,DAPRIL
LCALL DMMONTH ; AJMP GDECDAY1
DAPRIL: CJNE A,#04H,DMAY
LCALL DLMONTH ; AJMP GDECDAY1
DMAY: CJNE A,#05H,DJUNE
LCALL DMMONTH ; AJMP GDECDAY1
DJUNE: CJNE A,#06H,DJULY
LCALL DLMONTH ; AJMP GDECDAY1
DJULY: CJNE A,#07H,DAUGUST
LCALL DMMONTH ; AJMP GDECDAY1
22
码转换成HEX 平年二月有天 闰年二月有天 三月减 四月减 五月减 六月减 七月减 单片机课程设计
DAUGUST:CJNE A,#08H,DSEPTEMBER
LCALL DMMONTH ;八月减 AJMP GDECDAY1
DSEPTEMBER:CJNE A,#09H,DOCTOBER
LCALL DLMONTH ;九月减 AJMP GDECDAY1
DOCTOBER:CJNE A,#10H,DNOVEMBER
LCALL DMMONTH ; AJMP GDECDAY1
DNOVEMBER:CJNE A,#11H,DDECEMBER
LCALL DLMONTH ; AJMP GDECDAY1
DDECEMBER: CJNE A,#12H,DERROR
LCALL DMMONTH ; AJMP GDECDAY1 DERROR: AJMP WAIT8
GDECDAY1: LCALL GETWEEK
LCALL YMD ; MOV DS1302_ADDR,#86H ; MOV DS1302_DATA,63H LCALL WRITE
MOV DS1302_ADDR,#8AH ; MOV DS1302_DATA,64H LCALL WRITE MOV R0,63H
LCALL DIVIDE ; MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 MOV R0,64H
LCALL DIVIDE ; MOV 48H,week MOV 78H,week WAIT8: LCALL DISPLAY JNB P1.4,WAIT8 AJMP SETG5
SETG6: SETB 0CH ; GWAIT9: LCALL DISPLAY
23
十月减 十一减加 十二月减 转换农历月日 日值送 星期值送 日分离送显示缓冲 星期分离送显示缓冲调小时时闪标志 单片机课程设计
JNB P1.1,GWAIT9 SETG9: LCALL DISPLAY JNB P1.1,SETG10 JNB P1.3,GADDHOUR JNB P1.4,GDECHOUR JNB P1.2,JUMPDATE AJMP SETG9 JUMPDATE: LCALL DISPLAY CLR 0CH
JNB P1.2,JUMPDATE AJMP SETG5
GADDHOUR: MOV R7,62H ; LCALL ADD1 MOV 62H,A
CJNE A,#24H,GADDHOUR1 MOV 62H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H ; MOV DS1302_DATA,62H LCALL WRITE MOV R0,62H
LCALL DIVIDE ; MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 WAIT10: LCALL DISPLAY JNB P1.3,WAIT10 AJMP SETG9
GDECHOUR: MOV R7,62H ; LCALL DEC1 MOV 62H,A
CJNE A,#99H,GDECHOUR1 MOV 62H,#23H
GDECHOUR1: MOV DS1302_ADDR,#84H ; MOV DS1302_DATA,62H LCALL WRITE MOV R0,62H
LCALL DIVIDE ; MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2
24
小时加 小时值送 小时分离送显示缓冲小时减 小时值送 小时分离送显示缓冲 单片机课程设计
WAIT11: LCALL DISPLAY JNB P1.4,WAIT11 AJMP SETG9
SETG10: SETB 0DH ;调分时闪标志 GWAIT12: LCALL DISPLAY JNB P1.1,GWAIT12 SETG11: LCALL DISPLAY JNB P1.1,SETGOUT JNB P1.3,GADDMINTUE JNB P1.4,GDECMINTUE JNB P1.2,JUMPHOUR AJMP SETG11 JUMPHOUR: LCALL DISPLAY CLR 0DH
JNB P1.2,JUMPHOUR AJMP SETG9
GADDMINTUE: MOV R7,61H ; LCALL ADD1 MOV 61H,A
CJNE A,#60H,GADDMINTUE1 MOV 61H,#00H
GADDMINTUE1: MOV DS1302_ADDR,#82H ; MOV DS1302_DATA,61H LCALL WRITE MOV R0,61H
LCALL DIVIDE ; MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 WAIT13: LCALL DISPLAY JNB P1.3,WAIT13 AJMP SETG11
GDECMINTUE: MOV R7,61H ; LCALL DEC1 MOV 61H,A
CJNE A,#99H,GDECMINTUE1 MOV 61H,#59H
GDECMINTUE1: MOV DS1302_ADDR,#82H ; MOV DS1302_DATA,61H LCALL WRITE MOV R0,61H
LCALL DIVIDE ; MOV 72H,R1
25
分加 分值送 分分离送显示缓冲 分减 分值送 分分离送显示缓冲
单片机课程设计
MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 WAIT14: LCALL DISPLAY JNB P1.4,WAIT14 AJMP SETG11
SETGOUT: LCALL DISPLAY JNB P1.1,SETGOUT LCALL GENGXIN MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;1302振荡 LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ; LCALL WRITE CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH
CLR ET1
CLR TR1 ; SETB ET0 SETB TR0 LJMP MAIN1
;*********************************** ;* ;*********************************** INTT1: PUSH ACC PUSH PSW GFLASH: CPL 0FH JB 0FH,GFLASH1
MOV 7CH,4CH ; MOV 7BH,4BH ;MOV A,4AH ;CJNE A,#0,TMONTH ;MOV 4AH,#0BH TMONTH:MOV 7AH,4AH MOV 79H,49H
闪动调时程序 * 26
晶振开始禁止写入 关闭定时器 全部显示
单片机课程设计
MOV 78H,WEEK ;MOV A,47H ;CJNE A,#0,TDATE ;MOV 47H,#0BH TDATE: MOV 77H,47H MOV 76H,46H ;MOV A,45H ;CJNE A,#0,THOUR ;MOV 45H,#0AH THOUR:MOV 75H,45H MOV 74H,44H MOV 73H,43H MOV 72H,42H MOV 71H,41H MOV 70H,40H
; MOV 50H,59H ; ; MOV A,5AH ; CJNE A,#0,TNDATE ; MOV 5AH,#0BH ; TNDATE:MOV 51H,5AH
; MOV 52H,5BH ; MOV A,5CH ; CJNE A,#0,TNMONTH ; MOV 5CH,#0BH ; TNMONTH:
; MOV 53H,5CH GFLASHOUT: POP PSW POP ACC RETI
GFLASH1: JB 0AH,GFLASH2 ; MOV 7CH,#0AH MOV 7BH,#0AH
;MOV 78H,#0AH ; ;MOV 50H,#0AH ; ; MOV 51H,#0AH ; MOV 52H,#0AH ; MOV 53H,#0AH AJMP GFLASHOUT
GFLASH2: JB 0BH,GFLASH3 ; MOV 7AH,#0AH MOV 79H,#0AH
;MOV 78H,#0AH ; 27
农历月日 调年闪 调年时星期闪农历月日闪烁调月闪 调月时星期闪
单片机课程设计
;MOV 50H,#0AH ;农历月日闪烁 ;MOV 51H,#0AH ;MOV 52H,#0AH ; MOV 53H,#0AH LJMP GFLASHOUT
GFLASH3: JB 0CH,GFLASH4 ;调日闪 MOV 77H,#0AH MOV 76H,#0AH
;MOV 78H,#0AH ;调日时星期闪 ;MOV 50H,#0AH ; ;MOV 51H,#0AH ;MOV 52H,#0AH ;MOV 53H,#0AH LJMP GFLASHOUT
GFLASH4: JB 0DH,GFLASH5 ; MOV 75H,#0AH MOV 74H,#0AH LJMP GFLASHOUT
GFLASH5: ; MOV 73H,#0AH MOV 72H,#0AH LJMP GFLASHOUT
;********************************* ;* 加程序 * ;********************************* ADD1: MOV A,R7 ADD A,#01H DA A RET
;********************************* ;* 减程序 * ;********************************* DEC1: MOV A,R7 ADD A,#99H DA A RET
;********************************* ;* 大小月加调整程序 * ;*********************************
MMONTH: MOV R7,63H ; LCALL ADD1 MOV 63H,A
CJNE A,#32H,MGOOUT
28
农历月日闪烁 调小时闪 调分钟闪 大月日加 单片机课程设计
MOV 63H,#01H MGOOUT: RET
LMONTH:MOV R7,63H ;小月日加 LCALL ADD1 MOV 63H,A
CJNE A,#31H,LGOOUT MOV 63H,#01H LGOOUT:RET
;********************************* ;* 大小月减调整程序 * ;*********************************
DMMONTH:MOV R7,63H ;大月日减 LCALL DEC1 MOV 63H,A
CJNE A,#00H,DMGOOUT MOV 63H,#31H DMGOOUT: RET
DLMONTH:MOV R7,63H ;小月日减 LCALL DEC1 MOV 63H,A
CJNE A,#00H,DLGOOUT MOV 63H,#30H DLGOOUT:RET ; *************************** ; * 公历年月日推算星期 * ; ***************************
; 以下子程序用于从当前公历日期, 推算星期,
; 入口:time_yeAr,time_month ,time_date , 定义公历年月日,BCD 码, 其中月的 ;BIT7 表示世纪,0 表示20 世纪,1 表示19 世纪, 与PCF8563 一致
; 出口time_week, 0-6 表示星期日- 星期六, 与PCF8563 一致, 程序不改变入口数据 ; 使用资源:ACC,B,psw,temp_Byte1,temp_Byte2,temp_Byte3 GetWeek: MOV A,time_year MOV B,#16 DIV AB
MOV week_Byte1,B MOV B,#10 MUL AB
ADD A,week_Byte1
MOV week_Byte1,A ;temp_Byte1= 年 MOV A,time_month
29
单片机课程设计
JB ACC.7,getw02
MOV A,#100 ADD A,week_Byte1
MOV week_Byte1,A ;20 世纪年+100 MOV A,time_month CLR ACC.7
getw02: JNB ACC.4,getw04 ADD A,#10 CLR ACC.4
getw04: MOV week_Byte2,A ;temp_Byte2= 月 MOV A,time_day MOV B,#16 DIV AB
MOV week_Byte3,B MOV B,#10 MUL AB
ADD A,week_Byte3
MOV week_Byte3,A ;temp_Byte3= 日 MOV A,week_Byte1; ANL A,#03h
JNZ getw10 ; 非闰年转移 MOV A,week_Byte2 CJNE A,#3,getw06
getw06: JNC getw10 ; 月大于2 转移
DEC week_Byte3 ; 份小于等于2, 又是闰年, 日减1 getw10: MOV A,week_Byte2;
LCALL get_CorreCt ; 取月校正表数据 ADD A,week_Byte1 MOV B,#7
DIV AB ;B 放年加校正日数之和后除7 的余数不先做这一步 ; 有可能数据溢出 MOV A,week_Byte1 ANL A,#0fCh RR A
RR A ; 以上年除4 即闰年数 ADD A,B
ADD A,week_Byte3 MOV B,#7 DIV AB MOV week,B MOV A,WEEK CJNE A,#0,GOBACK MOV B,#07H
30
单片机课程设计
GOBACK: MOV WEEK,B RET
get_COrreCt: MOVC A,@A+PC RET
DB 0,3,3,6,1,4,6,2,5,0,3,5
31
正在阅读:
拓展训练:公务员 九项能力主题培训方案04-13
山东省潍坊市第二中学2013届高考历史上学期10月一轮复习模块检测(含解析)岳麓版必修(1、2)12-30
宾馆客房管理系统数据库设计报告12-10
2016高考语文 作文备考新素材 母亲为艺考女儿找替考05-26
扩写秋思400字06-25
如何编制一份高质量的工程量清单06-04
2019—2020学年度烟台市招远第一学期初四年级期末考试初中物理05-02
培训学校运营管理手册改编版01-05
学雷锋 做有道德的人(5.7班杨珺慧)06-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单片机
- 万年历
- 多功能
- 基于
- AT89C51
- 设计
- 电子
- 中文必读书目
- 非谓语动词的做题步骤
- 护理学基础名词解释 97个 附答案
- 麻城市城市总体规划(2012-2030)
- 博雅第21期 - 图文
- 2012-2013年周家初级中学第二学期政教处工作计划
- 第十二单元 化学与生活复习(教学设计)
- 武汉理工大学专选课 - 嵌入式系统复习题
- 节支降耗、降本增效,实施方案YH
- 1.1小时c语言入门
- 机电管理制度
- 高压电工作业的安全操作规定
- 贵州高速公路开发总公司安全生产管理办
- 江苏省南通市海安2015-2016上学期高三期末试题(数学理) - 图文
- 中考二轮复习 第8讲 代数几何综合题
- 关于表彰2009年广东省大学生志愿者暑期“三下乡”社会实践活动先
- 四川省遂宁二中2018-2019学年高一上学期半期考试数学试题 Word版
- 中国共有20大国粹
- 重要经济目标防护的几点思考
- 66个简单易做的物理家庭小实验