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

📄 testlcd.asm

📁 用C8051F020读写液晶的程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*********LCD*****
CW_ADD	EQU	0DCH;指令写地址
;CR_ADD	EQU			;指令读地址
DW_ADD	EQU	0DDH;数据写地址
;DR_ADD	EQU			;数据读地址

DLY1    EQU   42H;
DLY2    EQU   43H;
DLY3    EQU   44H;
DISPBUFF   EQU  70H;从70H到7FH为显示缓冲区

bianhao    equ  060h;
weight     equ  063h;
price      equ  065h;
shuliang   equ  067h;
zongjia    equ  068h;
SECOND   EQU  6AH;
MINUTE	   EQU  6BH;
HOUR     EQU  6CH;
DAY  	   EQU  6DH;
MONTH	   EQU  6FH;
YEAR      EQU  70H;


;*********************
;**********DS18B20***********
WDDATA    bit  P3.4           ;//数据总线
exist1820     bit  20H;//表示是否检测到18B20的标志位

tempH   equ   44h;从18B20读取的温度高位数
tempL   equ   45h;从18B20读取的温度低位数
calbuff1 equ  46h;计算温度值的中间存储单元
tempsign equ  47h;存储得到的温度值,初值要设为0

        ORG   0000H
        LJMP  MAIN

        ORG   0100H
MAIN:
        MOV  SP,#82H;
        LCALL SET_LCD;

        lcall  GetTemp;
        lcall  Calculate;


        mov  A,#80H;
        lcall  WRCMD;
        MOV   A,tempsign;
        lcall  WRDATA;   写入符号位
       MOV   A,CALBUFF1;
       LCALL  CONV;     转换数据并送显示

       lcall  printinit;

 ;       LCALL  SYS_INIT;
        LCALL  PRINT;
        SJMP  $
;将70H-7FH单元的内容送显示
;70-7FH LCD
LCD_DISP:MOV R0,#DISPBUFF;
	MOV R7,#0fH
	MOV A,#80H      ;70H-77H Byte DIS
	ACALL WRCMD
WR1:    MOV A,@R0
	INC R0
	LCALL  WRDATA
	DJNZ R7,WR1
        
        MOV R0,#DISPBUFF;
	MOV R7,#0fH
	MOV A,#090H      ;70H-77H Byte DIS
	ACALL WRCMD
WR2:    MOV A,@R0
	INC R0
	LCALL  WRDATA
	DJNZ R7,WR2
        
        MOV R0,#DISPBUFF;
	MOV R7,#0fH
	MOV A,#088H      ;70H-77H Byte DIS
	ACALL WRCMD
WR3:    MOV A,@R0
	INC R0
	LCALL  WRDATA
	DJNZ R7,WR3
        
        MOV R0,#DISPBUFF;
	MOV R7,#0fH
	MOV A,#098H      ;70H-77H Byte DIS
	ACALL WRCMD
WR4:    MOV A,@R0
	INC R0
	LCALL  WRDATA
	DJNZ R7,WR4

;	MOV A,#0C0H      ;调整显示位置后再显示剩余的字符
;	ACALL WRCMD
;	MOV R7,#08H
;WR3:    MOV A,@R0
;	INC R0
;	LCALL  WRDATA
;	DJNZ R7,WR3
	RET
;程序内要打印的数据存放在E0H-F3H, 通过调整R6来调整待打印的数据
PRINT:  
        MOV DPTR,#PRINTING
        LCALL  STR2BUFF;        ;将要显示的字符串送到显示缓冲区
	LCALL  LCD_DISP		;显示打印进行画面
        MOV PSW,#00H
	MOV R6,#00H		;给R6送初值,表明从第一行就开始打印
        MOV DPTR,#PDAT	        ;打印要打印的数据
PP1:    CLR A
	MOVC A,@A+DPTR
        INC DPTR
        CJNE A,#0EEH,PP2        ;DATE PRINT,当不为0ee,则送打印机指令
        ACALL PR0		;若为0EEH则表明要输入数据
	INC R6			;调整R6,指向下一个要打印的数据
        SJMP PP1			;若不等于0ffH,则直接送打印
PP2:    CJNE A,#0FFH,PP4	;若等于0ffh,则将PA1开始的内容送到lcd的显示缓冲区
        MOV DPTR,#PRINTED	;显示打印结束的画面
        LCALL  STR2BUFF;        ;将要显示的字符串送到显示缓冲区
	LCALL  LCD_DISP;		;送lcd显示
	RET
PP4:    JB P3.3,PP4		;查看打印机忙与否,不忙则将字符区的内容送打印机
        MOV P2,#0BFH
        MOVX @R1,A
        SJMP PP1
;
PR0:    CJNE R6,#00H,PR1        ;商品编号
		MOV R0,#bianhao
        AJMP PD6
PR1:    CJNE R6,#01H,PR2
		MOV R0,#bianhao+1
        AJMP PD6
PR2:    CJNE R6,#02H,PR3        ;
		MOV R0,#bianhao+2
        AJMP PD6

PR3:    CJNE R6,#03H,PR4		;重量
		MOV R0,#Weight
        AJMP PD6
PR4:    CJNE R6,#04H,PR5
		MOV R0,#Weight+1
        AJMP PD4

PR5:    CJNE R6,#05H,PR6		;单价
		MOV R0,#Price
        AJMP PD6
PR6:    CJNE R6,#06H,PR7
		MOV R0,#Price+1
        AJMP PD6

PR7:    CJNE R6,#07H,PR8		;数量
		MOV R0,#Shuliang
        AJMP PD6

PR8:    CJNE R6,#08H,PR9        ;总价
		MOV R0,#Zongjia
        AJMP PD6
PR9:    CJNE R6,#09H,PC0
		MOV R0,#Zongjia+1
        AJMP PD6

PC0:    CJNE R6,#0AH,PC1        ;日期
		MOV R0,#Year
        AJMP PD6
PC1:    CJNE R6,#0BH,PC2
		MOV R0,#Month
        AJMP PD6
PC2:    CJNE R6,#0CH,PC3
MOV R0,#Day
    	AJMP PD6

PC3:    CJNE R6,#0DH,PC4        ;时间
		MOV R0,#Hour
        AJMP PD6
PC4:    CJNE R6,#0EH,PC5
		MOV R0,#Minute
        AJMP PD6
PC5:    CJNE R6,#0FH,PC6
MOV R0,#Second
    	AJMP PD6

PC6:    RET


PD0:    MOV A,@R0	;将R0开始的2个单元内容存放的3个BCD码转为ASCII码,
;并送显示(3个)
	SWAP A
	ANL A,#0FH		;取出高位,转化为ASCII码
	ADD A,#30H
PD1:    JB P3.3,PD1
        MOV P2,#0BFH	;送打印
        MOVX @R1,A
	MOV A,@R0		;取出低位,转化为ASCII码,送打印
	ANL A,#0FH
	ADD A,#30H
PD2:    JB P3.3,PD2
        MOV P2,#0BFH
        MOVX @R1,A
	INC R0
	MOV A,@R0		;调整待打印数据后,取出高位,转化为ASCII码,送打印
	SWAP A
	ANL A,#0FH
	ADD A,#30H
PD3:    JB P3.3,PD3
        MOV P2,#0BFH
        MOVX @R1,A
        RET
;
PD4:    MOV A,@R0		;取出R0指向数据的低位,转为ASCII码送打印(1个)
	ANL A,#0FH
	ADD A,#30H
PD5:    JB P3.3,PD5
        MOV P2,#0BFH
        MOVX @R1,A
	RET

PD6:    MOV A,@R0		;2个BCD数据送显示
	SWAP A
	ANL A,#0FH		;高位送打印
	ADD A,#30H
PD7:    JB P3.3,PD7
        MOV P2,#0BFH
        MOVX @R1,A
	MOV A,@R0		;低位送打印
	ANL A,#0FH
	ADD A,#30H
PD8:    JB P3.3,PD8
        MOV P2,#0BFH
        MOVX @R1,A
	RET

;
PDAT:
;初始化打印机,画虚线(字符"-")
DB  1BH,40H,1BH,66H,01H,01H,0DH		;空1行,并换行
DB 1BH,36H,1BH,56H,01H,2DH,20H,2DH,20H,2DH
DB 20H,2DH,20H,2DH,20H,2DH,20H,2DH,20H,2DH
DB 20H,2DH,20H,2DH,20H,2DH,20H,2DH,20H,0DH
DB 1BH,66H,01H,02H	;设置两行空格
;标题设置为反向打印,首行空四格,并且字间距为2,放大字体一倍
DB  1BH,38H,1BH,56H,02H,1BH	;商品价格表
DB  66H,00H,04H,1BH,20H,02H,1CH,49H
DB  00H,20H,21H,22H,23H,24H,0DH
DB  1BH,66H,01H,01H		;设置一行空格
;保留反向打印,与标题之间空一格,首行开始空一格,设置字体为普通大小,并调整字符
;间距为0
DB  1BH,56H,01H,1BH,66H,00H,01H,1BH	;		商品名称
DB  20H,00H,20H,21H,25H,26H,1BH,36H
DB  1BH,56H,02H,3AH, 1BH,38H ,1BH,66H,00H,03H
DB  1BH,56H,01H,46H,47H,1BH,66H, 00H,01H,0DH
;保留字符间距为0,与上一行之间空一行,字体大小为普通大小,
DB  1BH,56H,01H,1BH,66H,00H,01H		;		商品编号(6型)
DB  20H,21H,5CH,5DH,1BH,36H,1BH,56H
DB  02H,3AH,1BH,66H,00H,02H,0EEH, 0EEH, 0EEH
DB  0DH
;保留字符间距为0,与上一行之间空一行,字体大小为普通大小,
DB  1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H		;		重量(2+"."+2+Kg型)
DB  27H, 1BH,66H,00H,01H,28H,1BH,36H,1BH,56H, 02H,3AH
DB  1BH,66H,00H,04H, 0EEH,2EH,0EEH
DB  1BH,66H, 00H,01H,4BH,67H,0DH			;Kg
;格式与上面相同
DB  1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H		;		单价(2+"."+2)
DB  29H, 1BH,66H,00H,01H,2AH,1BH,36H,1BH,56H, 02H,3AH
DB  1BH,66H,00H,04H, 0EEH,2EH,0EEH
DB  1BH,56H,01H,1BH,66H,00H,01H,1BH,38H,32H
DB  0DH
;格式与上面相同
DB  1BH,38H,1BH,56H,01H,1BH,66H,00H,02H		;		数量(2)
DB  2BH, 1BH,66H,00H,01H,2CH,1BH,36H,1BH,56H,02H,3AH
DB  1BH,66H,00H,04H, 0EEH,1BH,56H,01H
DB  1BH,66H, 00H,01H, 1BH,38H,63H			;此处要加一"件"
DB  0DH
;格式与上面相同
DB  1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H		;		总价(2+"."+2)
DB  2DH, 1BH,66H,00H,01H,2EH,1BH,36H,1BH,56H,02H,3AH
DB  1BH,66H,00H,04H,0EEH,2EH,0EEH
DB  1BH,56H,01H,1BH,66H,00H,01H,1BH,38H ,32H
DB  0DH
;切换空一行,画一行虚线,再空一行
DB 1BH,66H,01H,01H	;设置1行空格
DB 1BH,36H,1BH,56H,01H,2DH,20H,2DH,20H,2DH
DB 20H,2DH,20H,2DH,20H,2DH,20H,2DH,20H,2DH
DB 20H,2DH,20H,2DH,20H,2DH,20H,2DH,20H,0DH
DB 1BH,66H,01H,01H	;设置1行空格
;格式与上面相同
DB  1BH,38H ,1BH,56H,01H,1BH,66H,00H,05H		;		日期(2+2+2)
DB  5EH,5FH,1BH,36H,1BH,56H,02H,3AH
DB  1BH,66H,00H,02H,32H,30H,0EEH,2DH,0EEH,2DH,0EEH
DB  0DH
;格式与上面相同
DB  1BH,38H ,1BH,56H,01H,1BH,66H,00H,05H		;		时间(2+2+2)
DB  60H,61H,1BH,36H,1BH,56H,02H,3AH
DB  1BH,66H,00H,02H,0EEH,3AH,0EEH,3AH,0EEH
DB  0DH
;空8个空格,显示汉字
DB  1BH,38H ,1BH,56H,01H,1BH,66H,00H,09H		;	谢谢惠顾
DB  2FH,2FH,30H,31H, 1BH,36H,21H
DB  0DH
DB 1BH,66H,01H,02H	;设置2行空格
DB  0FFH

;
PRINTING:DB 0c9h,0bdh,0b6h,0abh,0bfh,0c6h,0bch,0bch,0b4h,0f3h,0d1h,0a7h,"Printing"0;Printing, Wait!
PRINTED:DB  "Printed  OK!  ",0;Printed  OK!



;key1用于切换页面,key2用于做加调整,key3用于做减调整

⌨️ 快捷键说明

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