;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;12864显示子程序 ;数据传送方式为4位并行 ;QIUYOUQUAN ;08.04.10 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RS_128 EQU P1.0 RW_128 EQU P1.1 E_128 EQU P1.2 PSB_128 EQU P1.3 RST_128 EQU P1.4 DB7 BIT P2.7 DB6 EQU P2.6 DB5 EQU P2.5 DB4 EQU P2.4 ;DB_128 EQU P2.0 COUNT EQU 30H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000H AJMP START ORG 0030H START:MOV SP,#50H LCALL INT_128 ;初始化液晶 LCALL WR_HAN ;MOV R5,#250 ;LCALL WR_DZ SJMP $ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;初始化12864 INT_128:MOV R5,#3 LCALL DELAY1 CLR RST_128 NOP SETB RST_128 NOP SETB PSB_128 ;通讯方式为4位数据并行口 NOP MOV A,#20H ; LCALL WI_128 MOV A,#20H ;20H 4位数据并口基本指令 ACALL WI_128 ;mov a,08h ;lcall wi_128 MOV A,#10H LCALL WI_128 MOV A,#01H ;清屏 ACALL WI_128 MOV A,#06H ;游标移动方向设定 ACALL WI_128 MOV A,#0DH ;开显示开关不显示游标开闪烁 ACALL WI_128 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;写指令到12864 ;入口参数为A WI_128:ACALL CHK_BUSY CLR RS_128 CLR RW_128 NOP RLC A MOV DB7,C ;写高四位指令 RLC A MOV DB6,C RLC A MOV DB5,C RLC A MOV DB4,C SETB E_128 NOP CLR E_128 NOP RLC A MOV DB7,C ;写低四位指令 RLC A MOV DB6,C RLC A MOV DB5,C RLC A MOV DB4,C ;MOV DB_128,A SETB E_128 NOP CLR E_128 NOP SETB RS_128 SETB RW_128 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;写数据子程序 ;入口参数A WD_128:ACALL CHK_BUSY SETB RS_128 CLR RW_128 RLC A MOV DB7,C ;写高四位数据 RLC A MOV DB6,C RLC A MOV DB5,C RLC A MOV DB4,C SETB E_128 NOP CLR E_128 NOP ;写低四位数据 RLC A MOV DB7,C RLC A MOV DB6,C RLC A MOV DB5,C RLC A MOV DB4,C ;MOV DB_128 SETB E_128 NOP CLR E_128 NOP SETB RS_128 SETB RS_128 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;查忙 ;RS=0,RW=1 CHK_BUSY: SETB DB7 ;MOV DB_128,#0FFH CLR RS_128 SETB RW_128 NOP SETB E_128 ;JB DB_128.7,$ JB DB7,$ CLR E_128 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;读数据 ;RS=1 RW=1 ;出口参数A RD_128: LCALL CHK_BUSY SETB RS_128 SETB RW_128 MOV R4,#2 CLR C RD_1281:NOP SETB E_128 NOP MOV C,DB7 RLC A MOV C,DB6 RLC A MOV C,DB5 RLC A MOV C,DB4 RLC A CLR E_128 DJNZ R4,RD_1281 NOP RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;显示汉字和字符 WR_HAN: MOV DPTR,#TAB1 ;送第一行,第二行信息显示 MOV COUNT,#20 MOV A,#80H LCALL WI_128 WR_HAN1:CLR A MOVC A,@A+DPTR LCALL WD_128 INC DPTR DJNZ COUNT,WR_HAN1 MOV DPTR,#TAB2 ;送第三行信息显示 MOV COUNT,#16 MOV A,#90H LCALL WI_128 WR_HAN2:CLR A MOVC A,@A+DPTR LCALL WD_128 INC DPTR DJNZ COUNT,WR_HAN2
MOV DPTR,#TAB3 ;送第四行信息显示 MOV COUNT,#16 MOV A,#98H LCALL WI_128 WR_HAN3:CLR A MOVC A,@A+DPTR LCALL WD_128 INC DPTR DJNZ COUNT,WR_HAN3 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;显示点阵 ;WR_DZ:MOV
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; TAB1: DB 31H,32H,38H,36H,34H,00H,0D2H,0BAH,0BEH,0A7H DB 0CFH,0D4H,0CAH,0BEH,0B3H,0CCH,0D0H,0F2H ;第一行显示'12864液晶显示程序' TAB2: DB 32H,30H,30H,38H,0C4H,0EAH,30H,34H,0D4H,0C2H DB 31H,38H,0C8H,0D5H ;第二行显示'2008年04月15日 TAB3: DB 0C7H,0F0H,0D3H,0D1H,0C8H,0ABH,0B1H,0E0H ;第三行显示'丘友全编' TAB4: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;10Ms延时 DELAY: MOV R5,#1 DELAY1:MOV R7,#100 D1: MOV R6,#100 DJNZ R6,$ DJNZ R7,D1 DJNZ R5,DELAY1 RET END 不知道为什么显示的数只有一行 其他行都没显示 |