;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;INPUT PARAMETE Y_COOR_H,Y_COOR_L, ; X_COOR_H,X_COOR_L, ; COLOR_REG_L,COLOR_REG_H ; BAK_CHAR_NUM ;;X ; CHAR_NUM1 ;Y ;;;;;;;;;;;;;;;;DISPLAY HANZI FONT COLOR;;;;;;;;;;;;;;;;;; DISP_HANZI: MOV A,BAK_CHAR_NUM MOV CHAR_NUM,A ;char_num = bak_char_num DISP_HANZI1: ;while(char_num) CLR A MOVC A,@A+DPTR INC DPTR MOV CHAR_BYTE,A MOV A,DPH MOV CIRYH,A MOV A,DPL MOV CIRYL,A ;ciry = DPTR MOV R7,#8 ;for(i=0;i++;i<8) DISP_HANZI2: { MOV A,CHAR_BYTE RLC A MOV CHAR_BYTE,A ;temp_char *= 2; JNC DISP_HANZI3 ;if(char_byte & 0x01){ PUSH 07H disp_hanzi3() push dph push dpl ;}esle{ LCALL WRITE_DOT_NEW ; write_dot_new(); pop dpl ;} pop dph POP 07H DISP_HANZI3: MOV A,X_COOR_L ADD A,#1 MOV X_COOR_L,A MOV A,X_COOR_H ADDC A,#0 MOV X_COOR_H,A ;x_coor++; DJNZ R7,DISP_HANZI2 ;} ;ÔÝ´æDPTR MOV A,CIRYH MOV DPH,A MOV A,CIRYL MOV DPL,A DJNZ CHAR_NUM,DISP_HANZI1 ;char_num-- MOV A,BAK_CHAR_NUM } MOV B,#8 MUL AB MOV R0,A MOV A,X_COOR_L CLR C SUBB A,R0 MOV X_COOR_L,A ;x_coor_l = (x_coor_l - bak_char_num*8) MOV A,X_COOR_H SUBB A,B MOV X_COOR_H,A ;x_coor_h = x_coor_h/8; MOV A,Y_COOR_L ADD A,#1 MOV Y_COOR_L,A MOV A,Y_COOR_H ADDC A,#0 MOV Y_COOR_H,A ;y_coor++; DJNZ CHAR_NUM1,DISP_HANZI ; char_num1--; RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WRITE_DOT_new:;; mov p2,#cs_lcdh;(x,y) (33-34h,35-36h) mov dptr,#port2 mov a,Y_COOR_L clr c subb a,#0f0h ;240=0f0h mov a,Y_COOR_H subb a,#0 jc wr_dot_new_yl240 ;if y>240 then y=y+272 mov a,Y_COOR_L add a,#16 mov a,Y_COOR_H ;write (y+272) to port2 addc a,#0 movx @dptr,a mov a,Y_COOR_L ;; add a,#272 movx @dptr,a sjmp wr_dot_new_wryend wr_dot_new_yl240:mov a,Y_COOR_H ;else movx @dptr,a ;write y to port2 mov a,Y_COOR_L movx @dptr,a ;endif wr_dot_new_wryend:mov dptr,#port1 ;write x to port1 mov a,X_COOR_H movx @dptr,a mov a,X_COOR_L movx @dptr,a mov dptr,#port0 ;write data to port0 mov a,COLOR_REG;color ;30 is data movx @dptr,a ret