切换到宽版
  • 5017阅读
  • 42回复

[C51]求助工程师无法搞定 1602液晶按照教程例程都不能正常显示 修改无果 [复制链接]

上一主题 下一主题
离线cqqwing
 

发帖
1512
M币
2667
专家
5
粉丝
44
先把教程例程里的程序贴上来 。 这个例程直接照着写,因为单片机端口设置的不一样,所以只改了端口 P3^5 P3^6 P3^7,

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
uint i,j;
sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^7;      //使能端
uchar code table1[]="0123456789";
uchar code table2[]="ABCDEFG,FGHIJK";

void delay(uint x)       // 延时函数
{    for(i=x;i>0;i--)
    {
    for(j=120;j>0;j--);
    }
}
void write_com(uchar com)    //指令
{
    rs=0;
    wr=0;
    lcden=0;
    P0=com;
    lcden=1;
    delay(5);
    lcden=0;
}
void write_data(uchar dat)     //数据
{
    rs=1;
    wr=0;
    lcden=0;
    P0=dat;
    lcden=1;
    delay(5);
    lcden=0;
}
void init()                // 初始化函数
{
    write_com(0x38);
    write_com(0x08);
    write_com(0x01);
    write_com(0x06);
    write_com(0x0f);
}
void main()
{    P0=0;
    init();         // 初始化
    for(num=0;num<9 ;num++)      //第一行取9个数显示
    {    write_data(table1[num]);
        delay(300);        
    }
    write_com(0x80+0x40);      //第二行显示地址
  
    for(num=0;num<16 ;num++)    
    {
        write_data(table2[num]);
        write_com(0x18);  //左移
        delay(500);        
    }
    while(1);
}


现象是这样的,
第一次 程序中地址是标准的0x80+0x40, 结果 第一行显示完了之后,第二行就只有个光标闪动着往右边移动,一直移出屏幕就没动静了。如下两图。


















第二次,我修改为0x80+0x50,加上左移命令write_com(0x18), 然后现象是这样的,第一行显示完了之后,上下两行同时往左移, 中间相隔8个字符的距离后,第二行出现了,但是没有显示出A, 而且就这样一直往左移,显示完了之后,第二行尾巴上就剩下个乱码+箭头。










(这个液晶是在某宝买的,深圳山寨小厂,3.5一片屏幕,后来直接叫卖家的工程师给指导, 结果他都没搞定,说我硬件有问题, 然后这两天我不服气, 换单片机,89C52, 89C58,开发板也不要了,直接换面包板,搞了两天,交替替换着下载程序,结果问题依旧)


无论怎么调,就是不正常显示,那么多单片机的教程里的例程都一样的,可以用0x80+0x40 直接显示两行,为什么我这个第二行就是不能正常显示,  请问各位, 就在这个这个程序上应该怎么改才行?


本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线66ok66

发帖
1306
M币
1054
专家
8
粉丝
21
只看该作者 1楼 发表于: 06-14
能显示就是地址不对而已, 显示乱码通常是发送数据过快造成的~
离线青色风机

发帖
18923
M币
2419
专家
24
粉丝
1560
只看该作者 2楼 发表于: 06-14
我也曾经研究过片儿片儿机
离线bigbell

发帖
1034
M币
1833
专家
1
粉丝
20
只看该作者 3楼 发表于: 06-14
按1楼经验处理,钦此

内容来自Android手机客户端

<a href="http://tvt.so/pz" title="">http://tvt.so/pz</a>
离线cqqwing

发帖
1512
M币
2667
专家
5
粉丝
44
只看该作者 4楼 发表于: 06-14
回 66ok66 的帖子
66ok66:能显示就是地址不对而已, 显示乱码通常是发送数据过快造成的~  (2018-06-14 22:15) 回 66ok66 的帖子

标准的1602都是 0x80+0x40 ,结果它这个无论怎么改都不对,这该如何找出正确的地址啊? 而且给我的感觉是这个屏,不能指定位置显示,只能是依次填满字符格数才行,我才学液晶屏不久, 对于这个始终还想不到熟练的程度,请指导下
离线89609x

发帖
14
M币
1394
专家
0
粉丝
4
只看该作者 5楼 发表于: 06-15
步子大了扯着蛋了。先让他显示固定的字符,不要左移之类的动态,16X2写满,如果可以就能判断程序没大问题,液晶也正常。剩下的就是一步步修改你的动态程序了。好像你的显示延时少,没看清就刷新了。
离线cqqwing

发帖
1512
M币
2667
专家
5
粉丝
44
只看该作者 6楼 发表于: 06-15
回 89609x 的帖子
89609x:步子大了扯着蛋了。先让他显示固定的字符,不要左移之类的动态,16X2写满,如果可以就能判断程序没大问题,液晶也正常。剩下的就是一步步修改你的动态程序了。好像你的显示延时少,没看清就刷新了。 (2018-06-15 06:34) 回 89609x 的帖子

在第一行固定显示字符没问题, 问题就出在第二行,想要在第二行显示的时候,就只有光标闪动,没有字符出来,所以才用移位命令,看这一行是否有字符,一直都觉得是地址不对,但更改,调整了很久都没有成功
离线zhuls

发帖
1493
M币
3610
专家
3
粉丝
27
只看该作者 7楼 发表于: 06-15
1602的手册认真看看,会有收获的
离线aygxycs

发帖
105
M币
239
专家
0
粉丝
11
只看该作者 8楼 发表于: 06-15
觉得读写部分函数延时太短。
离线cqqwing

发帖
1512
M币
2667
专家
5
粉丝
44
只看该作者 9楼 发表于: 06-15
回 zhuls 的帖子
zhuls:1602的手册认真看看,会有收获的[表情]  (2018-06-15 07:39) 回 zhuls 的帖子

看了两遍了,没啥收获,刚才我把第二行的显示延时加长到300,第二行的内容就是光标位置会显示一整个字符的白色的方块, 然后光标继续往右跳着移动,没有显示出内容,