我使用的是vpg12864lcd,控制芯片是t6963c,单片机at89s8252,采用直接控制方式连接。p0口挂接lcd的数
据口,a15经过反相后接到lcd的片选上,a8连接到c/d上,wr和rd直接连接在一起,数据口地址8000h,命令地
址8100h,复位电路用rc复位。但是就是不显示,复位以后,读出的状态字有时候是23h,有时候是a3h,是不是
液晶有问题?也曾经把复位挂接到单片机的一个口线上,结果一样。为什么复位以后读出来的状态字会变化?
写命令和写数据到lcd,没有反应,不知道什么原因,非常困惑,请高手帮忙!多谢!
付源程序:
DAT1 EQU 30H ; 第一参数单元 DAT2 EQU 31H ; 第二参数/数据单元 COM EQU 32H ; 指令代码单元 C_ADD EQU 8100H ; 指令通道地址 D_ADD EQU 8000H ; 数据通道地址
MAIN: MOV R6 #50H MOV R7 #00H DELY1: NOP DJNZ R7 DELY1 DJNZ R6 DELY1 ; 上电延时
LCALL LCD_INT ;调用初始化子程序 LCALL LCD_CLEAR ;调用清显示子程序
MOV DAT1 #00H ;设置显示 RAM 首地址 MOV DAT2 #00H MOV COM #24H LCALL PR1 MOV R3 #00H ;设置循环量 MOV R4 #20H MOV COM #0B0H ;设置自动写方式 LCALL PR12 TEST1: LCALL ST3 ;判状态位 S2 MOV A #21H ;置数据"0F" LCALL PR13 ;写入数据 DJNZ R3 TEST 1 ;循环 DJNZ R4 TEST 1 MOV COM #0B2H ;设置自动写结束指令 LCALL PR12 SJMP $ ;********************************************** ;执行完应该是满屏显示a,却什么都不显示,为什么? ;**********************************************
;******读状态字子程序********************************* RD_ST: MOV DPTR #C_ADD ; 读取状态字 MOVX A @DPTR RET ;******判断状态位sta1,sta0子程序********************************* ST_1: LCALL R_ST JNB ACC.0 ST_1 JNB ACC.1 ST_1 RET ;*******判断自动写状态程序****************************************** ST_3: LCALL RD_ST JNB ACC.3 ST_3 RET ;*********写命令数据子程序************************************* PR1: LCALL ST01 ; 双字节参数指令写入入口 MOV A DAT1 ; 取第一参数单元数据 LCALL PR13 ; 写入参数 PR11: LCALL ST01 ; 单字节参数指令写入入口 MOV A DAT2 ; 取第二参数单元数据 LCALL PR13 ; 写入参数 PR12: LCALL ST01 ; 无参数指令写入入口 MOV A COM ; 取指令代码单元数据 LJMP PR14 ; 写入指令代码 PR13: MOV DPTR #D_ADD ; 设置数据通道地址/数据写入入口 PR14: MOVX @DPTR A ; 写入操作 RET ;************初始化子程序******************************** LCD_INT: MOV DAT1 #00H ;设置文本显示区域首地址 MOV DAT2 #00H MOV COM #40H LCALL PR1 MOV DAT1 #20H ;设置文本显示区域宽度 MOV DAT2 #00H ;即一行显示所占字节数 MOV COM #41H LCALL PR1 MOV DAT1 #00H ;设置图形显示区域首地址 MOV DAT2 #08H ;或为文本属性区域首地址 MOV COM #42H LCALL PR1 MOV DAT1 #20H ;设置图形显示区域宽度 MOV DAT2 #00H ;或为文本属性区域宽度 MOV COM #43H ;即一行显示所占字节数 LCALL PR1 MOV COM #0A7H ;光标形状设置 LCALL PR12 MOV COM #80H ;显示方式设置 逻辑 或 合成 LCALL PR12 MOV COM #9CH ;显示开关设置 LCALL PR12 RET ;*********清显示子程序*************************************** LCD_CLEAR: MOV DAT1,#00H ;RAM MOV DAT2,#00H MOV COM,#24H LCALL PR1 MOV R3,#00H ; MOV R4,#20H MOV COM,#0B0H ; LCALL PR12 CLEAR1: LCALL ST_ ;S2 MOV A,#00H ;"0" LCALL PR13 ; DJNZ R3,CLEAR1 ; DJNZ R4,CLEAR1 MOV COM,#0B2H ; LCALL PR12 RET
END
|