我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 3779|回复: 18

[求助] LCD1602显示乱码怎么处理

[复制链接]

该用户从未签到

26

主题

100

回帖

133

积分

二级逆天

积分
133

终身成就奖特殊贡献奖

QQ
发表于 2018-1-6 16:27:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
IMG_20180106_162150.jpg #ifndef _LCD_H_
#define _LCD_H_

#ifndef uchar
#define uchar unsigned  char
#endif

#ifndef uint
#define uint unsigned int
#endif

#include<reg51.h>
#define LCD_Datapin P0

sbit LCD_RS = P2^6;
sbit LCD_RW = P2^5;
sbit LCD_EN = P2^7;
void DelayMs(uint x);
uchar LCD_Busy();
void LCD_Write(uchar date,bit j);
void LCDInit();
void LCD_Display_byte(uchar x,uchar y,uchar date );
void LCD_Display_String(uchar x,uchar y,uchar table[]);





#include<LCD.h>
#include<intrins.h>
#include<string.h>

void DelayMs(uint x) //毫秒的延时函数
{
    uint t;
    while(x--)
    {
        for(t=0;t<120;t++);
        
    }
}
/*******

判断LCD是否忙碌状态要求
1.使用读时序
2.读出D7的状态是0还是1,0表示不忙 ,1表示忙碌中
********/
uchar LCD_Busy()    //判断LCD是否忙碌状态  
{
      uchar LCD_Status;
      LCD_RS = 0;
      LCD_RW = 1;
      LCD_EN = 1;
      DelayMs(1);
      LCD_Status = (P0&0x80);       //
      LCD_EN = 0 ;
      return LCD_Status;

}

//写指令数据程序   j为0时写命令 j为1写数据
void LCD_Write(uchar date,bit j)
{
    while(LCD_Busy());
    LCD_RW = 0;
    LCD_RS = j;
    LCD_Datapin = date;
    LCD_EN = 1;
    LCD_EN = 0;
        
}

//LCD初始化
void LCDInit()
{
    DelayMs(5);
    LCD_Write(0x38,0);
    DelayMs(5);
    LCD_Write(0x38,0);
    LCD_Write(0x08,0);
    LCD_Write(0x01,0);
    LCD_Write(0x06,0);
    LCD_Write(0x0c,0);
}

// 显示单个字符    x为0写在第一行 x为1写在第二行    y数据显示的地址 Z写入的数据
void LCD_Display_byte(uchar x,uchar y,uchar date )
{
    if(x==0)
    {
        LCD_Write(0x80+y,0);//写显示地址
    }
    else
    {
        LCD_Write(0xc0+y,0); //写显示地址
    }

    LCD_Write(date,1);//写数据
}

//写字符串
void LCD_Display_String(uchar x,uchar y,uchar table[])
{
    uchar t;//记录table字符串的长度
    if(x==0)
    {
        LCD_Write(0x80+y,0);//写显示地址
    }
    else
    {
        LCD_Write(0xc0+y,0); //写显示地址
    }
   
    t= strlen(table);
    if(t<=16)
    {
        for(t=0;t<17;t++)
        {
            LCD_Write(table[t],1);
        }
    }   
}





#include<reg51.h>
#include<LCD.h>
uchar table[]={"qq:1111111111"};
void main()
{

    LCDInit();
    LCD_Display_byte(0,1,'B');
    LCD_Display_String(1,2,table);

     while(1);
}

#endif请大佬们帮我看看代码需要怎么修改

LCD (2).txt

2 KB, 下载次数: 0, 下载积分: 金币 -1 枚

LCD.txt

1 KB, 下载次数: 0, 下载积分: 金币 -1 枚

mian.txt

1 KB, 下载次数: 0, 下载积分: 金币 -1 枚

回复

使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 120 天

    [LV.7]常住居民III

    73

    主题

    1万

    回帖

    2万

    积分

    三级逆天

    你必须非常努力才能显

    积分
    22238

    终身成就奖社区居民忠实会员社区劳模最爱沙发原创达人特殊贡献奖原创先锋奖优秀斑竹奖宣传大使奖

    QQ
    发表于 2018-1-6 16:40:05 | 显示全部楼层
    帮你看代码还要花费乐币,看看时序对不对,其次是指令有没有正常执行
    回复

    使用道具 举报

    该用户从未签到

    26

    主题

    100

    回帖

    133

    积分

    二级逆天

    积分
    133

    终身成就奖特殊贡献奖

    QQ
     楼主| 发表于 2018-1-6 16:46:27 | 显示全部楼层
    额 不好意思 ,我截图上传吧  ,显示单个字符没有问题,但是显示字符串的时候就出了乱码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-10-1 09:50
  • 签到天数: 1 天

    [LV.1]初来乍到

    66

    主题

    1213

    回帖

    2085

    积分

    PADS-180305高级班

    积分
    2085

    终身成就奖优秀斑竹奖

    QQ
    发表于 2018-1-6 17:25:20 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    5

    主题

    4617

    回帖

    5

    积分

    二级逆天

    积分
    5

    社区居民终身成就奖优秀斑竹奖

    QQ
    发表于 2018-1-6 17:29:31 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    8

    主题

    185

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    QQ
    发表于 2018-1-6 21:45:24 | 显示全部楼层
    t= strlen(table);
        if(t<=16)
        {
            for(t=0;t<17;t++)
            {
                LCD_Write(table[t],1);
            }
        }   
    你这循环次数是固定的啊,不能根据数组大小进行输出显示。所以本来你的数组只有13位内容,你的程序却硬要输出17次数据,多出来的数据当然是随机的东西啦,肯定出乱码啊。
    回复

    使用道具 举报

    该用户从未签到

    8

    主题

    185

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    QQ
    发表于 2018-1-6 21:48:19 | 显示全部楼层
    这些东西太基础了,驱动肯定没问题,既然已经可以显示单个字符了。自己静下心来一步一步判断,又没几行代码。
    回复

    使用道具 举报

    该用户从未签到

    8

    主题

    185

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    QQ
    发表于 2018-1-6 21:51:23 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:07
  • 签到天数: 120 天

    [LV.7]常住居民III

    73

    主题

    1万

    回帖

    2万

    积分

    三级逆天

    你必须非常努力才能显

    积分
    22238

    终身成就奖社区居民忠实会员社区劳模最爱沙发原创达人特殊贡献奖原创先锋奖优秀斑竹奖宣传大使奖

    QQ
    发表于 2018-1-7 08:36:00 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    20

    主题

    2215

    回帖

    2941

    积分

    二级逆天

    积分
    2941

    终身成就奖原创先锋奖

    QQ
    发表于 2018-1-7 17:30:08 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表