[问答] 课设快截止了,各位大神看下我的LCD1602为啥不亮

[复制链接]

实习生

发表于 2018-1-9 13:32:32   246 查看 7 回复 显示全部楼层 倒序浏览
分享
仿真没有问题,程序也写入89c52了,焊完之后给电源LCD1602就是不亮,用电表检查过几遍了,仍没什么思路解决,求助各位大神啊
微信图片_20180109133108.png
微信图片_20180109133049.jpg
微信图片_20180109133040.jpg
微信图片_20180109133017.jpg
标签:LCD1602

实习生

发表于 2018-1-9 13:32:54    楼主|
代码:
RS EQU P2.0                   ;引入p2.0位为命令数据引脚
RW EQU P2.1                    ;引入读写选择引脚
E EQU P2.2                           ;引入使能端
OPEN EQU P2.3                        ;引入显屏的开关端


ORG 0000H
AJMP MAIN
ORG 0003H                        ;外部中断0入口       
AJMP INTO                                
ORG 0030H



MAIN:
SETB EX0                  ;允许中断0
SETB EA                   ;中断总开关
CLR IT0                   ;外部中断0方式为低电平
ACALL KS                   ;开关机检查
ACALL INITIAL           ;显屏模块初始化
ACALL DISPLAY2     ;调用液晶显示子程序
AJMP MAIN

KS:        JB OPEN,KS_END           ;open键按下走程序,没按下等待
    AJMP KS                          
        KS_END:
        RET
       
INITIAL:  
         MOV R0,#33                        ;最长字符串的长度
          MOV A,#01H                 ;清屏
                 ACALL WR_CODE  ;(指令写入显屏)
         MOV A,#38H           ;工作方式的设置(8位数据接口、两行显示、5X8点阵字符)          
                 ACALL WR_CODE
                 MOV A,#0CH    ;显示开关的设置(显示开、光标不显示、光标不闪烁)
                 ACALL WR_CODE
                 MOV A,#06H   ;进入模式设置(写入新数据后光标左移、显示不移动)
                 ACALL WR_CODE
                 RET


       


DISPLAY2:   

MOV A,#0C0H        ;第二行第1个点

ACALL WR_CODE           ;写指令

MOV DPTR, #JUZI                 ;定义第二行字符串首地址

ACALL PR_STR1                ;取数据

ACALL WR_DATA1                 ;写P1口数据进入指令

MOV A,#82H                          ;第一行第2个点
ACALL WR_CODE                  ;写指令

MOV DPTR, #JUZI1         ;定义第一行字符串首地址

ACALL PR_STR1                 ;取数据

ACALL WR_DATA1                 ;写P1口数据进入指令


DISP1:



MOV A,#1CH         ;字符左移命令

ACALL WR_CODE

ACALL DELAY1           ;延时移动

DJNZ R0,DISP1                ;第二行(最长行)是否移动结束?结束重新循环

RET



WR_CODE:                                   ;RS=0 RW=0 写显屏指令
         MOV P1,A
                 CLR RS
                 CLR RW
                 CLR E
                 LCALL DELAY
                 SETB E                 
                 RET
       
WR_DATA1:                                         ;RS=1 RW=0 写数据到DDRAMZ指令
      MOV P1, A
      SETB RS ;写入数据
      CLR RW
      CLR E
      LCALL DELAY ;判断液晶模块是否忙
      SETB E
      RET


PR_STR1:                                  ;逐个读出字符串数据
CLR   A
MOVC A, @A+DPTR
JZ    END_PR1
ACALL WR_DATA1
INC   DPTR
AJMP PR_STR1
END_PR1:     
RET

INTO:                       
         MOV A,#01H    ;开关松开清屏
                 ACALL WR_CODE
                 RETI


DELAY:
MOV P1,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待
RET
DELAY1: MOV R7,#25           ;延时函数
DELAY2: MOV R6,#100
DELAY3: MOV R5,#50
DELAY4: DJNZ R5,DELAY4
        DJNZ R6,DELAY3
        DJNZ R7,DELAY2
RET




JUZI:           ;第二行字符串
DB ' Hello everone! Welcome to Harbin',00H

JUZI1:                ;第一行字符串
DB        '  3115000698 ',00H
END
回复

点赞 举报

高级工程师

发表于 2018-1-9 13:49:32  
你需要好好看看1602的资料,1602的实物连接需要接对比度调节电阻,就是一个50K的可调电阻,第15、16脚的背光连接需要接,如果是蓝屏1602,没有背光是看不到的,看你的1602象是蓝屏的
回复

点赞 举报

实习生

发表于 2018-1-9 13:56:26    楼主|
人中狼 发表于 2018-1-9 13:49
你需要好好看看1602的资料,1602的实物连接需要接对比度调节电阻,就是一个50K的可调电阻,第15、16脚的背光连接需要接,如果是蓝屏1602,没有背光是看不到的,看你的1602象是蓝屏的

谢谢你,我先试一下 可变电阻是要50k的吗
回复

点赞 举报

实习生

发表于 2018-1-9 14:03:23    楼主|
uffnbu 发表于 2018-1-9 13:56
谢谢你,我先试一下 可变电阻是要50k的吗

我接了背光后就只有背光灯亮呢,还是没有那个字母出来,但现在还没接个可变电阻
微信图片_20180109140317.jpg
回复

点赞 举报

高级工程师

发表于 2018-1-9 14:24:07  
调节对比度的可调电阻一定要接,应该不小于10K吧,我是用50K的
回复

点赞 举报

实习生

发表于 2018-1-9 15:10:25    楼主|
人中狼 发表于 2018-1-9 14:24
调节对比度的可调电阻一定要接,应该不小于10K吧,我是用50K的

我试了下接地 确实有字母出现了 而且没乱码 ,。但同时又个问题我的字母是向右移动的 我仿真是向左的,移动方向字母改变了。
回复

点赞 举报

高级工程师

发表于 2018-1-9 19:27:27  
注意看1602的资料,MOV A,#1CH         ;字符左移命令,这里注释的是左移,但实际写入的参数是右移。
另外
ACALL INITIAL           ;显屏模块初始化
ACALL DISPLAY2     ;调用液晶显示子程序
AJMP MAIN
这里最后不需要跳转到MAIN,应该跳转到ACALL INITIAL           ;显屏模块初始化和ACALL DISPLAY2     ;调用液晶显示子程序之间,也就是ACALL INITIAL           ;显屏模块初始化之前都是对硬件或中断等的初始设置,没有更改的话只需要执行一次就可以了。
再你的程序里,就是循环执行ACALL DISPLAY2就可以了
回复

点赞 举报

高级模式
您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARM技术论坛

Android论坛

Linux论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

无线充电技术

-

硬件设计论坛

PCB设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PADS技术论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

Orcad论坛

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区