偶比豆 2024-06-24 19:28 采纳率: 60%
浏览 280

LCD1602显示乱码

在做C8051F360信号发生器,用学校的电路板的时候,LCD1602显示的中文变成了乱码

看debugger里的汇编文件,汇编中的中文也变成了乱码,Keil的格式是UTF-8,各种格式都试过了,还是这个问题,该怎么解决?

然后像上机调试的时候,把LCD_HZ(uchar x,uchar temp[])放在while(1)里面,也显示不出来,

这个是我LCD1602的初始化函数,很困惑

/**********************************/
void LCD_REST(void)
{
    int i;
    LCD_RST=0;
    for(i=0;i<255;i++);
    LCD_RST=1;
}
/**********************************/
void LCD_WC(uchar command)    //LCD写命令
{
    uchar a;
    while(a=RCOMADDR&0X80);
    WCOMADDR=command;
}
/**********************************/
void LCD_INIT(void)        //LCD初始化
{
    LCD_WC(0X30);
    LCD_WC(0X01);
    LCD_WC(0X02);
    LCD_WC(0X0C);
}
/**********************************/
void LCD_WD(uchar d)
{
    while(RCOMADDR&0X80);
    WDATADDR=d;
}
/**********************************/
void LCD_HZ(uchar x,uchar temp[])    //显示一个字符
{
    int i=0;
    LCD_WC(x);        //x为位置
    while(temp[i]!=0)
    {
        LCD_WD(temp[i]);
        i++;
    }
}
/**********************************/
void LCD_BYTE(uchar x,uchar temp)
{
    LCD_WD(x);
    LCD_WD(temp);
}
/**********************************/
void LCD_CLR(void)
{
    LCD_WC(0X01);
}


  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-24 19:29
    关注

    引自免费微信小程序:皆我百晓生

    要解决LCD1602显示乱码的问题,你需要先确保你的C8051F360设备已经正确连接到LCD1602模块,并且LCD1602的波特率设置正确。此外,你也应该确认编码方式是否与你的设备兼容。

    首先,检查并调整LCD1602的波特率:

    #include <avr/io.h>
    #include <util/delay.h>
    
    #define RS_PIN 4
    #define ECK_PIN 7
    #define DCK_PIN 5
    #define RST_PIN 2
    
    int main() {
        DDRD = 0b00000000;
        PORTD = 0b00000000;
    
        // 设置LCD1602波特率
        PORTD |= (1 << ECK_PIN);
    
        // 初始化LCD1602
        LCD_RST = 0;
        for(int i = 0; i < 255; i++) {
            LCD_WC(0X30);
            LCD_WC(0X01);
            LCD_WC(0X02);
            LCD_WC(0X0C);
        }
    
        return 0;
    }
    

    然后,尝试将LCD1602设置为字符模式(即ASCII编码)。这可以通过修改LCD_WD()函数来实现:

    void LCD_WD(uchar d) {
        while(RCOMADDR&0X80);
        WDATADDR=d;
        if(d > 0x7f) {
            WCOMADDR = 0X7E;
        } else {
            WCOMADDR = 0X07;
        }
    }
    

    注意:这里我们设置了两个不同的地址映射值,一个是当数字超过79时,另一个是小于等于79时。这取决于你想要如何处理大写字母、小写字母和其他特殊字符。

    接下来,你应该检查WCOMADDR寄存器的值。如果你在字符模式下运行,WCOMADDR应该是0x07。如果不是这样,那么你需要调整你的代码使其适应字符模式。

    如果你仍然遇到问题,可能是因为你的LCD1602没有正确连接到设备或者有其他硬件冲突导致的。在这种情况下,建议重新配置你的系统或者联系供应商获取技术支持。

    希望这些信息能帮到你!如果你还有任何疑问,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月24日