关于使用LCD屏 JLX12864G-086-PC(带字库)显示汉字问题

开发平台:STM32CubeIDE
MCU:STM32L051C8T6
屏幕:JLX12864G-086-PC(带字库) (驱动IC:UC1701X ,字库IC:GT20L16S1Y)
链接:JLX12864G-086-PC封装
LCD引脚功能说明

引脚分配:字库IC采用硬件SPI1 其他引脚任意分配。
在这里插入图片描述

主要问题:使用字库显示汉字,出现的是乱码,其他字符显示没出问题。如下图所示,拼音后都跟了相应的汉字,g_Hz16是文字取模软件弄的一个字库。
在这里插入图片描述
显示结果:
在这里插入图片描述
问题分析:由于通过字库显示字符(除汉字外)均能显示,说明字库芯片正常工作。猜测是编码格式导致。

解决办法:点击ALT+ENTER->C/C++ Build ->Settings->MCU GCC Complier->Miscellaneous
在Other flags中添加以下指令。编译->烧录 显示正常。

-fexec-charset=GBK
-finput-charset=UTF-8

在这里插入图片描述

参考:
Windows下GCC编译环境中文乱码解决方案
关于UTF-8、GBK编码以及编译时charset的指定的一些总结

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用c51单片机和温度传感器dht11以及JLX12864G-086显示器来显示温度值,可以按照以下步骤进行操作: 1. 连接硬件:将dht11传感器的VCC引脚连接到单片机的5V电源,GND引脚连接到单片机的GND,DATA引脚连接到单片机的P1.0口;将JLX12864G-086显示器的VCC引脚连接到单片机的5V电源,GND引脚连接到单片机的GND,CS引脚连接到单片机的P2.7口,SID引脚连接到单片机的P2.5口,SCLK引脚连接到单片机的P2.6口,RST引脚连接到单片机的P2.4口。 2. 编写程序:使用c语言编写程序,包括初始化dht11传感器和JLX12864G-086显示器,读取dht11传感器的温度值并将其转换为字符串格式,然后在JLX12864G-086显示器上显示该温度值。 3. 调试程序:将程序下载到单片机上,并连接电源,观察JLX12864G-086显示器是否能够正常显示温度值。如果出现问题,可以通过调试程序来解决。 下面是一个简单的示例程序,可以帮助你开始编写你自己的程序: ```c #include <reg52.h> #include <stdio.h> sbit DHT11_DATA=P1^0; sbit LCD_CS=P2^7; sbit LCD_SID=P2^5; sbit LCD_SCLK=P2^6; sbit LCD_RST=P2^4; void Delay10us() { int i=2; while(i--); } void DelayMs(unsigned int ms) { while(ms--) { Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); Delay10us(); } } void LCD_WR_CMD(unsigned char cmd) { unsigned char i; LCD_CS=0; LCD_SID=0; Delay10us(); LCD_SCLK=0; Delay10us(); for(i=0;i<8;i++) { if(cmd&0x80) { LCD_SID=1; } else { LCD_SID=0; } Delay10us(); LCD_SCLK=1; Delay10us(); LCD_SCLK=0; Delay10us(); cmd<<=1; } LCD_CS=1; } void LCD_WR_DAT(unsigned char dat) { unsigned char i; LCD_CS=0; LCD_SID=1; Delay10us(); LCD_SCLK=0; Delay10us(); for(i=0;i<8;i++) { if(dat&0x80) { LCD_SID=1; } else { LCD_SID=0; } Delay10us(); LCD_SCLK=1; Delay10us(); LCD_SCLK=0; Delay10us(); dat<<=1; } LCD_CS=1; } void LCD_Init() { LCD_RST=0; DelayMs(100); LCD_RST=1; DelayMs(100); LCD_WR_CMD(0x30); DelayMs(50); LCD_WR_CMD(0x0c); DelayMs(50); LCD_WR_CMD(0x01); DelayMs(50); } void DHT11_Init() { DHT11_DATA=1; DelayMs(1000); } unsigned char DHT11_Read_Byte() { unsigned char i,dat=0; for(i=0;i<8;i++) { while(!DHT11_DATA); Delay10us(); if(DHT11_DATA) { dat|=1<<(7-i); while(DHT11_DATA); } } return dat; } void DHT11_Read_Temp(unsigned char *temp) { unsigned char dat[5],i; DHT11_Init(); DHT11_DATA=0; DelayMs(18); DHT11_DATA=1; while(DHT11_DATA); for(i=0;i<5;i++) { dat[i]=DHT11_Read_Byte(); } if(dat[0]+dat[1]+dat[2]+dat[3]==dat[4]) { *temp=dat[2]; } else { *temp=0xff; } } void main() { unsigned char temp; char str[5]; LCD_Init(); while(1) { DHT11_Read_Temp(&temp); sprintf(str,"%d",temp); LCD_WR_CMD(0x34); LCD_WR_CMD(0x80); LCD_WR_DAT('T'); LCD_WR_DAT('e'); LCD_WR_DAT('m'); LCD_WR_DAT('p'); LCD_WR_DAT(':'); LCD_WR_DAT(str[0]); LCD_WR_DAT(str[1]); LCD_WR_DAT(str[2]); LCD_WR_DAT(str[3]); DelayMs(1000); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值