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

📄 1302-12232f.asm

📁 时钟温度计(用1302、18B20、12232F显示器)    汇编代码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;
                WRITE:     CLR SCLK
                           NOP
                           SETB RST
                           NOP
                           MOV A,DS1302_ADDR
                           MOV R4,#8
               WRITE1:     RRC A     ;送地址给1302
                           NOP
                           NOP
                           CLR SCLK
                           NOP
                           NOP
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           DJNZ R4,WRITE1
                           CLR SCLK
                           NOP
                           MOV A,DS1302_DATA
                           MOV R4,#8
                WRITE2:    RRC A
                           NOP     ;送数据给1302
                           CLR SCLK
                           NOP
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           DJNZ R4,WRITE2
                           CLR RST
                           RET
;
;******************读1302程序********************;
;
                READ:      CLR SCLK
                           NOP
                           NOP
                           SETB RST
                           NOP
                           MOV A,DS1302_ADDR
                           MOV R4,#8
                READ1:     RRC A    ;送地址给1302
                           NOP
                           MOV IO,C
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           NOP
                           NOP
                           CLR SCLK
                           NOP
                           NOP
                           DJNZ R4,READ1

                           MOV R4,#8
                READ2:     CLR SCLK
                           NOP    ;从1302中读出数据
                           NOP
                           NOP
                           MOV C,IO
                           NOP
                           NOP
                           NOP
                           NOP
                           NOP
                           RRC A
                           NOP
                           NOP
                           NOP
                           NOP
                           SETB SCLK
                           NOP
                           DJNZ R4,READ2
                           MOV DS1302_DATA,A
                           CLR RST
                           RET
;
;
;******************时间显示子程序*******************
TIME:   MOV  A,#80H	       ;第一行左第一个字开始
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE2     ;16*16点阵“时间”
	LCALL WRITE_HZ2
;
TIMEUP:
        MOV  A,#82H	       ;第一行左第5个字开始
	LCALL WRITE_COM
        MOV   R1,#70H           ;将70-79H时间数据查出字码写入LCD
        MOV   DPTR,#TABLE1
        MOV   R2,#0AH          ; 查10次
        MOV   A,#00H
MOVCLOP:MOV   A,@R1            ;
        MOVC  A,@A+DPTR
        LCALL WRITE_DAT
        INC   R1
        DJNZ  R2,MOVCLOP       ;
        RET
;
;***************开机显示画面***********************
LOGON:	MOV  A,#80H	       ;第一行左第一个字开始
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE     ;WORD 16*16点阵TEST
	LCALL WRITE_HZ
        MOV  A,#90H	       ;第二行左第一个字开始
	LCALL WRITE_COM
	MOV  DPTR,#CHINESE1    ;WORD 16*16点阵TEST
	LCALL WRITE_HZ
        CLR   LAMPBLAK         ;开背光灯
        LCALL DELAY5S          ;显示5秒
        SETB  LAMPBLAK         ;关背光灯
        RET
;**********初始化程序*************
SETUP:  LCALL DELAY
        LCALL DELAY
        LCALL DELAY
        LCALL DELAY
	MOV  A,#01H		;CLEAR DISPLAY
	LCALL WRITE_COM
	MOV  A,#00110000B	;FUNCTION SETTING
	LCALL WRITE_COM
	MOV  A,#00000010B	;DDRAM SET TO '00H'
	LCALL WRITE_COM
	MOV  A,#00000100B	;
	LCALL WRITE_COM
	MOV  A,#00001100B	;DISPLAY ON
	LCALL WRITE_COM
	MOV  A,#00000001B	;CLEARING SCREEN
	LCALL WRITE_COM
	MOV  A,#10000000B	;SET DDRAM ADDRESS
	LCALL WRITE_COM
        LCALL DELAY
	LCALL DELAY
	LCALL DELAY
        LCALL DELAY
	RET
;************串行命令写入子程序****************
;写入命令字在A中
WRITE_COM:
	        LCALL DELAY1		;
                SETB  CS
		PUSH  ACC
		MOV  R0,#8
		MOV  A,#11111000B
COMM1:
                CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
                SETB CLK
 		DJNZ R0,COMM1
		POP  ACC
		MOV  R5,A
		ANL  A,#0F0H
		MOV  R0,#8
COMM2:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,COMM2
		MOV  A,R5
		SWAP A
		ANL  A,#0F0H
		MOV  R0,#8
COMM3:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,COMM3
		CLR  CS
	        RET
;
;***********串行数据写入子程序****************
;写入数据字在A中
WRITE_DAT:
		LCALL DELAY1
                SETB CS
		PUSH  ACC
		MOV  R0,#8
		MOV  A,#11111010B
DATA1:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,DATA1
		POP  ACC
		MOV  R5,A
		ANL  A,#0F0H
		MOV  R0,#8
DATA2:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,DATA2
		MOV  A,R5
		SWAP A
		ANL  A,#0F0H
		MOV  R0,#8
DATA3:	        CLR  C
		RLC  A
		MOV  SID,C
		CLR  CLK
		SETB CLK
		DJNZ R0,DATA3
		CLR  CS
	        RET
;
;**************延时子程序**********************
;0.544ms
DELAY1:
	MOV  R7,#010H
D11:	MOV  R6,#010H
	DJNZ R6,$
	DJNZ R7,D11
	RET
;0.13s
DELAY:
	MOV  R1,#00H
D2:	MOV  R2,#00H
	DJNZ R2,$
	DJNZ R1,D2
	RET
;5.2s
DELAY5S:MOV  R3,#28H
DE5S:   LCALL DELAY
        DJNZ R3,DE5S
        RET
;
;************16*16点阵汉字写入子程序共7个***********
WRITE_HZ:		;WRITE 7 CHINESE TO LCD
		MOV  R4,#7
DD:	        CLR  A
		MOVC A,@A+DPTR
		INC  DPTR
		LCALL WRITE_DAT
		CLR  A
		MOVC A,@A+DPTR
		INC DPTR
		LCALL WRITE_DAT
		DJNZ R4,DD
		RET
;************16*16点阵汉字写入子程序共2个***********
WRITE_HZ2:		;WRITE 8 CHINESE TO LCD
		MOV  R4,#2
DD4:	        CLR  A
		MOVC A,@A+DPTR
		INC  DPTR
		LCALL WRITE_DAT
		CLR  A
		MOVC A,@A+DPTR
		INC DPTR
		LCALL WRITE_DAT
		DJNZ R4,DD4
		RET
;
;*****************************16*8点阵的字符代码表**********************************
TABLE1: DB     30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH,20H,2DH,2EH
;               0   1   2   3   4   5   6   7   8   9   :   ;   <   =   > "不显"'-''.'
;**********************************自造字符地址表***********************************
CGRAM1:	DB 000H,000H
CGRAM2:	DB 000H,002H
CGRAM3:	DB 000H,004H
CGRAM4:	DB 000H,006H
;******************"这里是16*16点阵的汉字代码表"************************************
CHINESE:  DW 0DBA0H,0D5E3H,0BDADH,0BAA3H,0D1F3H,0D1A7H,0D4BAH,0DBA0H;—浙江海洋学院—
CHINESE1: DW 0C2A5H,0C8BBH,0C3E7H,0B1CFH,0D2B5H,0C9E8H,0BCC6H,0DBA0H;楼然苗毕业设计—
CHINESE2: DW 0CAB1H,0BCE4H                                          ;时间
CHINESE3: DW 0CEC2H,0B6C8H,0DBA0H,0DBA0H,0DBA0H,0DBA0H,0A1E6H       ;温度----℃
CHINESE4: DW 0B1A8H,0BEAFH,0DBA0H,0DBA0H,0DBA0H,0DBA0H,0A1E6H       ;报警----℃                                          ;℃
;
;********************************************************************************
;
;
;**********************************************************
;以下温度测量子程序区
;
;**********************************************************
;       RESET DS18B20
;**********************************************************
INITDS1820:	SETB	TEMPDIN			;
		NOP				;
		NOP				;
		CLR	TEMPDIN			;
		MOV	R6, #0A0H		; DELAY 480us
		DJNZ	R6, $
                MOV	R6, #0A0H
                DJNZ	R6, $			;
		SETB	TEMPDIN			;
		MOV	R6, #32H		; DELAY 70us
		DJNZ	R6, $			;
                MOV     R6,#3CH
LOOP1820:       MOV	C, TEMPDIN		;
		JC	INITDS1820OUT		;
                DJNZ    R6,LOOP1820
                MOV	R6, #064H		; DELAY 200us
		DJNZ	R6, $			;
		SJMP	INITDS1820		;
		RET				;
;
INITDS1820OUT:	SETB	TEMPDIN			;
		RET				;
;
;
;**********************************************************
;       读DS18B20的程序, 从DS18B20中读出一个字节的数据
;**********************************************************
READDS1820:     MOV	R7, #08H		;
		SETB	TEMPDIN			;
		NOP				;
		NOP				;
READDS1820LOOP:	CLR	TEMPDIN			;
		NOP				;
		NOP				;
		NOP				;
		SETB 	TEMPDIN			;
		MOV    	R6, #07H		; DELAY 15us
       		DJNZ    R6, $			;
	        MOV     C, TEMPDIN		;
		MOV	R6, #3CH		; DELAY 120us
		DJNZ    R6, $			;
		RRC 	A			;
                SETB 	TEMPDIN			;
		DJNZ    R7, READDS1820LOOP	;
		MOV	R6, #3CH		; DELAY 120us
		DJNZ	R6, $			;
		RET				;
;
;
;**********************************************************
;       写DS18B20的程序, 从DS18B20中写一个字节的数据
;**********************************************************
WRITEDS1820:    MOV	R7, #08H		;
		SETB	TEMPDIN			;
		NOP				;
		NOP				;
WRITEDS1820LOP:	CLR	TEMPDIN			;
		MOV    	R6, #07H		; DELAY 15us
       		DJNZ    R6, $			;
	        RRC 	A			;
	        MOV	TEMPDIN, C		;
	        MOV	R6, #34H		; DELAY 104us
	        DJNZ	R6, $			;
	        SETB	TEMPDIN			;
	        DJNZ    R7, WRITEDS1820LOP	;
		RET				;
;
;
;**********************************************************
;       READ TEMP
;**********************************************************
READTEMP:	LCALL	INITDS1820		;
		MOV	A, #0CCH		;
		LCALL	WRITEDS1820		; SKIP ROM
		MOV	R6, #34H		; DELAY 104us
		DJNZ	R6, $			;
		MOV	A, #44H			;
		LCALL	WRITEDS1820		; START CONVERSION
		MOV	R6, #34H		; DELAY 104us
		DJNZ	R6, $		;
		RET				;
;
READTEMP1:	LCALL	INITDS1820		;
		MOV	A, #0CCH		;
		LCALL	WRITEDS1820		; SKIP ROM
		MOV	R6, #34H		; DELAY 104us
		DJNZ	R6, $			;
		MOV	A, #0BEH		;
		LCALL	WRITEDS1820		; SCRATCHPAD
		MOV	R6, #34H		; DELAY 104us
		DJNZ	R6, $			;
		MOV	R5, #09H		;
		MOV	R0, #TEMPHEAD		;
                MOV     B,#00H
READTEMP2:	LCALL	READDS1820		;
		MOV	@R0, A			;
		INC	R0			;
READTEMP21:     LCALL	CRC8CAL			;
		DJNZ	R5, READTEMP2		;
		MOV	A, B			;
		JNZ	READTEMPOUT		;
		MOV	A, TEMPHEAD + 0		;
		MOV	TEMPL, A		;

⌨️ 快捷键说明

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