?? print.asm
字號:
;*********LCD*****
CW_ADD EQU 0DCH;指令寫地址
;CR_ADD EQU ;指令讀地址
DW_ADD EQU 0DDH;數據寫地址
;DR_ADD EQU ;數據讀地址
DLY1 EQU 30H;
DLY2 EQU 31H;
DLY3 EQU 32H;
DISPBUFF EQU 70H;從70H到7FH為顯示緩沖區
BianHao EQU 40H;
MingCheng EQU 41H;41,42,43,44,
PiZhong EQU 45H;45,46,47
ZhongLiang EQU 48H;48,49,4A
DanJia EQU 4BH;4B,4C,4D
JinE EQU 4EH;4E,4F,50
ShuLiang EQU 51H;
ZongJia EQU 52H;52,53,54
YEAR EQU 55H;
MONTH EQU 56H;
DAY EQU 57H;
HOUR EQU 58H;
MINUTE EQU 59H;
SECOND EQU 5AH;
YUANHAO EQU 5BH;
GeShu EQU 60H;
HEJI BIT 20H
LEIJI BIT 21H;
;*********************
;**********DS18B20***********
WDDATA bit P3.4 ;//數據總線
exist1820 bit 20H;//表示是否檢測到18B20的標志位
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV SP,#82H;
LCALL SET_LCD;
lcall printinit;
MOV GESHU,#00H;
MOV R6,#00H;
SETB LEIJI;
SPRINT: JNB LEIJI,ENDPRINT;
LCALL PRINT;
SJMP SPRINT
ENDPRINT:SJMP $
Printinit:
mov bianhao,#09h;
MOV MINGCHENG,#4AH
MOV MINGCHENG+1,#4BH
MOV MINGCHENG+2,#4CH
MOV MINGCHENG+3,#01H
MOV PIZHONG,#00H;
MOV PIZHONG+1,#00H;
MOV PIZHONG+2,#00H;
MOV ZHONGLIANG,#02H;
MOV ZHONGLIANG+1,#00H;
MOV ZHONGLIANG+2,#00H;
MOV DANJIA,#00H;
MOV DANJIA+1,#10H;
MOV DANJIA+2,#00H;
MOV JINE,#00H;
MOV JINE +1,#20H;
MOV JINE +2,#00H;
MOV SHULIANG,#01H;
MOV ZONGJIA,#00H;
MOV ZONGJIA+1,#20H;
MOV ZONGJIA+2,#00H;
MOV YUANHAO,#01H;
mov year,#08h;
mov month,#09h;
mov day,#14h;
mov hour,#16h;
mov minute,#48h;
mov second,#26h;
ret;
Print:
MOV R5,GESHU;
CJNE R5,#00H,Pwei; GeShu=00;
MOV DPTR,#BiaoTou;;
PP1:CLR A;
MOVC A,@A+DPTR;
INC DPTR;
CJNE A,#0FFH,PP2;
INC GeShu;
RET;
PP2: ACALL PByte; 送打印機
SJMP PP1;
Pwei:
CJNE R5,#0BH,Pzhu;
MOV DPTR,#biaowei;
PP3:CLR A;
MOVC A,@A+DPTR;
INC DPTR;
CJNE A,#0EEH,PP4;
ACALL PRWEI;
SJMP PP3;
PP4: CJNE A,#0FFH,PP5;
MOV R6,#00H;
CLR GeShu; 清除GeShu
CLR Leiji
CLR heji;
RET;
PP5:ACALL PByte; 送打印機
SJMP PP3;
Pzhu:MOV DPTR,#zhuti;
PP6:CLR A;
MOVC A,@A+DPTR;
INC DPTR;
CJNE A,#0EEH,PP7;
ACALL PRZHU;
SJMP PP6;
PP7:CJNE A,#0FFH,PP8;
MOV R6,#00H;
;INC GeShu;
;CLR Leiji;
RET;
PP8: ACALL PByte; 送打印機
SJMP PP6;
;*************************************************
;打印表單主體
PRZHU: CJNE R6,#00H,PRZHU1 ;商品編號(2)
MOV R0,#BianHao
ACALL PBCD2;
inc r6;
RET;
PRZHU1: CJNE R6,#01H,PRZHU2 ;商品名稱(2+2+2)
; MOV A,#BianHao;
; CLR C; 乘以4
; RLC A;
; CLR C;
; RLC A;
; MOV DPTR,#MINGKU; 存放商品名的首地址
; MOV A,@A+DPTR;
; MOV MingCheng,A
; INC DPTR;
; MOV A,@A+DPTR;
; MOV MingCheng+1,A
; INC DPTR;
; MOV MingCheng+2,A
; INC DPTR;
; MOV MingCheng+3,A
MOV A,MingCheng
ACALL PByte;
MOV A,MingCheng+1
ACALL PByte;
MOV A,MingCheng+2
ACALL PByte;
;MOV A,MingCheng+3
;ACALL PByte;
INC R6;
RET;
PRZHU2: CJNE R6,#02H,PRZHU3 ;皮重(2+"."+2+1)
MOV R0,#PiZhong
ACALL PBCD2 ;2個BCD數據送顯示
ACALL PPoint; ;打印小數點
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
INC R0;
ACALL PBCD1 ;1個BCD數據送顯示
INC R6;
RET
PRZHU3: CJNE R6,#03H,PRZHU4 ;重量
MOV R0,#Zhongliang
ACALL PBCD2 ;2個BCD數據送顯示
ACALL PPoint; ;打印小數點
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
INC R0;
ACALL PBCD1 ;1個BCD數據送顯示
INC R6;
RET
PRZHU4: CJNE R6,#04H,PRZHU5 ;單價
MOV R0,#DanJia
ACALL PBCD1 ;1個BCD數據送顯示
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
ACALL PPoint; ;打印小數點
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PRZHU5: CJNE R6,#05H,PRZHU6 ;金額
MOV R0,#JinE
ACALL PBCD2 ;2個BCD數據送顯示
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
ACALL PPoint; ;打印小數點
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
PRZHU6 :MOV R6,#00H;
MOV GESHU,#0BH;
;CLR LEIJI;
RET;
;***********************************************
;打印表單尾部
PRWEI: CJNE R6,#00H,PRWEI0 ;數量
MOV R0,#ShuLiang
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PRWEI0: CJNE R6,#01H,PRWEI1 ;總價
MOV R0,#ZongJia
ACALL PBCD2 ;2個BCD數據送顯示
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
ACALL PPoint; ;打印小數點
INC R0;
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PRWEI1: CJNE R6,#02H,PRWEI2;
MOV R0,#YUANHAO
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PRWEI2: CJNE R6,#03H,PWEI3 ;日期
MOV R0,# Year ;年
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PWEI3: CJNE R6,#04H,PWEI4
MOV R0,#Month
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PWEI4: CJNE R6,#05H,PWEI5
MOV R0,#Day
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PWEI5: CJNE R6,#06H,PWEI6 ;時間
MOV R0,#Hour ;時
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PWEI6: CJNE R6,#07H, PWEI7
MOV R0,#Minute ;分
ACALL PBCD2 ;2個BCD數據送顯示
INC R6;
RET;
PWEI7: CJNE R6,#08H, PWEI8
MOV R0,#Second ;秒
ACALL PBCD2 ;2個BCD數據送顯示
PWEI8: MOV R6,#00H;
CLR GESHU;
CLR LEIJI;
CLR HEJI;
RET;
;打印一個BCD數
PBCD1: MOV A,@R0 ;取出R0指向數據的低位,轉為ASCII碼送打印(1個)
ANL A,#0FH
ADD A,#30H
ACALL PByte;
RET
;打印2個BCD數
PBCD2: MOV A,@R0 ;2個BCD數據送顯示
SWAP A
ANL A,#0FH ;高位送打印
ADD A,#30H
ACALL PByte;
MOV A,@R0 ;低位送打印
ANL A,#0FH
ADD A,#30H
ACALL PByte;
RET
;打印一個小數點
PPoint:
MOV A,#2EH;
ACALL PByte;
RET;
;送打印機一個字節(ACC為入口)
PByte:
JB P3.3,$
MOV P2,#0BFH
MOVX @R1,A
RET;
;****************************************************
Biaotou:
;初始化打印機,畫虛線(字符"-")
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,03H,1BH,20H,02H,1CH,49H
DB 00H,20H,21H,22H,35h,23H,24H,0DH
DB 1BH,66H,01H,01H ;設置一行空格
DB 0FFH;
;保留反向打印,與標題之間空一格,首行開始空一格,設置字體為普通大小,并調整字符
;間距為0
;**************************************************************
Zhuti:
;保留字符間距為0,與上一行之間空一行,字體大小為普通大小,
DB 1BH,20H,00H,1BH,56H,01H,1BH,66H,00H,01H ; 商品編號(2)
DB 20H,21H,27H,28H,1BH,36H,1BH,56H
DB 02H,3AH,1BH,66H,00H,02H,0EEH
DB 0DH
DB 1BH,38H,1BH,56H,01H,1BH,66H,00H,01H; 商品名稱(2+2+2+2)
DB 20H,21H,25H,26H,1BH,36H;
DB 1BH,56H,02H,3AH,1BH,38H,1BH,66H,00H,02H;
DB 1BH,56H,01H,0EEH,1BH,66H, 00H,01H,0DH
;保留字符間距為0,與上一行之間空一行,字體大小為普通大小,
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 皮重(2+"."+2+1+Kg型)
DB 29H, 1BH,66H,00H,01H,2AH,1BH,36H,1BH,56H, 02H,3AH
DB 1BH,66H,00H,04H,0EEH
DB 1BH,66H, 00H,01H,4BH,67H,0DH ;Kg
;保留字符間距為0,與上一行之間空一行,字體大小為普通大小,
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 重量(2+"."+2+1+Kg型)
DB 2AH, 1BH,66H,00H,01H,2BH,1BH,36H,1BH,56H, 02H,3AH
DB 1BH,66H,00H,04H, 0EEH
DB 1BH,66H, 00H,01H,4BH,67H,0DH ;Kg
;格式與上面相同
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 單價(1+2+"."+2)
DB 2CH, 1BH,66H,00H,01H,2DH,1BH,36H,1BH,56H, 02H,3AH
DB 1BH,66H,00H,04H, 0EEH
DB 1BH,56H,01H,1BH,66H,00H,01H,1BH,38H,39H
DB 0DH
;格式與上面相同
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 金額(2+2+"."+2)
DB 2EH, 1BH,66H,00H,01H,2FH,1BH,36H,1BH,56H, 02H,3AH
DB 1BH,66H,00H,04H, 0EEH
DB 1BH,56H,01H,1BH,66H,00H,01H,1BH,38H,39H
DB 0DH
DB 0FFH;
Biaowei:
;*************************************************************
;切換空一行,畫一行虛線,再空一行
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,02H ; 數量(1)
DB 30H, 1BH,66H,00H,01H,31H,1BH,36H,1BH,56H,02H,3AH
DB 1BH,66H,00H,04H, 0EEH,1BH,56H,01H
DB 1BH,66H, 00H,01H, 1BH,38H,65H ;此處要加一"件"
DB 0DH
;格式與上面相同
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ;總金額(2+2+"."+2)
DB 32H,2EH,2FH,1BH,36H,1BH,56H,02H,3AH
DB 1BH,66H,00H,03H,0EEH
DB 1BH,56H,01H,1BH,66H,00H,01H,1BH,38H ,39H
DB 0DH
;格式與上面相同
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 收銀員編號(2)
DB 62H,63H,64H,1BH,36H,1BH,56H,02H,3AH
DB 1BH,66H,00H,03H,0EEH
DB 0DH
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 日期(2+2+2)
DB 33H,34H,1BH,36H,1BH,56H,02H,3AH
DB 1BH,66H,00H,03H,32H,30H,0EEH,2DH,0EEH,2DH,0EEH;
DB 0DH
;格式與上面相同
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,02H ; 時間(2+2+2)
DB 60H,61H,1BH,36H,1BH,56H,02H,3AH
DB 1BH,66H,00H,03H,0EEH,3AH,0EEH,3AH,0EEH
DB 0DH
;空8個空格,顯示漢字
DB 1BH,38H ,1BH,56H,01H,1BH,66H,00H,0BH ; 謝謝惠顧
DB 36H,36H,37H,38H, 1BH,36H,21H
DB 0DH
DB 1BH,66H,01H,03H ;設置2行空格
DB 0FFH
PRINTING:DB "Pinting, Wait!",0;Printing, Wait!
PRINTED:DB "Printed OK! ",0;Printed OK!
;將70H-7FH單元的內容送顯示
;70-7FH LCD
LCD_DISP:MOV R0,#DISPBUFF;
MOV R7,#08H
MOV A,#80H ;70H-77H Byte DIS
ACALL WRCMD
WR1: MOV A,@R0
INC R0
LCALL WRDATA
DJNZ R7,WR1
MOV A,#0C0H ;調整顯示位置后再顯示剩余的字符
ACALL WRCMD
MOV R7,#08H
WR3: MOV A,@R0
INC R0
LCALL WRDATA
DJNZ R7,WR3
RET
;*****************************************
;設置 LCD
SET_LCD:LCALL K50MS; 延時50ms
MOV A,#30H ;設置為8位控制界面
ACALL WRCMD
MOV A,#30H ;
ACALL WRCMD
MOV A,#0CH ;開整體顯示
ACALL WRCMD
MOV A,#01H ;清顯示
ACALL WRCMD
MOV A,#06H ;初始化原點
ACALL WRCMD
RET;
;*****************************************
;寫指令
WRCMD: MOV P2,#0DCH ;寫入指令
MOV R1,#0FFH;
MOVX @R1,A;從硬件上保證了寫信號的作用
LCALL DLY00 ;延時
RET
;*****************************************
;寫數據
WRDATA:MOV P2,#0DDH;
MOV R1,#0FFH;
MOVX @R1,A;
LCALL DLY00;
RET
DLY00:
MOV DLY3,#00H;
DJNZ DLY3,$;
RET;
;***********************************
;顯示字符串,字符串以0結尾
; DPTR = 要顯示字符串的地址
STR2BUFF:
PUSH DPH;
PUSH DPL;
MOV R0,#DISPBUFF;
FILL: CLR A
MOVC A,@A+DPTR
CJNE A,#00H,LC1
POP DPL;
POP DPH;
RET
LC1: MOV @R0,A;
INC R0;
INC DPTR
SJMP FILL
K50ms: MOV DLY1,#30H ;50ms
KTIM1: MOV DLY2,#00H
DJNZ DLY2,$
DJNZ DLY1,KTIM1
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -