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

📄 print.asm

📁 C8051F020控制面板式打印机的汇编语言程序。已调试通过。
💻 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 + -