发 帖  
[问答]

LCD14432液晶屏用arduino驱动显示汉字乱码

5841 液晶屏 Arduino
已退回5积分
2018-11-14 17:53:41   评论 分享淘帖 邀请回答
7个回答
2018-11-14 18:21:35 1 评论

举报

1 条评论
  • 2018-11-15 14:19

    void displayLiquidCrystal_I2C(uint8_t pinscl, uint8_t pinsda, char* value, uint8_t new_val){                        //小黑马调用,显示字符        
            LiquidCrystal_I2C display(0x27,16,2,pinscl, pinsda);
            display.init();
            //delay(100);
            display.setCursor(0x83, 0);
            display.printstr("xhmBlock");
            display.setCursor(0x93, 0);
            // char utech[] = {value[] + 32};
             char utech[] = {0xBA,0xC3,0xB1,0xA0,0xC1,0XFA,0XBA,0XA3};
            uint8_t i=0;
            if((strlen(value)>18))
            {
                    display.setCursor(0x92, 1);
                    display.printstr("ERROR ABC!");                //如果输入值大于999999显示错误提示:ERROR ABC !
            }
            else
            {
                    //display.setCursor(0x90+(18-strlen(value))/4, 1);
                    for(;i<sizeof(utech);i++)
           // display.print(value);
                    //for(;i<18;i++)
                    {
                            //display.write(utech);
                            //display.print(value[i*2+1]);
                            display.write(value);
                            //display.write(value[i*2+1]);
                    }
        }
            delay(800);
            display.clear();
    }
    我这里用write输出到LCD,就是如果write的参数直接输出 utech这个数组就会正常显示汉字,utech里面存的是汉字的内码,但是如果直接将参数赋值为汉字,显示就是乱码。

2018-11-14 20:34:32 1 评论

举报

1 条评论
  • 2018-11-15 14:19

    void displayLiquidCrystal_I2C(uint8_t pinscl, uint8_t pinsda, char* value, uint8_t new_val){                        //小黑马调用,显示字符        
            LiquidCrystal_I2C display(0x27,16,2,pinscl, pinsda);
            display.init();
            //delay(100);
            display.setCursor(0x83, 0);
            display.printstr("xhmBlock");
            display.setCursor(0x93, 0);
            // char utech[] = {value[] + 32};
             char utech[] = {0xBA,0xC3,0xB1,0xA0,0xC1,0XFA,0XBA,0XA3};
            uint8_t i=0;
            if((strlen(value)>18))
            {
                    display.setCursor(0x92, 1);
                    display.printstr("ERROR ABC!");                //如果输入值大于999999显示错误提示:ERROR ABC !
            }
            else
            {
                    //display.setCursor(0x90+(18-strlen(value))/4, 1);
                    for(;i<sizeof(utech);i++)
           // display.print(value);
                    //for(;i<18;i++)
                    {
                            //display.write(utech);
                            //display.print(value[i*2+1]);
                            display.write(value);
                            //display.write(value[i*2+1]);
                    }
        }
            delay(800);
            display.clear();
    }
    我这里用write输出到LCD,就是如果write的参数直接输出 utech这个数组就会正常显示汉字,utech里面存的是汉字的内码,但是如果直接将参数赋值为汉字,显示就是乱码。

2018-11-15 08:15:56 1 评论

举报

1 条评论
  • 2018-11-15 14:18

    void displayLiquidCrystal_I2C(uint8_t pinscl, uint8_t pinsda, char* value, uint8_t new_val){                        //小黑马调用,显示字符       
            LiquidCrystal_I2C display(0x27,16,2,pinscl, pinsda);
            display.init();
            //delay(100);
            display.setCursor(0x83, 0);
            display.printstr("xhmBlock");
            display.setCursor(0x93, 0);
            // char utech[] = {value[] + 32};
             char utech[] = {0xBA,0xC3,0xB1,0xA0,0xC1,0XFA,0XBA,0XA3};
            uint8_t i=0;
            if((strlen(value)>18))
            {
                    display.setCursor(0x92, 1);
                    display.printstr("ERROR ABC!");                //如果输入值大于999999显示错误提示:ERROR ABC !
            }
            else
            {
                    //display.setCursor(0x90+(18-strlen(value))/4, 1);
                    for(;i<sizeof(utech);i++)
           // display.print(value);
                    //for(;i<18;i++)
                    {
                            //display.write(utech);
                            //display.print(value[i*2+1]);
                            display.write(value);
                            //display.write(value[i*2+1]);
                    }
        }
            delay(800);
            display.clear();
    }
    我这里用write输出到LCD,就是如果write的参数直接输出 utech这个数组就会正常显示汉字,utech里面存的是汉字的内码,但是如果直接将参数赋值为汉字,显示就是乱码。

2018-11-15 14:45:43 1 评论

举报

1 条评论
  • 2018-11-15 14:56

    size_t LiquidCrystal_I2C::write(uint8_t value) {
            send(value, Rs);
            return 0;
    }
    void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) {
            uint8_t highnib=value&0xf0;
            uint8_t lownib=(value<<4)&0xf0;
           write4bits((highnib)|mode);
            write4bits((lownib)|mode);
    }
    void LiquidCrystal_I2C::write4bits(uint8_t value) {
            expanderWrite(value);
            pulseEnable(value);
    }

    void LiquidCrystal_I2C::expanderWrite(uint8_t _data){     
            //Wire.beginTransmission(_Addr);
            //printIIC((int)(_data) | _backlightval);
            //Wire.endTransmission();
            //SoftI2CMaster i2c = SoftI2CMaster(sclPin, sdaPin, 0, bitdelay);       

            i2c.beginTransmission(_Addr);
            //printIIC((int)(_data) | _backlightval);
            i2c.write((int)(_data) | _backlightval);
            i2c.endTransmission();   
    }

2018-11-15 15:55:49 3 评论

举报

3 条评论
  • 2018-11-22 10:00

    就是当我直接把发送的数组的值换成汉字也是一样的,我说的乱码其实就是字是错的,不是乱七八糟的那种。假设我现在想显示“你”,然而显示的是“浣”;想显示“好”,然而显示的是“濂”。好像就是编码错位了。

    人中狼 回复 997925763: 2018-11-22 10:39

    那就是要看你的字库如何排列了,如果是标准字库,就要看你带入的地址对不对了,既然能正确显示出汉字,那么显示汉字不对就是计算地址的问题了,查相关的代码吧

    997925763 回复 人中狼: 2018-11-22 17:18

    谢谢,我自己解决了,原来是编辑器的编码模式选错了,应该选的是ANSI编码。

2018-11-17 15:27:40 评论

举报

2023-1-9 09:56:29 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友论坛

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@hauqiu.com
关闭

站长推荐 上一条 /6 下一条

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