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

[复制链接]
5328|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);               
}
 楼主| zhouwupingboy 发表于 2010-12-29 23:34 | 显示全部楼层
我用的是1602液晶显示器
原野之狼 发表于 2010-12-30 00:02 | 显示全部楼层
1、检查一下线有没有松动
2、检查时序相关参数是否位于边界点而不是在典型点
 楼主| zhouwupingboy 发表于 2010-12-30 09:17 | 显示全部楼层
我用的是跳线。看了一下,电路也很简单。
 楼主| zhouwupingboy 发表于 2010-12-30 09:40 | 显示全部楼层
前天1602液晶显示可以,昨天数字能显示,字母不能显示,晚上睡时还不可以,今天早上一开机就发现可以了。这是为什么呢。
 楼主| zhouwupingboy 发表于 2010-12-30 09:41 | 显示全部楼层
是不是与电压有关系。它发生在两个早上,昨晚试到十二点都没出来。今早就好了。
bogekanpu 发表于 2010-12-30 10:25 | 显示全部楼层
直接输出字母的asc2十六进制代码试试,例如X输出58,看看能不能显示先,我以前也有碰到过这类似情况
yuyi21ic 发表于 2010-12-30 12:52 | 显示全部楼层
write_com(0x80+0x53);   ////////// 第二行好像是从0x40开始的吧,你写的起始位置是0x53,0x53-0x40=0x13 > 16,你可以先把0x53改成0x40,去掉全屏移动试试!
mmax 发表于 2010-12-30 13:19 | 显示全部楼层
看看是不是数据线的第6位接触不好。
只显示数字0x30~0x39,只显示字母0x40,第6位不同。
可以查ascii表,看你显示的是不是少了0x40的数值?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

160

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部