| 如果仿真运作没问题 就检查硬件和仿真电路一样不一样 |
| 也有可能是IO口的问题哎 |
|
用C写代码,进行仿真,我都觉得那是在浪费时间 用汇编,那就更浪费时间了 你这个问题就证明了这一点:仿真成功了,那又如何,最后有问题还不是得花时间去解决 直接编译下载,慢慢找问题还快点 |
| 谢谢大佬们!可以成功运行了!!!我把WAIT删了改成DELAY了!谢谢谢谢!!! |
|
硬件的问题只能靠你自己,软件上倒是有个建议,把;WAIT: 这段子程序改成仅仅延时几个微秒。 |
glinfei 发表于 2022-6-29 17:22 好的我改一下! |
| 汇编代码看不懂,,,,,,,但是调试屏幕时要注意写显示命令后要有延时,虽然有遇忙判断,但在实际应用时,必须注意延时.可以参看C代码.不知道我说的对不对.试一试. |
| 我都不敢相信我的眼睛了,难道你EN没有拉高吗?那单片机怎么会运行呢? |
君工创 发表于 2022-6-29 09:29 (┯_┯)我拧了好久,一行白块是最好的结果啦 |
|
START EQU 20H.0 INPUT EQU 20H.1 KEY EQU 21H PWM_ZKB EQU 22H PWM_CNT EQU 23H FLAG EQU 30H U8comdata EQU 31H U8T_data_H EQU 32H U8T_data_L EQU 33H U8RH_data_H EQU 34H U8RH_data_L EQU 35H U8checkdata EQU 36H U8temp EQU 37H temp EQU 38H IN1 BIT P1.0 IN2 BIT P1.1 ENA BIT P1.2 RS BIT P2.0 RW BIT P2.1 E BIT P2.2 DQ BIT P2.3 ORG 0000H AJMP MAIN ORG 001BH LJMP T1_ISR ORG 0100H MAIN: MOV SP,#60H MOV PWM_ZKB,#70 LCALL SETLCD LCALL LINE1 MOV DPTR,#TAB1 LCALL LCDDISP LCALL T1_INIT LOOP: LCALL KEYSCAN LCALL KEYPROC LCALL DHT11 LCALL DISPLAY JMP LOOP T1_INIT: MOV TMOD,#10H MOV TH1,#0FCH MOV TL1,#018H SETB ET1 SETB TR1 SETB EA RET T1_ISR: PUSH ACC MOV TH1,#0FCH MOV TL1,#018H INC PWM_CNT MOV A,PWM_CNT CJNE A,#100,T1_0 MOV PWM_CNT,#0 T1_0: CLR C MOV B,PWM_ZKB MOV A,PWM_CNT SUBB A,B JNC PWM_0 SETB ENA JMP T1_END PWM_0: CLR ENA T1_END: POP ACC RETI Read: MOV temp,#8 MOV U8comdata,#0 LOOP_COM: MOV FLAG,#0 LOOP3: INC FLAG MOV A,FLAG JB DQ,LOOP3_END CJNE A,#0,LOOP3 LJMP COM_END LOOP3_END: LCALL Delay_10us LCALL Delay_10us LCALL Delay_10us MOV U8temp,#0 JNB DQ,HIGH_END MOV U8temp,#1 HIGH_END: MOV FLAG,#0 LOOP4: INC FLAG MOV A,FLAG JNB DQ,LOOP4_END CJNE A,#0,LOOP4 LJMP COM_END LOOP4_END: MOV A,FLAG CJNE A,#0,NO_FLAG LJMP COM_END NO_FLAG: MOV A,U8comdata RL A ORL A,U8temp MOV U8comdata,A DJNZ temp,LOOP_COM COM_END: RET DHT11: CLR EA CLR DQ MOV A,#36 LCALL Delay SETB DQ LCALL Delay_10us LCALL Delay_10us LCALL Delay_10us LCALL Delay_10us JB DQ,RH_END MOV FLAG,#0 LOOP1: INC FLAG MOV A,FLAG JB DQ,LOOP1_END CJNE A,#0,LOOP1 LJMP RH_END LOOP1_END: MOV FLAG,#0 LOOP2: INC FLAG MOV A,FLAG JNB DQ,LOOP2_END CJNE A,#0,LOOP2 LJMP RH_END LOOP2_END: LCALL Read MOV U8RH_data_H,U8comdata LCALL Read MOV U8RH_data_L,U8comdata LCALL Read MOV U8T_data_H,U8comdata LCALL Read MOV U8T_data_L,U8comdata LCALL Read MOV U8checkdata,U8comdata SETB DQ RH_END: SETB EA RET KEYSCAN: SETB F0 MOV KEY,#16H MOV R3,#0FEH MOV R1,#00H L2: MOV A,R3 MOV P3,A LCALL DELAY1MS MOV A,P3 SWAP A SETB C MOV R5,#4 L3: RRC A JNC KEY1 INC R1 DJNZ R5,L3 MOV A,R3 SETB C RLC A MOV R3,A JB ACC.4,L2 LJMP KEY_OUT KEY1: CLR F0 MOV KEY,R1 T3: MOV A,P3 XRL A,R3 JNZ T3 KEY_OUT: RET KEYPROC: MOV A,KEY CJNE A,#16H,K_0 RET K_0:CLR C SUBB A,#10 JNC G10 L10:MOV A,KEY ADD A,#'0' LCALL LCDDAT JMP KP_END G10:MOV A,KEY CJNE A,#0AH,T0B SETB INPUT MOV A,#83H LCALL LCDCMD MOV DPTR,#M_CL2 LCALL LCDDISP MOV A,#83H LCALL LCDCMD MOV A,#0DH LCALL LCDCMD JMP KP_END T0B:CJNE A,#0BH,T0C CLR INPUT MOV A,#0CH LCALL LCDCMD JMP KP_END T0C:CJNE A,#0CH,T0D JB START,STOP SETB START CLR IN1 SETB IN2 JMP KP_END STOP: CLR START SETB IN1 SETB IN2 JMP KP_END T0D:CJNE A,#0DH,T0E CPL IN1 CPL IN2 JMP KP_END T0E:CJNE A,#0EH,T0F MOV A,PWM_ZKB CJNE A,#50,DEC_20 JMP KP_END DEC_20: SUBB A,#20 MOV PWM_ZKB,A JMP KP_END T0F:CJNE A,#0FH,KP_END MOV A,PWM_ZKB CJNE A,#90,ADD_20 JMP KP_END ADD_20: ADD A,#20 MOV PWM_ZKB,A KP_END: RET DISPLAY: JB INPUT,DISP_END CLR EA PUSH ACC LCALL LINE2 MOV A,#'T' LCALL LCDDAT MOV A,#':' LCALL LCDDAT MOV A,U8T_data_H MOV B,#10 DIV AB ADD A,#'0' LCALL LCDDAT XCH A,B ADD A,#'0' LCALL LCDDAT MOV A,#0DFH LCALL LCDDAT MOV A,#'C' LCALL LCDDAT MOV A,#' ' LCALL LCDDAT MOV A,#'R' LCALL LCDDAT MOV A,#':' LCALL LCDDAT MOV A,U8RH_data_H MOV B,#10 DIV AB ADD A,#'0' LCALL LCDDAT XCH A,B ADD A,#'0' LCALL LCDDAT MOV A,#'%' LCALL LCDDAT POP ACC SETB EA DISP_END: RET DISP_NUM_2: MOV B,#10 DIV AB ADD A,#'0' LCALL LCDDAT MOV A,B ADD A,#'0' LCALL LCDDAT RET DISP_NUM_3: MOV B,#100 DIV AB ADD A,#'0' LCALL LCDDAT MOV A,B MOV B,#10 DIV AB ADD A,#'0' LCALL LCDDAT MOV A,B ADD A,#'0' LCALL LCDDAT MOV A,#' ' LCALL LCDDAT RET DELAY1MS: MOV R7,#01H DL1:MOV R6,#8EH DL0:MOV R5,#02H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET Delay: MOV R4,A D1: MOV R5,#0FFH DJNZ R5,$ DJNZ R4,D1 RET Delay_10us: NOP NOP NOP NOP NOP NOP RET Delay_2S: MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay MOV A,#250 LCALL Delay RET SETLCD: MOV A,#01H ACALL LCDCMD MOV A,#38H ACALL LCDCMD MOV A,#0CH ACALL LCDCMD MOV A,#06H ACALL LCDCMD ACALL LCDFONT RET LCDCMD: CLR RS CLR RW MOV P0,A CLR E ACALL WAIT SETB E RET LCDDAT: SETB RS CLR RW MOV P0,A CLR E ACALL WAIT SETB E RET WAIT: MOV P0,#0FFH CLR RS SETB RW CLR E NOP SETB E JB P0.7,WAIT RET LINE1: MOV A,#80H ACALL LCDCMD RET LINE2: MOV A,#0C0H ACALL LCDCMD RET LCDBSP: MOV A,#10H ACALL LCDCMD MOV A,#' ' ACALL LCDDAT MOV A,#10H ACALL LCDCMD RET LCDDISP: MOV R2,#00H NEXT: MOV A,R2 MOVC A,@A+DPTR CJNE A,#10H,DSP RET DSP:ACALL LCDDAT INC R2 AJMP NEXT RET LCDFONT: MOV A,#40H LCALL LCDCMD MOV DPTR,#FONT MOV R1, #00H LOP2:MOV A,R1 MOVC A, @A+DPTR ACALL LCDDAT INC R1 CJNE R1,#10H, LOP2 RET M_CLS: DB " ",10H M_CL2: DB " ",10H FONT: DB 00H,1FH,04H,1FH,04H,04H,1FH,00H DB 00H,1FH,00H,0EH,00H,00H,1FH,00H TAB1: DB 00H,01H," 12345678",10H END |
| 太悲摧的图片大师 |
|
你把你的代码完整地贴上来看看 (不要截图!不要截图!不要截图!) 原理图得提供啊,至少框图有吧,怎么接线的 |
| 估计是延时问题 |
| 楼主真的认为会有高手将你发的一堆图片完整抄写成汇编程序,然后在没有电路图没有实物图的情况下研究出正确答案给你么 ? |
| 汇编无能为力 |
| 对比度调整不合适也会显示白屏的啊。 |
| 我用万用表测过每根接线都是对的,用的最小系统板,LCD是直接用杜邦线接的没有焊接过程T_T |
|
来看一下51hei论坛里面解决此问题的痛苦经历吧: 51hei搜索框输入"1602 方块"或者"1602 黑块"或者"1602 白块"或者"1602 格": 这个是io口设置问题,最终搞定了:http://www.51hei.com/bbs/dpj-199732-1.html http://www.51hei.com/bbs/dpj-168643-1.html http://www.51hei.com/bbs/dpj-208189-1.html http://www.51hei.com/bbs/dpj-210690-1.html 既有可能是软件问题也有硬件问题 http://www.51hei.com/bbs/dpj-187378-1.html http://www.51hei.com/bbs/dpj-160754-1.html |
|
应该大概率是硬件问题,因为程序多是粘贴的不应该有问题。 如果确保硬件没问题,我认为是判断LCD忙有问题,你没加延时,估计就卡在WAIT 那段了。建议你干脆就取消判断忙,改成延时就行了。 |