?? testlcd.asm
字號:
;*********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 + -