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

📄 16x1.asm

📁 时间和温度同时拥有,一次满足你两个愿望,而且友好的界面,一定合你心意.
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                  SETB RS
                  SETB ENABLE
                  MOV DB0_DB7,A
                  CLR ENABLE
                  RET
;*************************************
;*           PR_R1子程式             *
;*************************************
;将一个字幕显示在LCM,字串的起地址要存入
;R1,字串必须以00H结束
PR_R1:    PUSH  ACC
          MOV A,@R1
          LCALL WRITELCDDATA
          INC R1
          MOV A,@R1
          LCALL WRITELCDDATA
          POP  ACC
          RET
PR_R2:    PUSH ACC
          MOV A,@R1
          LCALL WRITELCDDATA
          POP ACC
          RET
;*************************************
;*         PR_DPTR子程式             *
;*************************************
;将一个字幕显示在LCM,字串的起地址要存入
;R1,字串必须以00H结束
PR_DPTR:  PUSH  ACC
LOOP:     CLR A
          MOVC A,@A+DPTR
          JZ END_P
          LCALL WRITELCDDATA
          INC DPTR
          JMP LOOP
END_P:    POP  ACC
          RET

;****************************************************************************
;**********************************DS1302驱动程序****************************
;**************************************************************************** 
;时间格式如下:
;     D7   D6   D5   D4   D3   D2   D1   D0  地址
;秒:| CH  |     10秒    |        秒        | 000    CH=1禁止计时,=0开始计时   00~59
;分:|  0  |     10分    |        分        | 001    00~59
;时:|12/24| 0 |A\p | 时 |        时        | 010    D7=1为12小时方式,=0为24小时方式;在12小时方式,D5是A\P选取择
;                                                   在24小时方式,D5是第性个10小时位(20~23);01~12或00~23
;日:|  0  | 0 |  10日   |        日        | 011    01~28/29或01~30或01~31
;月:|  0  | 0 | 0 | 10月|        月        | 100    01~12      
;周:|  0  | 0 | 0 |  0  |  0  |     周     | 101    01~07
;年:|      10年         |        年        | 110    00~99
;*************************************
;*       写一个字节到DS1302          *
;*************************************
; 输入参数A, 占用 R2 
WRBYTE: MOV R2,#08       ; 一个字节有8位
WRBYT1: RRC A
        MOV IO,C
        CLR SCLK
        SETB SCLK
        DJNZ R2,WRBYT1
        RET 
;*************************************
;*        从DS1302读一字节           *
;*************************************
; 输出参数A ,占用R2 
RDBYTE: MOV R2, #08     ; 一个字节有8位
        CLR A
        SETB IO 
RDBYT1: SETB SCLK
        CLR SCLK
        MOV C,IO
        RRC A 
        DJNZ R2,RDBYT1 
        RET 
;*************************************
;*         DS1303复位程序            *
;*************************************
RST1302:CLR SCLK
        CLR RST
        SETB RST
        RET
;*************************************
;*        从DS1302获取时间值         *
;*************************************
; 用到子程序: wrbyte,rdbyte
; 存放时间首址:R0(显示方式为 秒 分 时 日 月 周  年)R0为首址放秒
; 占用: R0,A 
GETTIME:LCALL RST1302    ;复位程序
        MOV A,#0BFH      ;操作指令(时钟/日历多字节(burst)方式),允许多字节读  
;最先8个时间/日历寄存器可以从地址0的第0位开始
        LCALL WRBYTE ;                 写指令
        LCALL RDBYTE ;秒                     
        MOV @R0,A    ;                       
        INC R0
        LCALL RDBYTE ;分
        MOV @R0,A 
        INC R0
        LCALL RDBYTE ;时
        MOV @R0,A 
        INC R0
        LCALL RDBYTE ;日
        MOV @R0,A 
        INC R0
        LCALL RDBYTE ;月
        MOV @R0,A 
        INC R0
        LCALL RDBYTE ;周
        MOV @R0,A 
        INC R0
        LCALL RDBYTE ;年
        MOV @R0,A 
        INC R0
        LCALL RDBYTE ;在连续读方式下必须读完8个字节
        LCALL RST1302;终止读
        CLR RST
        RET 
;*************************************
;*            设置时间值             *
;*************************************
; 用到子程序: wrbyte,rdbyte
; 初使时间首址:R0(显示方式为 秒 分 时 日 月 周  年)R0为首址放秒
; 占用: R0,A 
SETTIME:LCALL RST1302
;控制寄存器
;{ D7       D6 __      D5 D4 D3 D2 D1    D0 _}
;{ 1   ,   RAM/CK,     A4,A3,A2,A1,A0,  RAM/K}
;|0才能  | 0(存取日历)|<----地址---->|  0(写)|
;|写数据 | 1(存取RAM) |              |  1(读)|
        MOV A,#8EH         ;控制寄存器(指令)
        LCALL WRBYTE 
;设定允许写数据操作
;写入命令操作(80H,禁止写;00H,允许写)
        CLR A              ;00H,允许写
        LCALL WRBYTE 
        LCALL RST1302      ;复位停止操作
;设定备用电池充电模式
;写入命令操作[d4~d7=1010使用充电器,d4~d7<>1010不使用充电器;
;d2~d3=01使用一个二极管充电d2~d3=10使用两个二极管充电,d2~d3=11或00
;禁止使用充电,与d4~d7无关;d0~d1=00\01\10\11分别为选用充电阻0\2K\4K\8K 
        MOV A,#90H         ;慢速充电寄存器(指令)
        LCALL WRBYTE       ;             
        MOV A,#00H                                                         ;;;;;;;;被改,原先为#0ABH                       
        LCALL WRBYTE       ;使用充电器,用两个二极管充电,选用8K电阻 
        LCALL RST1302      ;复位停止操作
;时钟/日历多字节(burst)方式
;在此方式下,最先8个时间/日历寄存器可以从地址0的第0位开始
;连续地读或写,在这方式下慢速充电寄存器是不可以被访问的
        MOV A,#0BEH        ;时钟/日历多字节(burst)方式
        LCALL WRBYTE       
;开始设定时间,可连续对前8字节进行写
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;秒
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;分
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;时
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;日
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;月
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;周
        MOV A,@R0
        INC R0
        LCALL WRBYTE  ;年
        MOV A,#80H
        LCALL WRBYTE  ;在连续读方式下必须读完8个字节, 开写保护,禁止写数据
        LCALL RST1302
        CLR RST
        RET    

;****************************************************************************
;**********************************键盘**************************************
;**************************************************************************** 
;跳出此子程序时,有按键A=键值,无按键A=0FFH
;按键释放后才会跳出此程序
;4条IO口组成4*3键
;占用A,B键值0-9分别为0-9、#为11、*为10     
KEY: MOV A,#0FFH         ;置键值为0ffh
     LCALL KEYA          ;判断按键
     CJNE A,#0FFH,KEYB   ;无键按下返回
     RET                 ;
KEYB:MOV B,A             ;有键按下将键值存在b中
     LCALL DL20MS        ;调用延时
     LCALL KEYA          ;再调用键盘程序
     CJNE A,B,KE         ;比较相等不等返回
     MOV B,A
KEYF:LCALL KEYA
     CJNE A,#0FFH,KEYF   ;等待键盘释放
     MOV A,B
     RET
KE:  MOV A,#0FFH
     RET
KEYA:SETB KEY1
     SETB KEY2
     SETB KEY3
     SETB KEY4
     CLR KEY1
     JNB KEY2,K11
     JNB KEY3,K0
     JNB KEY4,K10
     SETB KEY1
     CLR KEY2
     JNB KEY1,K9
     JNB KEY3,K8
     JNB KEY4,K7
     SETB KEY2
     CLR KEY3
     JNB KEY1,K6
     JNB KEY2,K5
     JNB KEY4,K4
     SETB KEY3
     CLR KEY4
     JNB KEY1,K3
     JNB KEY2,K2
     JNB KEY3,K1
     SETB KEY4
     MOV A,#0FFH
     RET
K11: MOV A,#11
     RET
K10: MOV A,#10
     RET
K0:  MOV A,#1
     RET
K1:  MOV A,#1
     RET
K2:  MOV A,#2
     RET
K3:  MOV A,#3
     RET
K4:  MOV A,#4
     RET
K5:  MOV A,#5
     RET
K6:  MOV A,#6
     RET
K7:  MOV A,#7
     RET
K8:  MOV A,#8
     RET
K9:  MOV A,#9
     RET
;*************************************
;*              表格                 *
;*************************************
LINE1:  DB  32H,30H,00H        ;20
LINE2:  DB  2DH,00H            ;-
LINE3:  DB  57H,45H,45H,4BH,3AH,00H;WEEK
LINE4:  DB  3AH,00H            ;:
ASC:    DB  30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,2AH,23H;0~9,*,#  (ASCII)
;*************************************
;*            延时程序               *
;*************************************
DL250US:MOV R6,#5
D1:     MOV R7,#248
        DJNZ R7,$
        DJNZ R6,D1    
        RET
DL20MS: MOV R5,#8
D2:     LCALL DL250US
        DJNZ R5,D2
        RET

        END

            

⌨️ 快捷键说明

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