A. 怎么在stm32f429 单片机显示中文文字
不管何种 单片机显示中文文字,首先要看液晶屏是否自带字库
如果带字库只管送中文文字的Uinicode编码就行(编译软件会自选查找)
如果不带字库,就要制作或复制字模(库)文件,显示时计算好要显示的汉字在字库中的位置,读出该字字模后,逐位判断是1还是0,从而决定是画黑点还是白点(当然彩屏还可以是多种颜色)这些在野火和正点原子的STM32教程中都有
B. 怎么用单片机和led显示模块显示任意一个汉字,不是那种提前编好码的那种固定汉字的加汉字库
汉字字库比较大,如16X16点阵一个汉字32字节(8*8点阵效果太差),国标一级字库就有6千多个汉字,总共要200多K的存储空间,对于即使用STm32单片机,写入字库后,程序存储空间也受到限制,因此,字库多保存在外扩FLASHROM中或SD卡上。所以要显示汉字就要学会访问FLASHROM(如Q25Q16)或SD卡,野火和正点原子的STM32教程都讲有查找字库和在LCD屏上显示汉字的方法,LED显示原理和LCD完全一样。
C. 我用的是带字库的LCD,请问如何用单片机程序显示汉字我用过的是12864液晶,怎样让它显示五行。
我这有代码,但不知道与你的12864液晶是不是一个型号
#include "lcd_12864.h"
void LCD_Delayt(unsigned int dtime) {
unsigned int itemp;
for(itemp=0;itemp<dtime;itemp++);
}
void LCD_Init(void) {
SN74LVC_DIR_DIR |= SN74LVC_DIR;
SN74LVC_DIR_LO;
//SN74LVC_OE_DIR |= SN74LVC_OE;
//SN74LVC_OE_LO;
LCD_PSB_DIR |= LCD_PSB; //PSB -> 并行模式
LCD_PSB_HI;
LCD_RST_DIR |= LCD_RST; //RST -> 复位输出
LCD_RST_LO; //复位状态
LCD_Delayt(1000);
LCD_DI_DIR |= LCD_DI;
LCD_DI_LO;
LCD_RW_DIR |= LCD_RW;
LCD_RW_LO;
LCD_EN_DIR |= LCD_EN;
LCD_EN_LO;
LCD_Delayt(1000);
LCD_RST_HI; //正常状态
LCD_WriteComm(0x30);
LCD_WriteComm(0x0c);
LCD_WriteComm(0x01);
LCD_WriteComm(0x02);
LCD_WriteComm(0x06);
}
void LCD_CheckBusy(void) {
unsigned char Flag;
LCD_DI_LO;
LCD_RW_HI;
do {
LCD_EN_HI;
LCD_DATA_DIR = 0x00;
SN74LVC_DIR_HI;
_NOP();
Flag = LCD_DATA_IN;
_NOP();
SN74LVC_DIR_LO;
LCD_DATA_DIR = 0xFF;
LCD_EN_LO;
} while(Flag & 0x80);
}
void LCD_WriteComm(unsigned char wdata) {
LCD_CheckBusy();
LCD_DI_LO;
LCD_RW_LO;
LCD_EN_HI;
LCD_DATA_OUT = wdata;
LCD_EN_LO;
}
void LCD_WriteByte(unsigned char wdata) {
LCD_CheckBusy();
LCD_DI_HI;
LCD_RW_LO;
LCD_EN_HI;
LCD_DATA_OUT = wdata;
LCD_EN_LO;
}
void LCD_SetXY(unsigned char X, unsigned char Y) {
switch(Y) {
case 1:
LCD_WriteComm(0x7F + X);
break;
case 2:
LCD_WriteComm(0x8F + X);
break;
case 3:
LCD_WriteComm(0x87 + X);
break;
case 4:
LCD_WriteComm(0x97 + X);
}
}
void LCD_WriteDEC(unsigned char X, unsigned char Y, unsigned char wdata) {
LCD_SetXY(X,Y);
LCD_WriteByte(wdata);
}
void LCD_WriteString(unsigned char X, unsigned char Y, unsigned char *String) {
unsigned char temp;
LCD_SetXY(X,Y);
temp = *String;
while(temp!=0) {
LCD_WriteByte(temp);
temp = *(++String);
}
}
void Clr_Screen(void)
{
LCD_WriteComm(0x00);
}
D. 51单片机如何实现汉字显示,如“龙”字,能否给程序和电路图
方案一:含字库的液晶,单片机给出相应指令即可显示。效果最好,成本较高,程序量小,难度适中。
方案二:点阵液晶或LED点阵,以16*16分辨率,用汉字取模软件取模,将字模数据依次送至点阵电路显示。效果很好(可巨型高亮),程序量大,成本较高。
方案三:用LED或小灯泡排列成汉字,单片机控制开关总电源即可。效果较差,不能变化,基本无程序,成本和难度均最低。
方案三,把N个LED串成一串,摆成汉字就OK了。
E. 单片机显示汉字
编码说白了就是索引,就是通过一定的计算公式能找到字符所在数据块所在的地址,比如12X12的汉字就占用18BYTE。
编码有这几种GB2313,GBK,Unicode等,相同的字的数据是一样的,唯独就是在标准字库的的地址不一样。
字库里的数据有横向纵向,高位在前低位在前等等不同方式。
F. 51单片机点阵显示一个汉字
8x8的点阵太小,很难正常显示一个汉字,通常,会使用4个8x8的点阵即16x16的点阵来显示一个汉字。
单片机在通过点阵显示汉字的时候,需要用到如下技术手段:
1、汉字取模
汉字取模,即把汉字对应16x16点阵的图形用16进制数来描述,形成可以用于驱动显示的数据。
例如下图,的汉字“中”
该字的16x16点阵图形中,每行有16个像素,可以编码为2个字节,每8个像素,对应一个字节的高低位,则该字编码的前2个字节为0x01,0x80……,如此,可用32个字节描述汉字的点阵图形。
关于汉字取模有很多开源的软件,你可以搜索下载并使用,将你的程序中所需要使用的汉字,全部处理成字模,再定义到程序中即可。(也可以使用汉字字库芯片,这里就不讨论了)
2、扫描显示
通常,驱动点阵设备时,为了节约单片机的管脚资源,会使用锁存器一类的期间,即锁存器输出端与点阵连接,而输入段由单片机控制,采用行、场扫描或分块行、场扫描的方式驱动,具体你可以搜寻相关资料。
G. 求51单片机怎么显示汉字,能不能给我发个现成的程序
这个要看液晶显示屏是否带字库, 如果带字库, 那你把娟字的 两字节汉字代码发过去就能显示 如果不带字库, 那就需要汉字取模软件把娟字的点阵数据取出来, 然后把它发给液晶屏显示, 这个点阵大小就跟取模软件设置有关, 有16X16点阵的, 有32X32点阵的, 生成的点阵数据大小也不一样
H. 怎么用单片机实现点阵循环显示汉字
如果是8x8点阵,只需要 在里面多添加几个for循环就行了,每个循环显示不同的字库,每个for循环之间需要适当延时
I. 单片机控制的16*16点阵显示汉字,为什么出现的字体是镜像的怎么改正
单片机控制的16*16点阵显示汉字,出现字体是镜像的现象是由于取点阵时扫描方向搞反了。改正方法是逆序读点阵数组数据,即原来从数组0下标开始读改为从下标15开始倒着读,写的顺序不变,就矫正了。
J. 如何单片机LCD上显示汉字,LCD为HD44780
HD44780有五种字符写入方式字符型液晶显示模块允许用户在HD44780片内CGRAM内64个字节00H-3FH 自建立8个5x8点阵的字符. 由于显示字符之间的间隔至少为一个像素点,拿其中的4个作为显示1个16*16汉字的话存在汉字被分裂的情况,很不好看的.另外,由于这个控制器只能自建立8个5x8点阵的字符,也就是说只能写两个汉字,名字可能显示不全.
建议使用带有汉字字库的LCD12232,或者图形点阵LCD12864,这两个显示楼主的大名绝对没问题 :-)