现在在学习单片机,做了个键盘与显示实验,但不知代码哪里出现了问题,lcd无法显示,特来问下大家,想知道如何将问题解决,谢谢大家的解答仿真结果:lcd不显示任何数据以下为此次代码:
ORG 1000H;
MAIN:
;*******显示屏显示准备************
RS EQU P3.7;
RW EQU P3.6;
E EQU P3.5;
MOV P1,#1; 清屏并光标复位
ACALL ELABLE;
MOV P1,#00111000B;设置8位单行5*10显示
ACALL ELABLE;
MOV P1,#00000111B; 显示器开,光标开,光标允许闪烁
ACALL ELABLE;
MOV P1,#00000110B;文字不动,光标自动右移
ACALL ELABLE;
MOV P1,#80H;写入显示开始位置
ACALL ELABLE;
;*******键值查找*******************
DISP: ACALL KEYSCAN; 调用键盘扫描程序
MOV A,30H; 取出偏移量
MOV DPTR,#TABLE; 指向table表
MOVC A,@A+DPTR; 取出键盘所指数据
;*******将数据送到显示器上显示******
MOV P1,A;
MOV P2,A;
SETB RS;
CLR RW;
CLR E;
ACALL DELAY;
SETB E;
ACALL DELAY_XD;
SJMP MAIN;
;*******写入控制命令的子程序************
ELABLE: CLR RS;
CLR RW;
CLR E;
ACALL DELAY;
SETB E;
RET;
;*******判断显示器是否处于忙的状态******
DELAY: MOV P1,#0FFH;
CLR RS;
SETB RW;
CLR E;
NOP;
SETB E;
JB P1.7,DELAY;
RET;
;******消抖**********************
DELAY_XD:MOV R5,#10H;
NEXT1: MOV R6,#10H;
NEXT2: MOV R7,#10H;
DJNZ R7,$;
DJNZ R6,NEXT2;
DJNZ R5,NEXT1;
;*******线反转法*****************
KEYSCAN:MOV P3,#0FH;
MOV A,P3;
ANL A,#0FH;
MOV R3,A;
MOV P3,#0F0H;
MOV A,P3;
ANL A,#0F0H;
ORL A,R3;
CJNE A,#0FFH,KEYPRO;
RET;
;*******键值处理********************
KEYPRO: MOV 31H,A;
MOV DPTR,#KEYVALUE;
MOV R4,#0;
KEY1: INC R4;
MOV A,R4;
MOVC A,@A+DPTR;
CJNE A,31H,KEY1;
MOV A,R4;
MOV 30H,A;
RET;
;*******表格数据*******************
KEYVALUE:DB 7EH,0BEH,0DEH,0EEH,7DH,0BDH,0DDH,0EDH,7BH,0BBH,0DBH,0EBH,77H,0B7H,0D7H,0E7H;
TABLE: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H;
END
|