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

📄 16x1.asm

📁 时间和温度同时拥有,一次满足你两个愿望,而且友好的界面,一定合你心意.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*************************************
;*             伪定义                *
;*************************************   
        RS      BIT  P1.2   ;液晶
        R_W     BIT  P1.1
        ENABLE  BIT  P1.0

        RST     BIT  P2.4   ;DS1302
        IO      BIT  P2.0
        SCLK    BIT  P2.1 
        DB0_DB7 DATA P3

        KEY1    BIT  P0.7   ;键盘
        KEY2    BIT  P0.6
        KEY3    BIT  P0.5
        KEY4    BIT  P0.4

        SEC     EQU  60H    ;存放读取DS1302的时间值单元分配
        MIN     EQU  61H
        HOUR    EQU  62H
        DATE    EQU  63H
        MONTH   EQU  64H
        WEEK    EQU  65H
        YEAR    EQU  66H

        SEC_H   EQU  67H    ;存放待显示的时间值单元分配 
        SEC_L   EQU  68H
        MIN_H   EQU  69H
        MIN_L   EQU  6AH
        HOUR_H  EQU  6BH
        HOUR_L  EQU  6CH
        DATE_H  EQU  6DH
        DATE_L  EQU  6EH
        MONTH_H EQU  6FH
        MONTH_L EQU  70H
        WEEK_H  EQU  71H
        WEEK_L  EQU  72H
        YEAR_H  EQU  73H
        YEAR_L  EQU  74H 
;*************************************
;*            中断入口               *
;*************************************
        ORG  0000H
        LJMP STRAT
        ORG  0003H
        RETI
        ORG  000BH
        RETI
        ORG  0013H
        RETI
        ORG  001BH
        RETI
        ORG  0023H
        RETI  
        ORG  0030H
;*************************************
;*             主程序                *
;*************************************
STRAT:  MOV  SP,#50H
        LCALL INITIAL           ;液晶初使化
        LCALL CLS               ;清屏
        LCALL SPTIME            ;初使化时间为2000年1月1日,星期6,00:00:00  24小时模式
MAIN:   MOV R0,#SEC             
        LCALL GETTIME           ;获取时间
        LCALL CTIME             ;时间转换,用于显示
        LCALL SHOW              ;显示
        LCALL KEY
        CJNE A,#0FFH,BB         ;有按键跳到BB
        LJMP  MAIN
BB:     CJNE A,#10,MAIN         ;判断是不是*,不是跳出
              
        MOV A,#00001111B
        LCALL WRITE_INSTRUCTION ;写指令
        MOV  A,#10000000B       ;第一行第6个位置    
        LCALL WRITE_INSTRUCTION ;写指令

CC:     LCALL KEY
        CJNE A,#10,CC

        MOV  A,#10000001B       ;第一行第7个位置    
        LCALL WRITE_INSTRUCTION ;写指令

DD:     LCALL KEY
        CJNE A,#10,DD

        MOV  A,#10000011B       ;第一行第9个位置    
        LCALL WRITE_INSTRUCTION ;写指令

EE:     LCALL KEY
        CJNE A,#10,EE

        MOV  A,#10000100B       ;第一行第10个位置    
        LCALL WRITE_INSTRUCTION ;写指令
FF:     LCALL KEY
        CJNE A,#10,FF

        MOV  A,#10000110B       ;第一行第12个位置    
        LCALL WRITE_INSTRUCTION ;写指令
GG:     LCALL KEY
        CJNE A,#10,GG

        MOV  A,#11000000B       ;第一行第6个位置    
        LCALL WRITE_INSTRUCTION ;写指令
HH:     LCALL KEY
        CJNE A,#10,HH

        MOV  A,#11000001B       ;第二行第6个位置    
        LCALL WRITE_INSTRUCTION ;写指令
II:     LCALL KEY
        CJNE A,#10,II 

        MOV  A,#11000011B       ;第二行第8个位置    
        LCALL WRITE_INSTRUCTION ;写指令
JJ:     LCALL KEY
        CJNE A,#10,JJ 

        MOV  A,#11000100B       ;第二行第9个位置    
        LCALL WRITE_INSTRUCTION ;写指令
KK:     LCALL KEY
        CJNE A,#10,KK 

        MOV  A,#11000110B       ;第二行第11个位置    
        LCALL WRITE_INSTRUCTION ;写指令
LL:     LCALL KEY
        CJNE A,#10,LL 

        MOV  A,#11000111B       ;第二行第12个位置    
        LCALL WRITE_INSTRUCTION ;写指令
MM:     LCALL KEY
        CJNE A,#10,MM 

        MOV  A,#00001100B       ;第二行第12个位置    
        LCALL WRITE_INSTRUCTION ;写指令

        LJMP MAIN     
;*************************************
;*            显示部分               *
;*************************************
SHOW:   MOV A,#10000000B        ;第一行第9个位置    月
        LCALL WRITE_INSTRUCTION ;写指令
        MOV R1,#MONTH_H
        LCALL PR_R1             ;显示

        MOV  A,#10000010B       ;第一行第11个位置    -
        LCALL WRITE_INSTRUCTION ;写指令
        MOV DPTR,#LINE2         
        LCALL PR_DPTR           ;显示

        MOV A,#10000011B        ;第一行第12个位置   日
        LCALL WRITE_INSTRUCTION ;写指令
        MOV R1,#DATE_H
        LCALL PR_R1             ;显示

        MOV A,#10000110B        ;第一行第6个位置   周
        LCALL WRITE_INSTRUCTION ;写指令
        MOV R1,#WEEK_L
        LCALL PR_R2             ;显示

        MOV A,#11000000B         ;第一行第8个位置   时
        LCALL WRITE_INSTRUCTION ;写指令
        MOV R1,#HOUR_H
        LCALL PR_R1             ;显示

       MOV  A,#11000010B       ;第一行第10个位置  :
       LCALL WRITE_INSTRUCTION ;写指令
       MOV DPTR,#LINE4         
       LCALL PR_DPTR           ;显示

       MOV A,#11000011B        ;第一行第11个位置   分
       LCALL WRITE_INSTRUCTION ;写指令
       MOV R1,#MIN_H
       LCALL PR_R1             ;显示

       MOV  A,#11000101B       ;第一行第13个位置  :
       LCALL WRITE_INSTRUCTION ;写指令
       MOV DPTR,#LINE4         
       LCALL PR_DPTR           ;显示

       MOV A,#11000110B        ;第一行第14个位置   秒
       LCALL WRITE_INSTRUCTION ;写指令
       MOV R1,#SEC_H
       LCALL PR_R1             ;显示
       RET
;*************************************
;*         时间初使用化              *
;*************************************
;2000年1月1日,星期6,00:00:00  24小时模式
SPTIME: MOV SEC,#55H
        MOV MIN,#59H
        MOV HOUR,#23H
        MOV DATE,#31H
        MOV MONTH,#12H
        MOV WEEK,#07H
        MOV YEAR,#03H
        MOV R0,#SEC
        LCALL SETTIME
        RET
;*************************************
;*            时间转换               *
;*************************************
CTIME:  MOV R0,#SEC
        MOV R1,#SEC_H
        MOV R3,#07H       ;
CL:     MOV A,@R0
        SWAP A            ;高4位转入低4位
        SETB 01H          ;标致位(高4位转完?)
CH:     ANL A,#0FH        ;屏蔽高4位
        ADD A,#30H        ;转换成ASCII码
        MOV @R1,A         ;存入显示单元
        INC R1
        CPL 01H
        MOV A,@R0
        JNB 01H,CH
        INC R0
        DJNZ R3,CL
        RET

;****************************************************************************
;**********************************液晶显示驱动******************************
;**************************************************************************** 
;
;*************************************
;*              清屏                 *
;*************************************
CLS:    MOV A,#01H
        LCALL WRITE_INSTRUCTION
        RET
;*************************************
;*             初使化                *
;*************************************
;Initial子程式
;设定LCM使用8BITS汇流排、显示两行、使用
;5*7字型、显示器要显示、不要光标
Initial:MOV A,#00111000B
        LCALL WRITE_INSTRUCTION
        MOV A,#00001100B
        LCALL WRITE_INSTRUCTION
        MOV A,#00000110B
        LCALL WRITE_INSTRUCTION
        RET
;*************************************
;*CheckBusy子程式                    *
;*************************************
;等待LCM有空可以执行下一个命令
CheckBusy:     PUSH ACC
CheckBusyLOOP: CLR ENABLE
               SETB R_W
               CLR  RS
               SETB ENABLE
               MOV  A,DB0_DB7
               CLR ENABLE
               JB  ACC.7,CheckBusyLOOP
               POP ACC
               LCALL DL250US
               RET
;*************************************
;*    Write_Instruction子程式        *
;*************************************
;将ACC内的资料输入到LCM的IR寄存器
Write_Instruction:LCALL  CHECKBUSY
                  CLR ENABLE
                  CLR R_W
                  CLR RS
                  SETB ENABLE
                  MOV DB0_DB7,A
                  CLR ENABLE
                  RET
;*************************************
;*        writelcddata子程式         *
;*************************************
;将ACC内的资料输入到LCM的DR寄存器
WriteLCDData:     LCALL CHECKBUSY
                  CLR ENABLE
                  CLR R_W

⌨️ 快捷键说明

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