打印

液晶显示遇到一个困难。乱码不知是怎么来的。

[复制链接]
4320|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhouwupingboy|  楼主 | 2010-12-29 23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhouwupingboy|  楼主 | 2010-12-29 23:21 | 只看该作者
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint num,num1;
uchar table[]="I LIKE MCU!";
uchar table1[]="WWW:ZWP520.COM";
sbit lcdrs=P3^5;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;

void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void write_com(uchar com)
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;       
}

void write_data(uchar date)
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;               
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
void init()
{
        dula=0;
        wela=0;
        lcden=0;
        write_com(0x38);
        write_com(0x0e);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
               
}
void main()
{
        init();
        for(num=0;num<11; num++)
                {
                        write_data(table[num]);
                        delay(20);
                }
        //        write_com(1);
                write_com(0x80+0x53);
        for(num=0;num<14; num++)
                {
                        write_data(table1[num]);
                        delay(20);
                }
        for(num=0;num<16;num++)
                {
                         write_com(0x18);
                         delay(200);
                }               
                  
        while(1);               
}

使用特权

评论回复
板凳
zhouwupingboy|  楼主 | 2010-12-29 23:21 | 只看该作者
只有520才显示,其它的都是乱码。昨天正常。今天就出现了这个问题

使用特权

评论回复
地板
zhouwupingboy|  楼主 | 2010-12-29 23:25 | 只看该作者
为了方便大家看,这个注释了下。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint num,num1;
uchar table[]="I LIKE MCU!";
uchar table1[]="WWW:ZWP520.COM";
sbit lcdrs=P3^5;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;

void delay(uint z)                   //延时函数
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}

void write_com(uchar com)                //写命令
{
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;       
}

void write_data(uchar date)                         //写数据
{
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;               
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
void init()                                         //函数初始化
{
        dula=0;
        wela=0;
        lcden=0;
        write_com(0x38);
        write_com(0x0e);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
               
}
void main()
{
        init();
        for(num=0;num<11; num++)                //写第一行
                {
                        write_data(table[num]);
                        delay(20);
                }
        //        write_com(1);
                write_com(0x80+0x53);
        for(num=0;num<14; num++)                        //写第二行
                {
                        write_data(table1[num]);
                        delay(20);
                }
        for(num=0;num<16;num++)                  //全屏移动
                {
                         write_com(0x18);
                         delay(200);
                }               
                  
        while(1);               
}

使用特权

评论回复
5
zhouwupingboy|  楼主 | 2010-12-29 23:34 | 只看该作者
我用的是1602液晶显示器

使用特权

评论回复
6
原野之狼| | 2010-12-30 00:02 | 只看该作者
1、检查一下线有没有松动
2、检查时序相关参数是否位于边界点而不是在典型点

使用特权

评论回复
7
zhouwupingboy|  楼主 | 2010-12-30 09:17 | 只看该作者
我用的是跳线。看了一下,电路也很简单。

使用特权

评论回复
8
zhouwupingboy|  楼主 | 2010-12-30 09:40 | 只看该作者
前天1602液晶显示可以,昨天数字能显示,字母不能显示,晚上睡时还不可以,今天早上一开机就发现可以了。这是为什么呢。

使用特权

评论回复
9
zhouwupingboy|  楼主 | 2010-12-30 09:41 | 只看该作者
是不是与电压有关系。它发生在两个早上,昨晚试到十二点都没出来。今早就好了。

使用特权

评论回复
10
bogekanpu| | 2010-12-30 10:25 | 只看该作者
直接输出字母的asc2十六进制代码试试,例如X输出58,看看能不能显示先,我以前也有碰到过这类似情况

使用特权

评论回复
11
yuyi21ic| | 2010-12-30 12:52 | 只看该作者
write_com(0x80+0x53);   ////////// 第二行好像是从0x40开始的吧,你写的起始位置是0x53,0x53-0x40=0x13 > 16,你可以先把0x53改成0x40,去掉全屏移动试试!

使用特权

评论回复
12
mmax| | 2010-12-30 13:19 | 只看该作者
看看是不是数据线的第6位接触不好。
只显示数字0x30~0x39,只显示字母0x40,第6位不同。
可以查ascii表,看你显示的是不是少了0x40的数值?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

160

帖子

0

粉丝