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

📄 12864f.txt

📁 一个完整的12864液晶显示模块的示例程序,主要是一个时钟日历功能
💻 TXT
📖 第 1 页 / 共 2 页
字号:
           XRL      A,#6
           JZ      TIME_PRO_D3
           MOV      A,MONTH
           XRL      A,#9
           JZ      TIME_PRO_D3
           MOV      A,MONTH
           XRL      A,#11
           JZ      TIME_PRO_D3
           MOV      A,DATE
           XRL      A,#32                  ;大月日期31天
           JNZ      TIME_PRO_W
           SJMP      TIME_PRO_M            ;跳转到月处理
TIME_PRO_D3:      MOV      A,DATE
           XRL      A,#31                  ;小月日期30天
           JNZ      TIME_PRO_W
TIME_PRO_M:      MOV      DATE,#1
           INC      MONTH                  ;月处理
           MOV      A,MONTH
           CJNE      A,#13,TIME_PRO_W
           MOV      MONTH,#1
           INC      YEAR                  ;年处理
           MOV      A,YEAR
           CJNE      A,#100,TIME_PRO_W
           MOV      YEAR,#0
TIME_PRO_W:      LCALL      WEEK_PRO            ;星期处理


TIME_PRO_E:

           RET

;**********星期自动运算函数*********************
;星期运算常数W(5或6)
;闰年的数目L(0--99年:L=YEAR/4 整除)
;年数YEAR
;月参变数MONTH_TAB(0,3,3,6,1,4,6,2,5,0,3,5)
;日期DATE
;星期数=(W+L+YEAR+MONTH_TAB+DATE)%7 (求余)

WEEK_PRO:      MOV      A,MONTH                  ;确定星期运算常数W
           XRL      A,#1
           JZ      WEEK_PRO_1
           MOV      A,MONTH
           XRL      A,#2
           JZ      WEEK_PRO_1
           SJMP      WEEK_PRO_2
WEEK_PRO_1:      LCALL      LEAP_PRO
           MOV      C,LEAP
           JNC      WEEK_PRO_2
           MOV      R3,#5
           SJMP      WEEK_PRO_3
WEEK_PRO_2:      MOV      R3,#6
WEEK_PRO_3:      MOV      A,YEAR                  ;计算闰年的数目L
           MOV      B,#4
           DIV      AB
           ADD      A,R3                  ;W+L
           MOV      R3,A
           MOV      A,YEAR
           ADD      A,R3                  ;(W+L)+YEAR
           MOV      R3,A
           MOV      DPTR,#MONTH_TAB
           MOV      A,MONTH
           MOVC      A,@A+DPTR
           ADD      A,R3                  ;(W+L+YEAR)+MONTH_TAB
           MOV      R3,A
           MOV      A,DATE
           ADD      A,R3                  ;(W+L+YEAR+MONTH_TAB+DATE)
           MOV      B,#7
           DIV      AB                  ;余数即为星期数
           MOV      WEEK,B
           RET

;**********闰年的判断函数*********************
;闰年的条件:年(YEAR)能被4整除、但不能被100整除;或者被400整除。
;如果我们只考虑(00--99),则只需考虑年(YEAR)能被4整除即可。
LEAP_PRO:      MOV      A,YEAR
           MOV      B,#4
           DIV      AB
           MOV      A,B
           JZ      LEAP_PRO_1      ;能被4整除
           CLR      LEAP            ;平年,清零LEAP
           LJMP      LEAP_PRO_E
LEAP_PRO_1:      SETB      LEAP            ;闰年,置位LEAP
LEAP_PRO_E:
           RET

;**********更新显示缓冲区********************
;入口R1,
UPDATE_BUF:      MOV      DIS_BUF_U0,#20H;空格
                MOV      DIS_BUF_U1,#20H;空格
           MOV      DIS_BUF_U2,#32H      ;"2"
           MOV      DIS_BUF_U3,#30H      ;"0"
           MOV      A,YEAR            ;更新年数据
           MOV      B,#10
           DIV      AB
           ADD      A,#48            ;二进制转换为ASCMA码
           MOV      DIS_BUF_U4,A
           MOV      A,B
           ADD      A,#48
           MOV      DIS_BUF_U5,A
           MOV      DIS_BUF_U6,#0c4H      ;"-"
              MOV      DIS_BUF_U7,#0eaH;"-"
           MOV      A,MONTH            ;更新月数据
           MOV      B,#10
           DIV      AB
           ADD      A,#48
           MOV      DIS_BUF_U8,A
           MOV      A,B
           ADD      A,#48
           MOV      DIS_BUF_U9,A
           MOV      DIS_BUF_U10,#0d4H      ;"-"
                MOV      DIS_BUF_U11,#0c2H
           MOV      A,DATE            ;更新日数据
           MOV      B,#10
           DIV      AB
           ADD      A,#48
           MOV      DIS_BUF_U12,A
           MOV      A,B
           ADD      A,#48
           MOV      DIS_BUF_U13,A
           MOV      DIS_BUF_U14,#0c8H;空格
                MOV      DIS_BUF_U15,#0d5H;空格




           MOV      DIS_BUF_L0,#0d0h

           MOV      DIS_BUF_L1,#0c7h

           MOV      DIS_BUF_L2,#0c6h

           MOV      DIS_BUF_L3,#0dah

           mov a,week
                cjne a,#1,week1
                mov     DIS_BUF_L4,#0d2h
           MOV      DIS_BUF_L5,#0bbh
                sjmp UPDATE_BUF_2
        week1:cjne a,#2,week2
                 mov   DIS_BUF_L4,#0b6h
           MOV      DIS_BUF_L5,#0feh
                sjmp UPDATE_BUF_2
             week2:cjne a,#3,week3
                 mov   DIS_BUF_L4,#0c8h
           MOV      DIS_BUF_L5,#0fdh
                sjmp UPDATE_BUF_2
           week3:cjne a,#4,week4
                 mov   DIS_BUF_L4,#0cbh
           MOV      DIS_BUF_L5,#0c4h
                sjmp UPDATE_BUF_2
          week4:cjne a,#5,week5
                 mov   DIS_BUF_L4,#0ceh
           MOV      DIS_BUF_L5,#0e5h
                sjmp UPDATE_BUF_2
           week5:cjne a,#6,week6
                 mov   DIS_BUF_L4,#0c1h
           MOV      DIS_BUF_L5,#0f9h
                sjmp UPDATE_BUF_2
           week6:
                 mov   DIS_BUF_L4,#0cch
            MOV      DIS_BUF_L5,#0ech
                   mov DIS_BUF_L6,#' '      ;空格

UPDATE_BUF_2:mov DIS_BUF_L7,#' '      ;空格
                MOV      A,DIS_H
           MOV      B,#10
           DIV      AB
           ADD      A,#48
           MOV      DIS_BUF_L8,A
           MOV      A,B
           ADD      A,#48
           MOV      DIS_BUF_L9,A
           MOV      DIS_BUF_L10,#3AH;":"
           MOV      A,DIS_M
           MOV      B,#10
           DIV      AB
           ADD      A,#48
           MOV      DIS_BUF_L11,A
           MOV      A,B
           ADD      A,#48
           MOV      DIS_BUF_L12,A
           MOV      DIS_BUF_L13,#3AH;":"
           MOV      A,DIS_S
           MOV      B,#10
           DIV      AB
           ADD      A,#48
           MOV      DIS_BUF_L14,A
           MOV      A,B
           ADD      A,#48
           MOV      DIS_BUF_L15,A
           RET

;************显示处理程序*********************
DISPLAY_PRO:      MOV      R0,#00H
           LCALL      LCD_POS
           MOV      R0,DIS_BUF_U0
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U1
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U2
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U3
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U4
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U5
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U6
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U7
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U8
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U9
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U10
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U11
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U12
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U13
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U14
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_U15
           LCALL      LCD_WDAT

           MOV      R0,#90H
           LCALL      LCD_WCMD
           MOV      R0,DIS_BUF_L0
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L1
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L2
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L3
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L4
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L5
           LCALL      LCD_WDAT
           MOV      R0,#' '
           LCALL      LCD_WDAT
           MOV      R0,#' '
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L8
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L9
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L10
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L11
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L12
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L13
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L14
           LCALL      LCD_WDAT
           MOV      R0,DIS_BUF_L15
           LCALL      LCD_WDAT

                 mov r0,#88h       ;奥运有我,加油中国
                lcall lcd_wcmd
                mov dptr,#line2
                mov r7,#10h
                lcall entline
                
                
                mov r0,#98h
                lcall lcd_wcmd
                mov dptr,#line1
                mov r7,#10h
                lcall entline
           RET
               
     

;**********LCD忙标志BF测试程序**************
BF_TEST:      PUSH      ACC            ;保护ACC数据
              CLR     RS              ;RS=0
              SETB    RW              ;RW=1
              SETB    EP              ;E=高电平
           NOP
           NOP
           NOP
           NOP
           MOV      comdat,#0FFH         ;将comdat口置1,保证后面数据正确读入(由 comdat口结构决定)
WT_BF:          NOP                      ;
              JB      comdat.7,WT_BF       ;DB7=0  LCD控制器空闲,DB7=1  LCD控制器忙
              CLR      EP
           POP      ACC              ;释放ACC数据
              RET

;**********LCD指令写入程序******************
;程序入口:R0
LCD_WCMD:      LCALL      BF_TEST            ;检测忙标志
           CLR      RS
           CLR      RW
           CLR      EP
           NOP
           NOP
           MOV      comdat,R0
           NOP
           NOP
           NOP
           NOP
           SETB      EP
           NOP
           NOP
           NOP
           NOP
           CLR      EP
           RET
                ;**************************88
               entline:
            CLR      A
         MOVC A,@A+DPTR       ;查表取数据
            mov r0,a
         LCALL lcd_wdat          ;送显示
         INC      DPTR
            DJNZ r7,entline
         RET

;**********LCD数据写入程序****************
;程序入口:R0
LCD_WDAT:      LCALL      BF_TEST            ;检测忙标志
           SETB      RS
           CLR      RW
           CLR      EP
           NOP
           NOP
           MOV      comdat,R0
           NOP
           NOP
           NOP
           NOP
           SETB      EP
           NOP
           NOP
           NOP
           NOP
           CLR      EP
           RET

;**********LCD数据指针位置子程序**************
;程序入口:R0
LCD_POS:      MOV      A,R0
           ORL      A,#80H
           MOV      R0,A
           LCALL      LCD_WCMD
           RET

;**********延时约5ms子程序********************
;晶振f=11.0592Mhz
;延时时间=(1+(1+2*100+2)*25)*12/11.0592=5507us(约5ms)
DELAY_5ms:      MOV      R7,#25
DELAY1:            MOV      R6,#100
DELAY2:            DJNZ      R6,DELAY2
           DJNZ      R7,DELAY1
           RET

;***********星期自动运算月参变数**************
MONTH_TAB:      DB      0
           DB      0
           DB      3
           DB      3
           DB      6
           DB      1
           DB      4
           DB      6
           DB      2
           DB      5
           DB      0
           DB      3
           DB      5
                line1:db '  加  油  中  国  '
                line2:db '  奥  运  有  我  '
                END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -