📄 33-0 万年历时钟程序.asm
字号:
;//****************************************************
;//*文件名:万年历时钟程序
;//*创建人:巫升辉
;//*2006.2.25
;//* 功能:运用定时器定时和液晶显示功能,运行程序时液晶显
; 示时钟并走动
;//* 接线:最小系统的P0口和P1口分别接液晶模块的P0口和P1口
;//****************************************************
XPOS EQU 20H ;列方向地址指针(用于LCDPOS子程序)
YPOS EQU 21H ;行方向地址指针(用于LCDPOS子程序)
YearH EQU 30H
YearL EQU 31H
MonthH EQU 32H
MonthL EQU 33H
DayH EQU 34H
DayL EQU 35H
WeekL EQU 36H
HourH EQU 37H
HourL EQU 38H
MinuteH EQU 39H
MinuteL EQU 3AH
SecondH EQU 3BH
SecondL EQU 3CH
Year EQU 40H ;年寄存器
Month EQU 41H ;月寄存器
Day EQU 42H ;日寄存器
Week EQU 43H ;星期寄存器
Hour EQU 44H ;时寄存器
Minute EQU 45H ;分寄存器
Second EQU 46H ;秒寄存器
Status EQU 50H ;状态寄存器
OUTBIT equ 7F02h ; 位控制口
OUTSEG equ 7F01h ; 段控制口
CTL equ 7F00H ;控制口
ConterSoft EQU 55H ;定时计数值
RSPIN BIT P1.0
RWPIN BIT P1.1
EPIN BIT P1.2
CS1PIN BIT P1.3
CS2PIN BIT P1.4
LCDRST BIT P1.5
ORG 0000H
LJMP START
ORG 000BH
LJMP T0Int ;T0中段入口
;=====================系统初始化==================================
START:
MOV Year, #06 ;设置年
MOV Month, #11 ;设置月
mov day ,#1 ;设置日
mov week, #5 ;设置星期
mov Hour, #16 ;设置时
mov Minute, #0 ;设置分
mov Second, #0 ;设置秒
MOV Status,#0C2H ; 设置方式
MOV SP,#60H
LCALL LCDRESET ; 控制器复位
MOV A,#00H
LCALL LCDFILL ; 控制器清屏
mov TMOD, #01h ; 模式2, 定时器
MOV TL0,#00H ; 11.0592晶振
MOV TH0,#4CH
MOV ConterSoft,#20 ; 50ms*20
mov IE, #10000010b ; EA=1, IT0 = 1
setb TR0 ; 启动定时器0
MOV A,#3
MOV DPTR,#CTL
MOVX @DPTR,A
MLOOP:
LCALL ToDisplay
LCALL LCD_DISPLAY_TIME
LJMP MLOOP
;=====================定时器中断服务程序==================================
T0Int:
CLR EA
PUSH ACC
MOV A,ConterSoft
DEC A
MOV ConterSoft,A
JnZ Exit ;软件计数,次数不到返回,不为零时则转移
Goon: MOV ConterSoft,#20;50ms*20
inc Second
mov a, Second
cjne a, #60, Exit ;秒处理
mov Second, #0
inc Minute
mov a, Minute
cjne a, #60, Exit ;分处理
mov Minute, #0
inc Hour
mov a, Hour
cjne a, #24, Exit ;时处理
mov Hour, #0
inc day
inc week
mov a, week
cjne a, #7, oo ;天,星期处理
oo: mov week, #0
mov a,day
cjne a, #30, Exit
mov day, #1
INC Month
mov a,Month
cjne a, #13, Exit
mov Month, #1
INC Year
Exit:
MOV TL0,#00H
MOV TH0,#4CH
SETB ET0 ;允许T0中断
SETB TR0
SETB EA
POP ACC
RETI
;===================================================================
ToDisplay:
MOV A,Year ;年
MOV B,#10
DIV AB
MOV YearH,A
MOV YearL,B
MOV A,Month ;月
MOV B,#10
DIV AB
MOV MonthH,A
MOV MonthL,B
MOV A,Day ;日
MOV B,#10
DIV AB
MOV DayH,A
MOV DayL,B
MOV WeekL,Week ;星期
MOV A,Hour ;时
MOV B,#10
DIV AB
MOV HourH,A
MOV HourL,B
MOV A,Minute ;分
MOV B,#10
DIV AB
MOV MinuteH,A
MOV MinuteL,B
MOV A,Second ;秒
MOV B,#10
DIV AB
MOV SecondH,A
MOV SecondL,B
RET
;===================================================================
LCD_DISPLAY_TIME:
MOV DPTR,#Shi ;汉字库首地址
MOV XPOS,#0
MOV YPOS,#0
LCALL PUTCHARDOT ;显示一个汉字 时
LCALL PUTCHARDOT
MOV DPTR,#Zhong
LCALL PUTCHARDOT ;显示一个汉字 钟
LCALL PUTCHARDOT
MOV DPTR,#Number10
LCALL PUTCHARDOT ;显示一个字符 :
MOV XPOS,#24
MOV YPOS,#2
MOV DPTR,#Number2
LCALL PUTCHARDOT ;显示一个数字2
MOV DPTR,#Number0
LCALL PUTCHARDOT ;显示一个数字0
MOV A,YearH
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV A,YearL
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV DPTR,#Number11
LCALL PUTCHARDOT ;显示一个数字/
MOV A,MonthH
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV A,MonthL
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV DPTR,#Number11
LCALL PUTCHARDOT ;显示一个字符 /
MOV A,DayH
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV A,DayL
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV XPOS,#40
MOV YPOS,#4
MOV DPTR,#Xing
LCALL PUTCHARDOT ;显示一个汉字 星
LCALL PUTCHARDOT
MOV DPTR,#Qi
LCALL PUTCHARDOT ;显示一个汉字 期
LCALL PUTCHARDOT
MOV A,WeekL
LCALL FINDWeek
LCALL PUTCHARDOT ;显示一个汉字 一/二/三/四/五/六/天
LCALL PUTCHARDOT
MOV XPOS,#32
MOV YPOS,#6
MOV A,HourH
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV A,HourL
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV DPTR,#Number10
LCALL PUTCHARDOT ;显示一个字符 :
MOV A,MinuteH
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV A,MinuteL
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV DPTR,#Number10
LCALL PUTCHARDOT ;显示一个字符 :
MOV A,SecondH
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
MOV A,SecondL
LCALL FINDDATA
LCALL PUTCHARDOT ;显示一个数字
RET
;===================================================================
FINDDATA: MOV B,#16
MUL AB
MOV DPTR,#Number0
CLR C
ADD A,DPL
MOV DPL,A
MOV A,DPH
ADDC A,#0
MOV DPH,A
RET
FINDWeek: MOV B,#32
MUL AB
MOV DPTR,#Week0
CLR C
ADD A,DPL
MOV DPL,A
MOV A,DPH
ADDC A,#0
MOV DPH,A
RET
;=========================================================================
PUTCHARDOT:
MOV R7,#8
PAC_PA:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -