搜索
bottom↓
回复: 7

大家帮忙分析下3.3V 1602上电不显示的问题?

[复制链接]

出0入0汤圆

发表于 2012-12-8 09:06:55 | 显示全部楼层 |阅读模式

问题描述:
   我用3.3V单片机控制3.3V的1602,现在发现一个问题就是在上电后不显示,什么都不动它,等上1分钟左右它才显示出来了.然后就可以正常控制了,

在1602正常显示后,不断1602的电的前提下,断单片机的电又上电,可以正常显示.把1602和单片机同时断电又上电就要等上1分钟左右它才显示.

连线:
PA-->D0~D7
PB.5->E
PB.6->RS
PB.7->RW
用10K电位器调挑背光

单片机是51内核的,但把端口作为外部寄存器来读写.这点跟8051不同.

        mov        DPTR,        #PB
        MOVX        A,        @DPTR ;读PB口

        mov        DPTR,        #PB
        MOVX        @DPTR        A; 写PB口

        MOV        DPTR,        #PACONH
        MOV        A,        #10101010B        ;set pa4~7 output

        MOV        DPTR,        #PACONH
        MOV        A,        #01010101B        ;set pa4~7   input

程序如下:
;======================================================
;======================================================
PORT_E        EQU        ACC_5       
PORT_RS        EQU        ACC_6       
PORT_RW        EQU        ACC_7       
PORT_BY        EQU        ACC_7


Read_1602_BY:
        mov        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_E
        CLR        PORT_RS                ;=1:DATA;=0:CMD
        SETB        PORT_RW        ;=1:READ;=0:WRITE
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PACONH
        MOV        A,        #01010101B        ;set pa input
        MOVX        @DPTR,        A
        MOV        DPTR,        #PACONL
        MOV        A,        #01010101B
        MOVX         @DPTR,        A
       
        MOV        DPTR,        #PA
        MOV        A,        #0FFH
        MOVX        @DPTR,        A

read_1602_by_lp:
        mov        DPTR,        #PB
        MOVX        A,        @DPTR
        SETB        PORT_E
        CLR        PORT_RS        ;=1:DATA;=0:CMD
        SETB        PORT_RW        ;=1:READ;=0:WRITE
        MOVX        @DPTR,        A
        NOP
        NOP
        NOP
        MOV        DPTR,        #PA
        MOVX        A,        @DPTR
        JNB        PORT_BY,        end_read_1602_by
       
        JMP        read_1602_by_lp

end_read_1602_by:
        RET


Write_1602_cmd:
        CALL        Delay40us
        CALL        Read_1602_BY        ;wait BY=0
        MOV        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_E
        CLR        PORT_RS        ;=1:DATA;=0:CMD
        CLR        PORT_RW        ;=1:READ;=0:WRITE
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PACONH
        MOV        A,        #10101010B        ;set pa output
        MOVX        @DPTR,        A
        MOV        DPTR,        #PACONL
        MOV        A,        #10101010B
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PA
        MOV        A,        R7
        MOVX        @DPTR,        A
        MOV        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_RS        ;=1:DATA;=0:CMD
        CLR        PORT_RW        ;=1:READ;=0:WRITE
        SETB        PORT_E        ;rising
        MOVX        @DPTR,        A
        NOP
        NOP
        NOP
        NOP
        CLR        PORT_E
        MOVX        @DPTR,        A
        RET

Write_1602_cmd0:
        MOV        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_E
        CLR        PORT_RS        ;=1:DATA;=0:CMD
        CLR        PORT_RW        ;=1:READ;=0:WRITE
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PACONH
        MOV        A,        #10101010B        ;set pa output
        MOVX        @DPTR,        A
        MOV        DPTR,        #PACONL
        MOV        A,        #10101010B
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PA
        MOV        A,        R7
        MOVX        @DPTR,        A
        MOV        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_RS        ;=1:DATA;=0:CMD
        CLR        PORT_RW        ;=1:READ;=0:WRITE
        SETB        PORT_E        ;rising
        MOVX        @DPTR,        A
        NOP
        NOP
        NOP
        NOP
        CLR        PORT_E
        MOVX        @DPTR,        A
        RET

Write_1602_data:
        CALL        Delay40us
        CALL        Read_1602_BY        ;wait BY=0
        MOV        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_E
        CLR        PORT_RW        ;=1:READ;=0:WRITE
        SETB        PORT_RS        ;=1:DATA;=0:CMD
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PACONH
        MOV        A,        #10101010B        ;set pa output
        MOVX        @DPTR,        A
        MOV        DPTR,        #PACONL
        MOV        A,        #10101010B
        MOVX        @DPTR,        A
       
        MOV        DPTR,        #PA
        MOV        A,        R7
        MOVX        @DPTR,        A
        MOV        DPTR,        #PB
        MOVX        A,        @DPTR
        CLR        PORT_RW        ;=1:READ;=0:WRITE
        SETB        PORT_RS        ;=1:DATA;=0:CMD
        SETB        PORT_E
        MOVX        @DPTR,        A
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR        PORT_E
        MOVX        @DPTR,        A
        RET
       

main_1602_ini:
        CALL        Delay5ms
        CALL        Delay5ms
       
        MOV        R7,        #038H
        CALL        Write_1602_cmd0        ;set 8bit,two line,5*11
        CALL        Delay5ms
        CALL        Delay250ms
        MOV        R7,        #038H
        CALL        Write_1602_cmd0        ;不等忙信号
        CALL        Delay5ms
        CALL        Delay250ms

        MOV        R7,        #038H
        CALL        Write_1602_cmd0        ;不等忙信号
        CALL        Delay5ms
        CALL        Delay5ms
       
        MOV        R7,        #038H
        CALL        Write_1602_cmd0        ;不等忙信号
        CALL        Delay5ms
        CALL        Delay5ms
       
        MOV        R7,        #00001000b        ;set show off,cursor off,cursor no flash
        CALL        Write_1602_cmd0        ;不等忙信号
        CALL        Delay5ms
        CALL        Delay5ms
        MOV        R7,        #01H        ;set clr lcd data
        CALL        Write_1602_cmd0        ;不等忙信号
        CALL        Delay5ms
        CALL        Delay5ms

        MOV        R7,        #00000110b        ;set AC inc
        CALL        Write_1602_cmd0        ;不等忙信号

        CALL        Delay5ms
        CALL        Delay5ms

        MOV        R7,        #00001100b        ;#00001100b        ;set show on,cursor off,cursor no flash
        CALL        Write_1602_cmd0        ;不等忙信号
        CALL        Delay5ms
        CALL        Delay5ms
        ret

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-12-8 09:34:57 | 显示全部楼层
你发了复位没

出0入0汤圆

 楼主| 发表于 2012-12-8 09:40:57 | 显示全部楼层
有发送复位命令的,倒数第3条命令

        

出0入0汤圆

 楼主| 发表于 2012-12-8 09:52:46 | 显示全部楼层
补充一点.在跑完1602的程序后,1602后面的程序已经正常运行(已经验证),
在不显示的1分钟期间,对1602写显示数据,显示新写的数据
在不显示的1分钟期间,不对1602操作,显示原来的写的数据.

在上电后,有等待500MS的延时,才初始化的,然后延时100MS后又初始化一次.最后才送显示数据.

出0入0汤圆

发表于 2012-12-8 10:30:38 | 显示全部楼层
楼主可以试试以下实验,进一步判断

整个系统断电,确保复位。
1602上电,MCU不上电,等待一分钟,MCU再上电,看看是否显示?如果不显示,继续等待一分钟,看看是否显示?


以上流程可以判断是软件问题还是硬件问题了

出0入0汤圆

发表于 2012-12-8 10:37:00 | 显示全部楼层
同意楼上的看法。

出0入0汤圆

发表于 2012-12-8 10:50:05 | 显示全部楼层
5楼方法正确,可以判断软硬件故障

出0入0汤圆

 楼主| 发表于 2012-12-8 10:50:59 | 显示全部楼层

先谢谢几位.

我会按照STM32_Study 的办法下周一测试下.(今天不上班)

我说下我的疑点:
在仿真器上初次上电也是不显示,程序运行后等段时间才显示,然后程序复位不断电再运行,正常显示,

不显示时,有时候用手摸摸接线又显示了.但前提是要程序运行后等一会才可以,不是程序一运行马上有手去摸它
要是不动它就要等上1分钟左右.
大家帮忙看下程序初始化有没有问题下.先排除软件问题.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 15:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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