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

📄 knife.asm

📁 在项目超生刀产品中
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;2006-01-11

              
               ORG   0000H
               LJMP  MAIN
               ORG   0023H
               LJMP  SINT                 
RXDATA     EQU 20H                ;接收单元首地址
TXDATA     EQU 30H                ;发送单元地址
POWER      EQU 40H
PERFUSION  EQU 41H
SUCTION    EQU 42H
TIMESEC    EQU 43H
TIMEMIN    EQU 44H

TIMESECH   EQU 45H
TIMESECL   EQU 46H
TIMEMINH   EQU 47H
TIMEMINL   EQU 48H

SELECT     EQU 49H             ;判断结果1:poweradd 2:powersub
                               ;       3:perfusionadd 4:perfusionsub
                               ;       5:perfusionOnoff   
                               ;       6:suctionadd   7:suctionsub
                               ;       8:suctionOnoff
                               ;       9:reset        10:setfreq
                               ;       11:help
               ORG 0080H
             
MAIN:           
               MOV      TMOD,#20H                ;定时器1,定时器0
               MOV      TH1,#0FDH               ;设置波特率为9600
               MOV      TL1,#0FDH
               MOV      SCON,#50H
               MOV      PCON,#00H
               MOV      IE,#90H
               SETB     TR1                      ;启动定时器作为波特率发生器
              ; MOV      TH0,#3C                  ;定时50毫秒
               ;MOV      TL0,#B0
               
               ;初始化显示屏
               MOV      POWER,#02H
               MOV      PERFUSION,#02H
               MOV      SUCTION,#02H
               MOV      TIMESEC,#30H
               MOV      TIMEMIN,#59H
               MOV      R7,POWER
               MOV      R5,#0
               LCALL    GETDATA
               LCALL    TXDATA
               LCALL    DELAY
               
               MOV      R7,#0
               MOV      R5,#1
               LCALL    GETDATA
               LCALL    TXDATA
               LCALL    DELAY
               
               MOV      R7,PERFUSION
               MOV      R5,#2
               LCALL    GETDATA
               LCALL    TXDATA
               LCALL    DELAY
               
               MOV      R7,#0
               MOV      R5,#3
               LCALL    GETDATA
               LCALL    TXDATA
               LCALL    DELAY
               
               MOV      R7,SUCTION
               MOV      R5,#4
               LCALL    GETDATA
               LCALL    TXDATA
               LCALL    DELAY
               
               MOV      R7,#0
               MOV      R5,#5
               LCALL    GETDATA
               LCALL    DELAY
               
               LCALL    DISP_TIMESEC
               LCALL    DISP_TIMEMIN
LOOP:          SJMP     LOOP

DISP_TIMESEC:                                         ;显示时间秒
               MOV     A,TIMESEC
               ANL     A,#0F0H
               SWAP    A
               MOV     TIMESECH,A
               MOV     A,TIMESEC
               ANL     A,#0FH
               MOV     TIMESECL,A
               MOV     R7,TIMESECH
               MOV     R5,#8
               LCALL   GETDATA
               LCALL   TXDATA
               LCALL   DELAY
               
               MOV     R7,TIMESECL
               MOV     R5,#9
               LCALL   GETDATA
               LCALL   TXDATA
               LCALL   DELAY
               RET
               
DISP_TIMEMIN:                                          ;显示时间分钟
               MOV     A,TIMEMIN
               ANL     A,#0F0H
               SWAP    A
               MOV     TIMEMINH,A
               MOV     A,TIMEMIN
               ANL     A,#0FH
               MOV     TIMEMINL,A
               MOV     R7,TIMEMINH
               MOV     R5,#6
               LCALL   GETDATA
               LCALL   TXDATA
               LCALL   DELAY
               
               MOV     R7,TIMEMINL
               MOV     R5,#7
               LCALL   GETDATA
               LCALL   TXDATA
               LCALL   DELAY
               RET      
               
               ;串口发送程序
               

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;               
TXBEGIN:       CLR      EA                       ;禁止中断
               CLR      REN                      ;禁止接收
               MOV      R0,#TXDATA                ;发送字符串地址
               MOV      R1,#0FH                    ;发送字符串长度
TXLOOP0:       MOV      A,@R0 
               MOV      SBUF,A
TXLOOP1:       JBC      TI,TXLOOP2
               SJMP     TXLOOP1
TXLOOP2:       INC      R0
               DJNZ     R1,TXLOOP0
               SETB     REN
               SETB     EA
               RET
               
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;              
SINT:          ;串口接收程序,触摸屏判断程序
               CLR      EA
RXBEGIN:       MOV      R0,#RXDATA             ;接收数据存储地址
               MOV      R1,#06H
RXLOOP1:       JBC      RI,RXLOOP2
               SJMP     RXLOOP1
RXLOOP2:       MOV      A,SBUF
               MOV      @R0,A
               INC      R0
               DJNZ     R1,RXLOOP1
               ;接收满6个字节的数据,开始判断
               
               RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;               
               
GETDATA:              ;将字库数据和位置信息组装成显示命令
                      ;	R7和R5中分别放传递的两个参数
                      ;R7放字库R5放位置

               MOV      DPTR,#lib1     ;指令表地址,计算响应指令开始地址
               MOV      A,R7
               MOV      B,#0BH
               MUL      AB
               MOV      R0,DPL
               ADD      A,R0
               MOV      DPL,A
               CLR      A
               MOV      R0,DPH
               ADDC     A,R0
               MOV      DPH,A
               MOV      R6,#0
               MOV      R1,#TXDATA
               
GETDATALOOP1:
	       CLR  	A
	       MOVC 	A,@A+DPTR    ;读取数据存放到R4中
	       MOV  	@R1,A      ;将数据放到ARRAY中的相应单元中
	       INC      R1
	       INC  	R6
	       INC      DPTR
	       CJNE 	R6,#0BH,GETDATALOOP1 ;如果一个数值的命令没有全部转移到ARRAY中,则转到继续
               ;添加后一段位置信息
	       MOV      DPTR,#DataPosition
	       MOV      A,R5
	       MOV      B,#04H               ;位置信息长度
	       MUL      AB
	       MOV      R0,DPL
	       ADD      A,R0
	       MOV      DPL,A
	       CLR      A
	       MOV      R0,DPH
	       ADDC     A,R0
	       MOV      DPH,A
	       MOV      R6,#0
GETDATALOOP2:
	       CLR  	A
	       MOVC 	A,@A+DPTR
	       MOV  	@R1,A
	       INC      R1
	       INC      DPTR
	       INC  	R6
	       CJNE 	R6,#04H,GETDATALOOP2
	       RET
	        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;	    
JUDGE:                    ;比较两个16bit无符号数的大小,R0内数值表示判断是否是第n个按钮
                               ;r6中放每个按钮坐标的长度8
               MOV     R0,#1
               MOV     DPTR,#BUTTON-01H
               MOV     SELECT,#0       ;清零

COMP_UPLEFT:                  ;比较收到的坐标是否在对应按钮的右下
COMP_X0:       CLR     A
               INC     DPTR
               MOVC    A,@A+DPTR
               CJNE    A,RXDATA+02H,X0NEQ_H   ;X坐标的高8位比较,相等则比较低8位,不等则判断是大还是小
               JMP     X0EQ_H
X0NEQ_H:         
               JNC      NEXT_X0H            ;若大于,则比较坐标Y,否则表示没有按钮按下
               INC     DPTR                 ;在进行纵坐标比较以前地址加1,因为只判断了高位
               JMP     COMP_Y0
NEXT_X0H:                                   ;进行下一个按钮判断前设置正确的DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               LJMP    NO_BUTTON
X0EQ_H:                                      ;X坐标高8位相等,继续比较低8位
               INC     DPTR
               CLR     A
               MOVC    A,@A+DPTR
               CJNE    A,RXDATA+03H,X0NEQ_L  ;低8位大于等于则开始比较Y坐标的大小,否则认为无按钮按下
               JMP     COMP_Y0
X0NEQ_L:        
               JNC      NEXT_X0L
               LJMP    COMP_Y0
NEXT_X0L:      INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               LJMP    NO_BUTTON

COMP_Y0:       CLR     A
               INC     DPTR
               MOVC    A,@A+DPTR
               CJNE    A,RXDATA+04H,Y0NEQ_H
               LJMP    Y0EQ_H
Y0NEQ_H:       JNC      NEXT_Y0H
               INC     DPTR
               LJMP    COMP_DOWNRIGHT
NEXT_Y0H:
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR
               INC     DPTR

⌨️ 快捷键说明

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