; BM12864 串口(3线)接口程序 ; ;*************************************************************************** ;* Date : 2006.8.4 * ;* Create by : 突出重围 * ;*************************************************************************** ;连线图:*LCM---89s51* *LCM---89s51* *LCM----------89s51* *LCM------89s51 * ; *CS----P3.0* *SID---P3.1* *SCLK-----------P3.2* *PSB----------P3.5 * ; *RESET----------P3.3 * ;注:89s51的晶振频率为12MHz * ;***************************************************************************
STD BIT P2.1 ;串行数据线 SCLK BIT P2.2 ;串行时钟线
START EQU 30H ;起始字节 COM EQU 31H ;命令/数据 HDATA EQU 32H ;命令/数据字节高位 LDATA EQU 33H ;命令/数据字节低位 ASC EQU 34H ;ASCII数据单元 XPOS EQU 35H YPOS EQU 36H ORG 0000H MAIN: MOV SP,#60H CALL LCDRESET ; 模块系统初始化 CALL HZKDIS ; 显示汉字子程序 MOV START,#0F8H ; 写入命令(11111000) MOV COM,#80H ; 设定显示位置 CALL LCDWRITE MOV START,#0FAH ;写数据 (11111010) ;MOV COM,#10H ;显示字符 ;CALL LCDWRITE ; MOV COM,#11H ;显示字符 ;CALL LCDWRITE ;MOV COM,#1EH ;显示字符 ;CALL LCDWRITE ;MOV COM,#1FH ;显示字符 ;CALL LCDWRITE MOV START,#0F8H ; 写入命令(11111000) MOV COM,#34H ;扩充功能设定 CALL LCDWRITE MOV COM,#05H ;反白选择 CALL LCDWRITE CALL DL40MS ;延时 CALL DL40MS CALL DL40MS CALL DL40MS ;延时 CALL DL40MS CALL DL40MS ;MOV A,#055H ;绘图方式下写55数据 ;CALL LCDFILL ;CALL CLEAR ;清屏 MOV COM,#01H ;清屏 CALL LCDWRITE JMP MAIN CLEAR: ;清屏子程序 MOV A,#00H CALL LCDFILL RET LCDRESET: LCALL DL1MS ;延时等待内部复位 MOV START,#0F8H ; 写入命令(11111000) MOV COM,#30H ;使用基本指令集 LCALL LCDWRITE MOV COM,#0CH LCALL LCDWRITE ;整体显示ON MOV COM,#01H ;清屏 LCALL LCDWRITE LCALL DL1MS MOV COM,#06H ;显示右移 LCALL LCDWRITE LCALL DL1MS RET LCDWRITE: ;模块写入子程序 MOV A,COM ;送待发数据命令A ANL A,#0F0H ;屏蔽低4位 MOV HDATA,A ;将高4位送HDATA单元 MOV A,COM ;取低4位 SWAP A ;高低4位互换 ANL A,#0F0H MOV LDATA,A ;将低4位送LDATA单元 MOV A,START ;取起始字节 LCALL SENDBIT ;发送 LCALL DL1MS ;延时1ms MOV A,HDATA LCALL SENDBIT LCALL DL1MS MOV A,LDATA LCALL SENDBIT LCALL DL1MS RET HZKDIS: ;显示汉字子程序 MOV R5,#2 MOV START,#0F8H ;写入命令(11111000) MOV COM,#80H ;设定显示位置 LCALL LCDWRITE MOV DPTR,#TAB ;指向文字型代码表 MOV A,#00H ;取汉字代码低位 DIS_1: MOV R6,#8 ;每行八个汉字 DIS_2: MOV START,#0FAH ;写数据 (11111010) CLR A MOVC A,@A+DPTR MOV COM,A CALL LCDWRITE ;写入显示模块 INC DPTR ;取汉字代码高位 CLR A MOVC A,@A+DPTR MOV COM,A CALL LCDWRITE ;写入显示模块 INC DPTR CALL DL40MS DJNZ R6,DIS_2 ;未显示完则继续 MOV START,#0F8H ; 写入命令(11111000) MOV COM,#90H ;第二行地址 CALL LCDWRITE DJNZ R5,DIS_1 MOV R5,#2 MOV START,#0F8H ;写入命令(11111000) MOV COM,#88H ;第三行地址 CALL LCDWRITE DIS_4: MOV R6,#08H DIS_3: MOV START,#0FAH ;写数据 (11111010) CLR A MOVC A,@A+DPTR MOV COM,A CALL LCDWRITE ;写入显示模块 INC DPTR ;取汉字代码高位 CLR A MOVC A,@A+DPTR MOV COM,A CALL LCDWRITE ;写入显示模块 INC DPTR CALL DL40MS DJNZ R6,DIS_3 ;未显示完则继续 MOV START,#0F8H ; 写入命令(11111000) MOV COM,#98H ;第四行地址 CALL LCDWRITE DJNZ R5,DIS_4 ;遇“0”结束显示 RET ;写完两行则结束 LCDFILL: ;绘图 MOV R4,A MOV XPOS,#0 MOV YPOS,#0 MOV START,#0F8H MOV COM,#30H ;重新选择基本指令? CALL LCDWRITE MOV COM,#01H ;清屏 CALL LCDWRITE MOV COM,#36H ;扩充功能设定 CALL LCDWRITE
LCD_A1: MOV YPOS,#0 LCD_A2: MOV START,#0F8H MOV A,XPOS ;设定绘图首地址 ADD A,#80H ; X坐标 MOV COM,A CALL LCDWRITE MOV A,YPOS ;Y坐标 ADD A,#80H MOV B,A MOV COM,A CALL LCDWRITE
MOV START,#0FAH MOV COM,R4 CALL LCDWRITE CALL LCDWRITE INC YPOS MOV A,B CJNE A,#87H,LCD_A2 ;最后一列地址为87H INC XPOS MOV A,XPOS CJNE A,#20H,LCD_A1 ;最后行地址为80H+20H=0A0H MOV XPOS,#0 LCD_A3:MOV YPOS,#0 LCD_A4: MOV START,#0F8H MOV A,XPOS ;设定绘图首地址 ADD A,#80H ; X坐标 MOV COM,A CALL LCDWRITE MOV A,YPOS ;Y坐标 ADD A,#80H MOV B,A MOV COM,A CALL LCDWRITE
MOV START,#0FAH MOV COM,R4 CALL LCDWRITE CALL LCDWRITE INC YPOS MOV A,B CJNE A,#8FH,LCD_A4 ;最后一列地址为8FH INC XPOS MOV A,XPOS CJNE A,#20H,LCD_A3 ;最后行地址为80H+20H=0A0H RET SENDBIT: ;串行字节数据发送子程序 MOV R7,#08H ;发送8位 SEND_1: RLC A MOV STD,C ;数据送数据线 CLR SCLK ;产生同步时钟 SETB SCLK DJNZ R7,SEND_1 ;未发送完8位继续 RET DL1MS: ;延时子程序 PUSH 00H ;0.1MS PUSH 01H PUSH 02H MOV R2,#01H WA_PA: MOV R0,#0FH WA_PB: MOV R1,#0FH DJNZ R1,$ DJNZ R0,WA_PB DJNZ R2,WA_PA POP 02H POP 01H POP 00H RET NOP RET DL40MS: ;延时子程序 PUSH 00H ;40MS PUSH 01H PUSH 02H MOV R2,#01H DL_PA: MOV R0,#0FFH DL_PB: MOV R1,#0FFH DJNZ R1,$ DJNZ R0,DL_PB DJNZ R2,DL_PA POP 02H POP 01H POP 00H RET NOP NOP NOP RET TAB: //DB " 大漠孤烟直 " //DB " 长河落日圆 " //DB " 欲将轻骑逐 " //DB " 大雪满弓刀 " DB "少小离家老大回," DB "乡音无改鬓毛衰。" DB "儿童相见不相识," DB "笑问客从何处来。" DB 00H END |