发 帖  
[问答]

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

6072 液晶屏 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@huaqiu.com
关闭

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

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

威廉希尔官方网站 社区

HarmonyOS威廉希尔官方网站 社区

RISC-V MCU威廉希尔官方网站 社区

FPGA开发者威廉希尔官方网站 社区

-

OpenHarmony开源社区

OpenHarmony开源社区

-

嵌入式论坛

ARM威廉希尔官方网站 论坛

STM32/STM8威廉希尔官方网站 论坛

嵌入式威廉希尔官方网站 论坛

单片机/MCU论坛

RISC-V威廉希尔官方网站 论坛

瑞芯微Rockchip开发者社区

FPGA|CPLD|ASIC论坛

DSP论坛

-

电路图及DIY

电路设计论坛

DIY及创意

电子元器件论坛

专家问答

-

电源威廉希尔官方网站 论坛

电源威廉希尔官方网站 论坛

无线充电威廉希尔官方网站

-

综合威廉希尔官方网站 与应用

机器人论坛

USB论坛

电机控制

模拟威廉希尔官方网站

音视频威廉希尔官方网站

综合威廉希尔官方网站 交流

上位机软件(C/Python/Java等)

-

无线通信论坛

WIFI威廉希尔官方网站

蓝牙威廉希尔官方网站

天线|RF射频|微波|雷达威廉希尔官方网站

-

EDA设计论坛

PCB设计论坛

DigiPCBA论坛

Protel|AD|DXP论坛

PADS威廉希尔官方网站 论坛

Allegro论坛

multisim论坛

proteus论坛|仿真论坛

KiCad EDA 中文论坛

DFM|可制造性设计论坛

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量威廉希尔官方网站

传感威廉希尔官方网站

-

招聘/交友/外包/交易/杂谈

项目外包

供需及二手交易

工程师杂谈|交友

招聘|求职|工程师职场

-

官方社区

发烧友官方/活动

华秋商城

华秋电路