搜索
bottom↓
回复: 14

求解:1602液晶显示一半正确,后一半是一堆乱码???

[复制链接]

出0入0汤圆

发表于 2012-4-13 23:43:46 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<intrins.h>//包含_nop_()函数定义的头文件
sbit RS=P2^0; //寄存器选择位
sbit RW=P2^1;  //读写选择位
sbit E=P2^2;   //使能信号位
sbit BF=P0^7;  //忙碌标志位
unsigned char code string[]={"I    CARE    YOU"};
unsigned char code string1[]={"YOU    LOVE   ME"};
/**************************************************
      函数功能:延时1ms
*************************************************/
void delay1ms()
{
        unsigned char i,j;
        for(i=0;i<10;i++)
        for(j=0;j<33;j++)
           ;
}
/*****************************************
     函数功能:延时若干毫秒
      入口参数:n
****************************************/
void delay(unsigned char n)
{
        unsigned char i;
        for(i=0;i<n;i++)
        delay1ms();
}
/********************************************
      函数功能:判断液晶模块的忙碌状态
      返回值:result;result=1,忙碌;result=0,不忙
*******************************************/
unsigned char BusyTest(void)
{
        bit result;
        RS=0;
        RW=1;
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        result=BF;
        E=0;
        return result;
}
/***************************************************************
      函数功能:将模式设置指令或显示地址写入液晶模块
              入口参数:dictate
**************************************************************/
void WriteInstruction(unsigned char dictate)
{
        while(BusyTest()==1);
        RS=0;
        RW=0;
        E=0;
        _nop_();
        _nop_();
        P0=dictate;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=0;
}
/******************************************************************
       函数功能:指定字符显示的实际地址
            入口参数: x
******************************************************************/
void WriteAddress(unsigned char x)
{
        WriteInstruction(x|0x80);
}
/**************************************************************************
          函数功能:将数据(字符标准ASCII码)写入液晶模块;
             入口参数:y(为字符常量)
*************************************************************************/
void WriteData(unsigned char y)
{
        while(BusyTest()==1);
        RS=1;
        RW=0;
        E=0;
        P0=y;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        E=0;
}
/***************************************************
    函数功能:对LCD的显示模式进行初始化设置
**************************************************/
void LcdInitiate(void)
{
        delay(15);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x38);
        delay(5);
        WriteInstruction(0x0F);
        delay(5);
        WriteInstruction(0x06);
        delay(5);
        WriteInstruction(0x01);
        delay(5);
}
void main(void)
{
        unsigned char i;
        LcdInitiate();
        delay(10);
        while(1)
        {
                WriteInstruction(0x01);
                WriteAddress(0x00);
                i=0;
                while(string[1]!='\0')
                {
                        WriteData(string[i]);
                        i++;
                        delay(400);
                }       
                WriteAddress(0x40);
                i=0;
                while(string[i]!='\0')
                {
                        WriteData(string1[i]);
                        i++;
                        delay(400);
                }
                for(i=0;i<10;i++)
                delay(250);
        }
}
以上就是程序,为什么是只有前一半正确呢,后一半是一堆乱码呢??????

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入55汤圆

发表于 2012-4-13 23:48:06 | 显示全部楼层
应该拍个照片比较直观

出0入0汤圆

发表于 2012-4-14 09:06:06 来自手机 | 显示全部楼层
上效果图,根据图来说明问题。

出50入4汤圆

发表于 2012-4-14 09:17:23 | 显示全部楼层
坏了,我有块屏也这样,换个屏就没事

出0入0汤圆

发表于 2012-4-14 09:42:28 | 显示全部楼层
如果显示缺的话,有可能LCM里面的导电胶没接触好。拆开装过一下。

出0入0汤圆

 楼主| 发表于 2012-4-14 09:49:29 | 显示全部楼层
无级电工 发表于 2012-4-14 09:42
如果显示缺的话,有可能LCM里面的导电胶没接触好。拆开装过一下。

并非显示缺,而是第一行正确,第二行就是一堆乱码。请问,会是什么情况呢?

出0入0汤圆

发表于 2012-4-14 10:02:42 | 显示全部楼层
问题在这里吧:  

while(string[1]!='\0')

你这个循环刹不住车了。呵呵。

出0入0汤圆

发表于 2012-4-14 10:35:26 | 显示全部楼层
无级电工 发表于 2012-4-14 10:02
问题在这里吧:  

while(string[1]!='\0')

楼上的眼睛真好!呵呵

出0入0汤圆

发表于 2012-4-14 13:05:07 | 显示全部楼层
无级电工 发表于 2012-4-14 10:02
问题在这里吧:  

while(string[1]!='\0')

求刹不住车啥意思。

出0入0汤圆

发表于 2012-4-14 14:06:43 | 显示全部楼层
gracialee 发表于 2012-4-14 13:05
求刹不住车啥意思。

一直为真,一直在跑啊

出0入0汤圆

发表于 2012-4-14 14:18:18 | 显示全部楼层
字符串最后一位不是0了就不跑了么。

出0入0汤圆

发表于 2012-4-14 14:21:29 | 显示全部楼层
gracialee 发表于 2012-4-14 14:18
字符串最后一位不是0了就不跑了么。

关键是楼主笔下误了
“string[1]!=”

出0入0汤圆

 楼主| 发表于 2012-4-14 16:28:02 | 显示全部楼层
jiespring 发表于 2012-4-14 14:21
关键是楼主笔下误了
“string[1]!=”

谢谢你,的确是那样。

出0入0汤圆

发表于 2012-4-15 10:42:50 | 显示全部楼层
就按照这个错误的程序来说,第一句输出的是啥内容啊?i care u?

出0入0汤圆

发表于 2012-4-15 22:46:47 | 显示全部楼层
会不会是因为没有清屏~~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 02:31

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

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