⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 33-0 万年历时钟程序.asm

📁 keiluvision 3的单片机汇编语言程序 非常有用!! 是关于万年历时钟的控制
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;//****************************************************
;//*文件名:万年历时钟程序

;//*创建人:巫升辉 

;//*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 + -