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

📄 万年历串口程序.txt

📁 51单片机与金鹏的12864液晶
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS33
		RET
LGS4:		MOV	DPTR,#TAB04		;显示汉字和字符
		MOV	COUNT,#02H
		MOV	A,#8CH
		MOV	DA_IN,A
		CLR	RS_STU
		LCALL	SERIAL_WR
;		LCALL	SEND_I
LGS44:		CLR	A
		MOVC	A,@A+DPTR
		MOV	DA_IN,A
		SETB	RS_STU
		LCALL	SERIAL_WR
;		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS44
		RET
LGS5:		MOV	DPTR,#TAB05		;显示汉字和字符
		MOV	COUNT,#02H
		MOV	A,#9AH		
		MOV	DA_IN,A
		CLR	RS_STU
		LCALL	SERIAL_WR		
;		LCALL	SEND_I
LGS55:		CLR	A
		MOVC	A,@A+DPTR
		MOV	DA_IN,A
		SETB	RS_STU
		LCALL	SERIAL_WR		
;		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS55
		RET
LGS6:		MOV	DPTR,#TAB06		;显示汉字和字符
		MOV	COUNT,#02H
		MOV	A,#9DH
		MOV	DA_IN,A
		CLR	RS_STU
		LCALL	SERIAL_WR
;		LCALL	SEND_I
LGS66:		CLR	A
		MOVC	A,@A+DPTR
		MOV	DA_IN,A
		SETB	RS_STU
		LCALL	SERIAL_WR			
;		LCALL	SEND_D
		INC	DPTR
		DJNZ	COUNT,LGS66
		RET
;***********************************************

;18B20子程序
;**********************************************

WENDU:  JNB            TEMPONEOK,MAIN2  ;上电时先温度转换一次	     
        LCALL          READTEMP1        ;读出温度值子程序
        LCALL          CONVTEMP         ;温度BCD码计算子程序
        LCALL          DISPBCD          ;显示区BCD码温度值刷新子程序
        CLR            TEMPONEOK
        RET
MAIN2:  LCALL          READTEMP         ;温度转换开始
        SETB           TEMPONEOK
        SJMP           WENDU
;************************************************
;       子程序区
;*************************************************
INITDS1820:  SETB           TEMPDIN   ;         DS18B20的复位
             NOP 
             NOP
             CLR            TEMPDIN
             MOV            R6,#0A0H
             DJNZ           R6,$
             MOV            R6,#0A0H
             DJNZ           R6,$
             SETB           TEMPDIN
             MOV            R6,#32H
             DJNZ           R6,$
             MOV            R6,#3CH
LOOP1820:    MOV            C,TEMPDIN
             JC             INITDS1820OUT           
             DJNZ           R6,LOOP1820
             MOV            R6,#064H
             DJNZ           R6,$
             SJMP           INITDS1820              
             RET
INITDS1820OUT:
             SETB            TEMPDIN
             RET
;**************************************************************
;读DS18B20,从18B20中读出一个字节的数据
;********************************************************************
READDS1820:  MOV            R7,#08H
             SETB           TEMPDIN
             NOP
             NOP
READDS1820LOOP:
             CLR            TEMPDIN
             NOP
             NOP
             NOP
             SETB           TEMPDIN
             MOV            R6,#07H
             DJNZ           R6,$
             MOV            C,TEMPDIN
             MOV            R6,#3CH
             DJNZ           R6,$
             RRC            A
             SETB           TEMPDIN
             DJNZ           R7,READDS1820LOOP
             MOV            R6,#3CH
             DJNZ           R6,$
             RET
;写DS18B20的程序
;****************************************************
WRITEDS1820: MOV            R7,#08H
             SETB           TEMPDIN
             NOP
             NOP
WRITEDS1820LOP:
             CLR            TEMPDIN
             MOV            R6,#07H
             DJNZ           R6,$
             RRC            A
             MOV            TEMPDIN,C
             MOV            R6,#34H
             DJNZ           R6,$
             SETB           TEMPDIN
             DJNZ           R7,WRITEDS1820LOP
             RET
;********************************************************
READTEMP:    LCALL          INITDS1820            ;复位
             MOV            A,#0CCH               ;跳过ROM匹配
             LCALL          WRITEDS1820
             MOV            R6,#34H
             DJNZ           R6,$
             MOV            A,#44H                ;温度转换命令
             LCALL          WRITEDS1820
             MOV            R6,#34H
             DJNZ           R6,$
             RET
READTEMP1:   LCALL          INITDS1820                    ;
             MOV            A,#0CCH
             LCALL          WRITEDS1820
             MOV            R6,#34H
             DJNZ           R6,$
             MOV            A,#0BEH
             LCALL          WRITEDS1820
             MOV            R6,#34H
             DJNZ           R6,$
             MOV            R5,#09H
             MOV            R0,#TEMPHEAD
             MOV            B,#00H
READTEMP2:   LCALL          READDS1820
             MOV            @R0,A                 ;)))))))))))))0
             INC            R0
READTEMP21:  LCALL          CRC8CAL
             DJNZ           R5,READTEMP2
             MOV            A,B
             JNZ            READTEMPOUT
             MOV            A,TEMPHEAD+0
             MOV            TEMPL,A
             MOV            A,TEMPHEAD+1
             MOV            TEMPH,A
READTEMPOUT: RET
;************************************************************
;处理温度BCD码子程序
;***************************************************
CONVTEMP:    MOV            A,TEMPH
             ANL            A,#80H
             JZ             TEMPC1
             CLR            C
             MOV            A,TEMPL
             CPL            A
             ADD            A,#01H
             MOV            TEMPL,A
             MOV            A,TEMPH         ;    -------------------
             CPL            A
             ADDC           A,#00H
             MOV            TEMPH,A          ;     符号位
             MOV            TEMPHC,#0BH      ;&&&&&&&&&&&&&&&
             SJMP           TEMPC11
TEMPC1:      MOV            TEMPHC,#0AH     
TEMPC11:     MOV            A,TEMPHC
             SWAP           A
             MOV            TEMPHC,A
             MOV            A,TEMPL
             ANL            A,#0FH           ;乘0。0625
             MOV            DPTR,#TEMPDOTTAB
             MOVC           A,@A+DPTR
             MOV            TEMPLC,A         ;TEMPLC  LOW=  小数部分BCD
;
             MOV            A,TEMPL           ;整数部分
             ANL            A,#0F0H
             SWAP           A
             MOV            TEMPL,A
             MOV            A,TEMPH
             ANL            A,#0FH
             SWAP           A
             ORL            A,TEMPL
             MOV            1FH,TEMPL
             LCALL          HEX2BCD1
             MOV            TEMPL,A
             ANL            A,#0F0H
             SWAP           A
             ORL            A,TEMPHC         ;TEMPHC     LOW =十位数BCD
             MOV            TEMPHC,A
             MOV            A,TEMPL
             ANL            A,#0FH
             SWAP           A                ;TEMPHC    HI=个位数BCD码
             ORL            A,TEMPLC
             MOV            TEMPLC,A
             MOV            A,R7
             JZ             TEMPC12
             ANL            A,#0FH
             SWAP           A
             MOV            R7,A
             MOV            A,TEMPHC         ;TEMPHC     HI=百位数BCD
             ANL            A,#0FH
             ORL            A,R7
             MOV            TEMPHC,A
TEMPC12:     RET
;****************************************************************
;小数部分码表
;********************************************
TEMPDOTTAB:  DB             00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
             DB             06H,07H,08H,08H,09H,09H
;************************************************************************
;显示区BCD码温度刷新子程序
;*****************************
DISPBCD:     MOV            A,TEMPLC
             ANL            A,#0FH
             MOV            10H,A  
             MOV            A,TEMPLC
             SWAP           A
             ANL            A,#0FH
             MOV            11H,A
             MOV            A,TEMPHC 
             ANL            A,#0FH
             MOV            12H,A
             MOV            A,TEMPHC
             SWAP           A
             ANL            A,#0FH
             MOV            13H,A
             MOV            A,TEMPHC
             ANL            A,#0F0H
             CJNE           A,#010H,DISPBCD0
             SJMP           DISPBCD2
DISPBCD0:    MOV            A,TEMPHC
             ANL            A,#0FH
             JNZ            DISPBCD2           ;十位数是0
             MOV            A,TEMPHC
             SWAP           A
             ANL            A,#0FH
             MOV            13H,#0AH           ;符号位不显示
             MOV            12H,A              ;十位数显示符号7
DISPBCD2:    RET
;********************************************
;显示子程序
;**********************************************
DISP1:       MOV            R1,#10H        
             MOV            R5,#0FEH       
PLAY:        MOV            7FH,#0FFH      ;P1=7FH
             MOV            A,R5
             MOV            P3,A
             MOV            A,@R1
             MOV            DPTR,#TAB
             MOVC           A,@A+DPTR
             MOV            7FH,A   
             MOV            A,R5
            JB             ACC.1,LOOP5
;             CLR            P1.7
LOOP5:       LCALL          DL1MS
             INC            R1
             MOV            A,R5
             JNB            ACC.3,ENDOUT
             RL             A
             MOV            R5,A
             AJMP           PLAY
ENDOUT:      MOV            7FH,#0FFH       ;7FH=P1
             MOV            7EH,#0FFH       ;7EH=P3
	                  RET
TAB:         DB             0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
;***********************************************************************************
DL1MS:       MOV            R6,#14H
DL1:         MOV            R7,#19H
DL2:         DJNZ           R7,DL2
             DJNZ           R6,DL1
             RET
;************************************************************************************
;单字节十六进制转BCD
;*****************************************
HEX2BCD1:    MOV            B,#064H
             DIV            AB
             MOV            R7,A
             MOV            A,#0AH
             XCH            A,B
             DIV            AB
             SWAP           A
             ORL            A,B
             RET
;****************************************************
;CRC校检 X^8+X^5+X^4+1
;***************************************************
CRC8CAL:     PUSH           ACC
             MOV            R7,#08H
CRC8LOOP1:   XRL            A,B
             RRC            A
             MOV            A,B
             JNC            CRC8LOOP2
             XRL            A,#18H
CRC8LOOP2:   RRC            A
             MOV            B,A
             POP            ACC
             RR             A
             PUSH           ACC
             DJNZ           R7,CRC8LOOP1
             POP            ACC
             RET
;*****************************************
XIANSHI:MOV     A,#80H	
	MOV	DA_IN,A
	CLR	RS_STU
	LCALL	SERIAL_WR
;        LCALL	SEND_I
	MOV     20H,#05H
        MOV     DPTR,#TAB1             ;显示(温度:)
WENDU1: CLR	A
	MOVC	A,@A+DPTR
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR	
;	LCALL	SEND_D
	INC	DPTR
        DJNZ    20H,WENDU1
        LCALL	DELAY3
	MOV     21H,#03H
WENDU2: CLR     A                       ;显示温度值
        MOV     DPTR,#TAB2
        MOV     A,12H
        MOVC    A,@A+DPTR
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR
;        LCALL	SEND_D
WENDU3: CLR     A                       ;显示温度值
        MOV     A,11H
        MOVC    A,@A+DPTR
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR	
;       LCALL	SEND_D
WENDU4: CLR     A
        MOV     A,#2EH
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR
;        LCALL	SEND_D
WENDU5: CLR     A                       ;显示温度值
        MOV     A,10H
        MOVC    A,@A+DPTR
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR
;        LCALL	SEND_D
WENDU6: MOV     A,#20H
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR
 ;       LCALL	SEND_D
        CLR     A
        MOV     DPTR,#TAB3
        MOVC    A,@A+DPTR
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR
 ;       LCALL	SEND_D
        INC     DPTR
        CLR     A
        MOVC    A,@A+DPTR
	MOV	DA_IN,A
	SETB	RS_STU
	LCALL	SERIAL_WR	
;	LCALL	SEND_D
        LCALL	DELAY3
	RET
;*****************************************
;液晶串口写数据字程序
SERIAL_WR:	PUSH	ACC
		MOV	A,DA_IN
		SETB	CS
		MOV	WR_COUNT1,#05H
		SETB	STD
SERIAL_WR1:	SETB	SCLK
		CLR	SCLK
		DJNZ	WR_COUNT1,SERIAL_WR1		
		CLR	STD
		SETB	SCLK
		CLR	SCLK
		JNB	RS_STU,CLR_RS
		SETB	STD
		SJMP	SETB_RS
CLR_RS:		CLR	STD
SETB_RS:	SETB	SCLK
		CLR	SCLK
		CLR	STD
		SETB	SCLK
		CLR	SCLK
		MOV	WR_COUNT1,#02H
SERIAL_WR2:	MOV	WR_COUNT2,#04H
SERIAL_WR21:	RLC	A
		MOV	STD,C
		SETB	SCLK
		CLR	SCLK
		DJNZ	WR_COUNT2,SERIAL_WR21
		MOV	WR_COUNT2,#04H
		CLR	STD
SERIAL_WR22:	SETB	SCLK
		CLR	SCLK
		DJNZ	WR_COUNT2,SERIAL_WR22
		DJNZ	WR_COUNT1,SERIAL_WR2
		CLR	SCLK
		CLR	CS
;		LCALL	DEL
		POP	ACC
		RET

DELAY3:	MOV	R5,#02H
DEL31:	MOV	R6,#1AH
DEL33:	DJNZ	R6,DEL33
	DJNZ	R5,DEL31
	RET
;**************************************

DEL:	MOV	50H,#08H
DEL1:	MOV	51H,#01FH
DEL2:	MOV	52H,#01FH
DEL3:	DJNZ	52H,DEL3
	DJNZ	51H,DEL2
	DJNZ	50H,DEL1
	RET
;****************************************************

TAB01:	DB '年       ' 
TAB02:	DB '月       '
TAB03:	DB '日       '
TAB04:	DB '周       '
TAB05:	DB '时       '
TAB06:	DB '分       '
TAB07:	DB '秒       '
TAB1:	DB '温度:'
TAB2:   DB '0123456789'
TAB3:   DB  0A1H,0E6H
        END

⌨️ 快捷键说明

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