收藏 分享(赏)

点阵时钟.doc

上传人:hwpkd79526 文档编号:7811866 上传时间:2019-05-26 格式:DOC 页数:38 大小:173KB
下载 相关 举报
点阵时钟.doc_第1页
第1页 / 共38页
点阵时钟.doc_第2页
第2页 / 共38页
点阵时钟.doc_第3页
第3页 / 共38页
点阵时钟.doc_第4页
第4页 / 共38页
点阵时钟.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、本点阵显示年、月、日、星期、阴历、温度,并且时间可调!嘿嘿,这几天比较忙,温度功能还没加进去,但细心看程序,可发现温度功能非常容易添加,程序中已经定义温度变量 ram 37h 38h。按键功能也没有添加!但比起整个工程,按键和温度的程序显得有点九牛一毛!;-;软件环境: VW For Windows;硬件环境: AT89C52 MCU,MCS-51 系列 MCU,etc.;-;用户在编写应用程序时,需按自己的实际硬件连线来重新定义DAT BIT P1.4 ;数据引脚SH BIT P1.0 ;移位时钟ST BIT P1.2 ;锁存时钟;-;-;寄存器定义;R0 显存地址;R1 缓存地址;R2 画

2、面选择(只能为 1,2, 4,5);R3 移动字幕显示类型(长还是短);R4 比秒更小的单位;-;以下变量用于指示当前操作字符的位置的预定义;用户在编写应用程序时,需按自己的实际软件程序需要来重新定义XPOS EQU 20H ;点阵屏横向数据YPOS1 EQU 21H ;点纵屏横向数据YPOS2 EQU 22H ;点纵屏横向数据YPOS3 EQU 23H ;点纵屏横向数据YPOS4 EQU 24H ;点纵屏横向数据LP8 EQU 25H ;循环 8 次变量MAX EQU 29H ;每月最多的天数SEC EQU 30H ;秒寄存器MIN EQU 31H ;分寄存器HOU EQU 32H ;时寄存

3、器DATE EQU 33H ;日寄存器WEEK EQU 34H ;星期寄存器MON EQU 35H ;月寄存器YEAR EQU 36H ;年寄存器TMMP1 EQU 37H ;温度小数点前TMMP2 EQU 38H ;温度小数点后GAO EQU 40H ;高四位DI EQU 41H ;第四位TEM EQU 42H ;时间变量暂时存放地(个位和十位)MGAO EQU 43H ;移动变量高位MDI EQU 44H ;移动变量低位DPH0 EQU 45H ;移动图案起始地址高 8 位DPL0 EQU 46H ;移动图案起始地址低 8 位DPH1 EQU 47H ;指针 1 高 8 位DPL1 EQU

4、 48H ;指针 1 低 8 位DPH2 EQU 49H ;指针 2 高 8 位DPL2 EQU 50H ;指针 2 低 8 位COMR1 EQU 51H ;选择移动画面的类型(画面二与画面四中显示不一样)COMR3 EQU 52H ;移动字幕的长短控制(画面二中移动字幕比较短);-ORG 00H ;整个程序开始于 00HAJMP MAINORG 0BHAJMP TIME0 ;定时器程序向量ORG 030HMAIN:MOV SEC,#56H ;秒赋值MOV MIN,#51H ;分赋值MOV HOU,#22H ;时赋值MOV WEEK,#01H ;星期赋值MOV DATE,#01H ;日赋值MO

5、V MON,#2H ;月份赋值MOV YEAR,#10H ;年份初始值MOV TMMP1,#21H ;温度小数点前初始值MOV TMMP2,#23H ;温度小数点后初始值MOV R0,#060H ;显存初始地址MOV R1,#0A0H ;缓存初始地址MOV R2,#05H ;显示画面一MOV R3,#01H ;移动变量显示控制MOV R4,#01H ;20 分之一秒MOV SP,#0DFH ;堆栈指向 0E0HCALL CLEAR ;显存请屏MOV TMOD,#01H ;选择定时器及定时器工作方式MOV TH0,#03CH ;MOV TR0,#0B0H ;设置为 500MSSETB TR0 ;

6、开始定时器 0 计时SETB EA ;中断总开关开SETB ET0 ;定时器开CALL LONG ;选择移动图案的长度及显示长度CALL STARTDPTR ;移动图案首地址MOV A,DPH ;MOV DPH0,A ;MOV A,DPL ;MOV DPL0,A ;因为后面要用到 DPTR 所以这先把 DPTR 保存起来LOOP:MOV R2,#01HLOOP1:CALL PUTIN1CALL PROCESSCALL DISPLAY ;调用显示程序CALL DISPLAY ;MOV A,SECCJNE A,#015H,LOOP1MOV R2,#02HMOV R3,#01H ;变量选择从头开始C

7、ALL LONG ;选择移动图案的长度及显示长度CALL STARTDPTR ;移动图案首地址MOV A,DPH ;MOV DPH0,A ;MOV A,DPL ;MOV DPL0,A ;因为后面要用到 DPTR 所以这先把 DPTR 保存起来LOOP2:CALL PROCESSCALL PUTIN2 ;CALL PUTIN22_ ;CALL ORLLCALL DISPLAY ;调用显示程序CALL DISPLAY ;MOV A,SECCJNE A,#030H,LOOP2MOV R2,#04HLOOP3:CALL PROCESSCALL PUTIN3 ;CALL PUTIN32 ;CALL OR

8、LL ;合成 PUTIN3 画面与PUTIN32 画面CALL DISPLAY ;调用显示程序CALL DISPLAYMOV A,SEC ;CJNE A,#045H,LOOP3MOV R2,#05HMOV R3,#01H ;变量选择从头开始CALL LONG ;选择移动图案的长度及显示长度CALL STARTDPTR ;移动图案首地址MOV A,DPH ;MOV DPH0,A ;MOV A,DPL ;MOV DPL0,A ;因为后面要用到 DPTR 所以这先把 DPTR 保存起来LOOP4:CALL PROCESSCALL PUTIN4 ;CALL PUTIN22_ ;CALL ORLL ;C

9、ALL DISPLAY ;调用显示程序CALL DISPLAYMOV A,SEC ;CJNE A,#000H,LOOP4AJMP LOOP ;-;子程序名称:CLEAR().;功能:显存清零;输入:.;输出:.;影响:.;-CLEAR:MOV R0,#00HINC R0CJNE R0,#0A0H,CLEAR ;显存清零MOV R0,#060HRET;-;#;#四种时间画面的赋值#;#;-;-;子程序名称:PUTIN1().;功能:画面一的 RAM 赋值;输入:.;输出:.;影响:.;-PUTIN1:CALL EMPTY ;RAM 写入两个空值MOV A,HOU ;取出时值CALL FIGURE

10、 ;数字写入 RAMCALL POINT1MOV A,MIN ;取出分值CALL FIGURE ;数字写入 RAMCALL EMPTYRET;-;子程序名称:PUTIN2().;功能:画面二的 RAM 赋值;输入:.;输出:.;影响:.;-PUTIN2:CALL EMPTYMOV A,HOU ;取出时值CALL FIGURE ;数字写入 RAMCALL POINT2MOV A,MIN ;取出分值CALL FIGURE ;数字写入 RAMCALL EMPTYCALL EMPTYCALL EMPTYINC R2 ;秒大显示大小有变化MOV A,SEC ;取出秒值CALL FIGURE ;数字写入

11、RAMDEC R2RET;-;子程序名称:PUTIN3().;功能:画面三的 RAM 赋值;输入:.;输出:.;影响:.;-PUTIN3:MOV A,HOU ;取出时值CALL FIGURE ;数字写入 RAMCALL POINT3MOV A,MIN ;取出分值CALL FIGURE ;数字写入 RAMCALL EMPTYCALL EMPTYMOV A,SEC ;取出秒值CALL FIGURE ;数字写入 RAMRET;-;子程序名称:PUTIN4().;功能:画面四的 RAM 赋值;输入:.;输出:.;影响:.;-PUTIN4:CALL EMPTYCALL EMPTYCALL EMPTYMO

12、V A,HOU ;取出时值CALL FIGURE ;数字写入 RAMCALL POINT4MOV A,MIN ;取出分值CALL FIGURE ;数字写入 RAMCALL EMPTYCALL EMPTYMOV A,SEC ;取出秒值CALL FIGURE ;数字写入 RAMCALL EMPTYCALL EMPTYCALL EMPTYRET;-;#;#其他数据写入RAM#;#;-;-;子程序名称:PUTIN22().;功能:;输入:.;输出:.;影响:.;-PUTIN22_: ;MOV A,DPH0 ;MOV DPH,A ;MOV A,DPL0 ;MOV DPL,A ;把 DPTR0 中的值释放

13、出来PUTIN22: ;MOV R1,#0A0H ;MOV A,#00H ;MOVC A,A+DPTR ;CJNE A,#0EEH,PUTIN22_2 ;判断移动固定图案是否取完MOV A,R3CJNE A,COMR3,PUTIN22_1 ;判断整个移动图案是否取完MOV R3,#01H ;控制移动变量的取值CALL STARTDPTR ;移动字幕的初始地址AJMP PUTIN22 ;回到本开始PUTIN22_1:INC DPTR ;固定图案写完,使指针指向下一图案开始MOV A,DPHMOV DPH2,AMOV A,DPLMOV DPL2,A ;保存下一图案的指针到DPH2 和 DPL2CA

14、LL PUTCHAR ;利用 R3 选择出要显示的变量,并提取出变量的十位和个位MOV A,MGAO ;CALL TAKE ;换算出对应的首地址MOV MGAO,#0FFH ;十位显示完后做标记AJMP PUTIN22 ;回到本开始PUTIN22_2:MOV A,#00HMOVC A,A+DPTRCJNE A,#0BBH,PUTIN22_5 ;判断变量是否显示完毕MOV A,MDI ;提取个位CJNE A,#0FFH,PUTIN22_3 ;判断个位是否已经显示AJMP PUTIN22_4 ;显示过则跳到固定图案PUTIN22_3:MOV A,MDI ;MOV MDI,#0FFH ;CALL T

15、AKE ;AJMP PUTIN22 ;回到本开始PUTIN22_4:INC R3 ;指向下一固定图案MOV A,DPH2MOV DPH,AMOV A,DPL2MOV DPL,A ;取出保存的指针AJMP PUTIN22 ;回到本开始;-;子程序名称:PUTIN22_5().;功能:整屏显示;输入:.;输出:.;影响:.;-PUTIN22_5:PUSH MGAO ;PUSH MDI ;PUSH DPH ;PUSH DPL ;MOV A,R3 ;PUSH A ;MOV A,DPH2MOV DPH1,AMOV A,DPL2MOV DPL1,A ;变量的保存PUTIN22_6: ;MOV A,#00H

16、 ;MOVC A,A+DPTR ;CJNE A,#0EEH,PUTIN22_8 ;判断移动图案显示是否完成MOV A,R3CJNE A,COMR3,PUTIN22_7 ;判断整个移动图案是否显示完毕MOV R3,#01H ;变量控制字复位CALL STARTDPTR ;移动固定图案的首地址AJMP PUTIN22_6 ;回到初始位置PUTIN22_7: ;INC DPTR ;指向下一固定图案的首地址MOV A,DPH ;MOV DPH1,A ;MOV A,DPL ;MOV DPL1,A ;保存指针CALL PUTCHAR ;MOV A,MGAO ;CALL TAKE ;MOV MGAO,#0F

17、FH ;标记十位,表示已经显示AJMP PUTIN22_6 ;回到初始位置PUTIN22_8: ;MOV A,#00H ;MOVC A,A+DPTR ;CJNE A,#0BBH,PUTIN22_11 ;判断变量已经显示完毕MOV A,MDI ;CJNE A,#0FFH,PUTIN22_9 ;判断变量已经完全显示完毕AJMP PUTIN22_10 ;PUTIN22_9: ;MOV A,MDI ;显示个位MOV MDI,#0FFH ;CALL TAKE ;AJMP PUTIN22_6 ;回到初始位置PUTIN22_10: ;INC R3 ;指向下一固定图案MOV A,DPH1 ;MOV DPH,A

18、 ;MOV A,DPL1 ;MOV DPL,A ;取出固定图案指针AJMP PUTIN22_6 ;回到初始位置PUTIN22_11: ;RAM 赋值MOV A,#00H ;MOVC A,A+DPTR ;MOV R1,A ;INC R1 ;INC DPTR ;MOV A,R1CJNE A,COMR1,PUTIN22_6 ;判断整屏显示是否已完成CALL ADDWEEK ;画面二中有静止的星期显示POP A ;MOV R3,A ;POP DPL ;POP DPH ;INC DPTR ;INC DPTR ;为达到移动效果MOV A,DPHMOV DPH0,AMOV A,DPLMOV DPL0,APO

19、P MDI ;POP MGAO ;数据从堆栈弹出MOV R1,#0A0HRET ;-;子程序名称:PUTIN32().;功能:画面三中温度的合成;输入:.;输出:.;影响:.;-PUTIN32:MOV R0,#0A0H ;CALL EMPTY ;CALL EMPTY ;DEC R2 ;DEC R2 ;MOV A,TMMP1 ;CALL FIGURE ;CALL POINT32 ;MOV A,TMMP2 ;CALL FIGURE ;CALL CHAR_C ;MOV R0,#060H ;INC R2 ;INC R2 ;RET ;-;#;#缓存与显存相或#;#;-;-;子程序名称:ORLL().;功

20、能:缓存与显存相或.;输入:.;输出:.;影响:.;-ORLL:MOV R0,#060H ;MOV R1,#0A0H ;ORLL1:MOV A,R1 ;ORL A,R0 ;MOV R0,A ;INC R0 ;INC R1 ;CJNE R0,#0A0H,ORLL1 ;MOV R0,#060H ;MOV R1,#0A0H ;RET ;-;#;#一列空格#;#;-;-;子程序名称:EMPTY().;功能:连续写入两个0到 RAM.;输入:00H.;输出:R0=0.;影响:DPTR,R0,R0.;-EMPTY:MOV R0,#00HINC R0MOV R0,#00HINC R0RET;-;#;#时间计

21、算#;#;-;-;子程序名称:PROCESS().;功能:时间换算程序.;输入:.;输出:.;影响:.;-PROCESS:MOV A,SECCJNE A,#060H,PROCESSENDMOV SEC,#00HINC MINMOV A,MINDA AMOV MIN,ACJNE A,#060H,PROCESSENDMOV MIN,#00HINC HOUMOV A,HOUDA AMOV HOU,ACJNE A,#024H,PROCESSENDMOV HOU,#00HINC WEEKMOV A,WEEKCJNE A,#08H,PROCESS1MOV WEEK,#01HPROCESS1:INC DAT

22、EMOV A,DATEDA ALCALL MAXDATEMOV A,DATECJNE A,MAX,PROCESSENDMOV DATE,#01HINC MONMOV A,MONDA AMOV MON,ACJNE A,#013H,PROCESSENDMOV MON,#01HINC YEARMOV A,YEARDA AMOV YEAR,APROCESSEND:RET;-;子程序名称:MAXDATE().;功能:算出每月的最多天数.;输入:.;输出:?;影响:.;-MAXDATE:MOV A,MONDEC AMOV B,#05H ;MUL AB ;MOV DPTR,#MAXDATE1 ;JMP A+

23、DPTR ;MAXDATE1: ;MOV MAX,#032H ;因为主程序是相等则循序执行所以这里用的是月最大天数加一AJMP MAXDATEEND ;MOV MAX,#031H ;AJMP MAXDATEEND ;MOV MAX,#032HAJMP MAXDATEENDMOV MAX,#031HAJMP MAXDATEENDMOV MAX,#032HAJMP MAXDATEENDMOV MAX,#031HAJMP MAXDATEENDMOV MAX,#032HAJMP MAXDATEENDMOV MAX,#032HAJMP MAXDATEENDMOV MAX,#031HAJMP MAXDATEENDMOV MAX,#032HAJMP MAXDATEENDMOV MAX,#031HAJMP MAXDATEENDMOV MAX,#032HAJMP MAXDATEENDMAXDATEEND:RET;-;#;#代表秒的点#;#

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报