㈠ 怎么在stm32f429 单片机显示中文文字
不管何种 单片机显示中文文字,首先要看液晶屏是否自带字库
如果带字库只管送中文文字的Uinicode编码就行(编译软件会自选查找)
如果不带字库,就要制作或复制字模(库)文件,显示时计算好要显示的汉字在字库中的位置,读出该字字模后,逐位判断是1还是0,从而决定是画黑点还是白点(当然彩屏还可以是多种颜色)这些在野火和正点原子的STM32教程中都有
㈡ 谁能帮我做一下单片机系统中自制硬件字库的应用的程序,仿真图在下面,程序一定要正确,救急!
// --------------------main.c-----------------------
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigend int
#define ulong unsigned long
//12864LCD相关函数
void LCD_Initialize();
void Display_A_Char(uchar,uchar,uchar *);
void Display_A_WORD_String(uchar,uchar,uchar,uchar *);
void Display_A_Image(uchar,uchar,uchar,uchar,uchar *);
//I2C相关函数
void IIC_24C1024_Init();
uchar RecString (uchar Slave,ulong Mem_address,uchar *Buffer,uchar N);
uchar Word_Dot_Matrix[32];
uchar LCD_Dot_Matrix[32];
void Read_HZ_dot_Matrix_AND_Convert_TO_LCD_Fmt(uchar c[])
{
ulong Offset;
uchar SectionCode,PlaceCode;
uchar AT24C1024_a1;
uchar i,j,LCD_Byte,block;
uchar Idx[4] = {0,1,16,17};
SectionCode = c[0]-0xa0;
PlaceCode = c[1]-0xa0;
Offset = (94 * (SectionCode - 1) = (PlaceCode - 1))*32L;
AT24C1024_A1 = Offset >> 17;
Offset &= 0x0001FFFF;
if (AT24C1024_A1 == 0)
RecString(0xa0,Offest,Word_Dot_Matrix,32);
else
RecString(0xa4,Offest,Word_Dot_Matrix,32);
for(block = 0;block < 4; block ++)
{
for(i = 0;i < 8; i++)
{
LCD_Byte = 0x00;
for(j = 0;j < 8; j++)
{
if((Word_Dot_Matrix[Idx[block] + 2*j] & (0x80>>i))!=0x00)
LCD_Byte |= (uchar)0x01 <<j;
}
LCD_Dot_Matrix[i+block * 8]= LCD_Byte;
}
}
}
void main()
{
uchar i,j;
char code Poem[][15]=
{
"白日依山尽,","黄河入海流。","欲穷千里目,","更上一层楼。"
};
LCD_Initialize();
IIC_24C1024_Init();
for(i = 0;i < 4; i++)
{
for(j = 0;j < strlen(Poem[i]);j+=2)
{
Read_HZ_dot_Matrix_AND_Convert_TO_LCD_Fmt(Poem[i] + j);
Display_A_WORD_String(i*2,j/2 *16 +19,1,LCD_Dot_Matrix);
}
}
}
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define Delay4us() { _nop-(); _nop_(); _nop_(); _nop_();}
sbit SCL =P3^2;
sbit SDA =P3^3;
void Start()
{
SDA=1;SCL = 1; Delay4us();
SDA=0;Delay4us();SCL = 0;
}
void Stop()
{
SDA=0;SCL = 1; Delay4us();
SDA=1;Delay4us();SCL = 0;
}
void IIC_24C1024_Init()
{
SCL=0;Stop();
}
void ACK()
{
SDA=0;SCL=1;Delay4us();SCL=0;SDA =1;
}
void NO_ACK()
{
SDA =1;SCL=1;Delay4us();SCL=0;SDA =0;
}
uchar SendByte(uchar wd)
{
uchar i;
bit ACK0;
for(i=0;i<8;i++)
{
SDA=(bit)(wd & 0x80); _nop_();
SCL=1;Delay4us();SCL=0;wd <<= 1;
}
Delay4us();
SDA=1;
SCL=1;
Delay4us();
ACK0 =!SDA;
SCL=0;
Delay4us();
return ACK0;
}
uchar RecString(uchar Slave,ulong Mem_address,uchar *Buffer,uchar N)
{
uchar i,page;
uint addr16;
page = (uchar)((Mem_address>>16) &0x00000001);
page <<= 1;
addr16 =(uint)(Memaddress & 0x0000FFFF);
Start();
if(!SendByte(Slave | page)) return 0;
if(!SendByte((uchar)(addr16 >> 8))) return 0;
if(!SendByte((uchar)(addr16))) return 0;
Start();
if(!SendByte(Slave | 0x01)) return 0;
for(i=0;i<N-1;i++)
{
BVuffer[i] = RecByte();
ACK();
}
Buffer[N-1]=RecByte();
NO_ACK();
Stop();
}
㈢ 请问你怎么把字库写到单片机里的啊
上位机写个小软件一行行读字库文件然后通过串口烧到但单片机里,单片机串口收到后就保存到需要的位置。
㈣ 51单片机如何实现汉字显示,如“龙”字,能否给程序和电路图
方案一:含字库的液晶,单片机给出相应指令即可显示。效果最好,成本较高,程序量小,难度适中。
方案二:点阵液晶或LED点阵,以16*16分辨率,用汉字取模软件取模,将字模数据依次送至点阵电路显示。效果很好(可巨型高亮),程序量大,成本较高。
方案三:用LED或小灯泡排列成汉字,单片机控制开关总电源即可。效果较差,不能变化,基本无程序,成本和难度均最低。
方案三,把N个LED串成一串,摆成汉字就OK了。
㈤ 单片机控制的LED点阵显示的字库如何制作
我以前做的是使用ucdos下的点阵字库,16*16点阵的,包含GB2312的全部汉字,大约260多KB。如果去掉部分不常用的符号,可以缩小到256K。单片机显示的时候,可以根据汉字内码计算出汉字在点阵里的位置,然后读出,显示。
对了,那个文件名叫HZK16,你在网上应该能收到。
可以用任何ROM芯片来存储,如果你的单片机引脚不够,可以用串行EEPROM,有不少是256KB的。
㈥ 怎么编写单片机——TFT彩屏汉字程序
你现在看到的这两个函数LCD_ShowString()ChineseChar()是你在上层调用的,具体的函数定义你要去看底层是怎么实现的。我先简单介绍下着两个函数
LCD_ShowString(12,60,colors[0],colors[7],"-");应该是讲屏幕上x=12,y=60的地方显示一个“-”字符,字符颜色应该是你定义的colors[0],TFT屏的背景颜色是colors[7],这两个是你函数库自己定义的,可以改。
ChineseChar(20,60,1,colors[0],colors[7],1); //带 这个函数和上面那个函数大致相同,至于为什么会显示“带”,是因为最后那个1,这个程序你应该定义一个数组,在这个数组里面对你所要显示的字全部编码并存在这个数组中,最后你只需用想调用数组下标那样调用这个汉子。
至于你想显示班级、姓名 只需用把班级姓名进行编码就可以调用这个ChineseChar()函数进行显示
其实很简单的,只需用该几步就可以达到你想要的,不难~~
㈦ 高分悬赏!求12x12点阵的汉字库,C51 ,单片机,硬件,led, lcd ,编程,
/*本文件为12×12点阵中文字库文件,字的横向8点构成一字节,左边点在字节的高位,字符点阵四角按左上角→右上角→左下角→右下角取字*/
/*如你想在以后继续用HZDotReader打开文件,追加汉字点阵数据,请不要修改或增删所有注释*/
unsigned char code hzdot[90240] = {
/*啊 CB0A1 */
0x1D,0xE0,0xF4,0x20,0xB4,0x20,0xBB,0xA0,
0xB6,0xA0,0xB6,0xA0,0xF7,0xA0,0x1C,0x20,
0x10,0x20,0x10,0x20,0x10,0xE0,0x00,0x00,
/*阿 CB0A2 */
0xF7,0xE0,0x90,0x40,0xA0,0x40,0xC7,0x40,
0xA5,0x40,0x95,0x40,0x97,0x40,0xF0,0x40,
0x80,0x40,0x80,0x40,0x81,0xC0,0x00,0x00,
/*埃 CB0A3 */
0x22,0x00,0x24,0x40,0x2F,0xE0,0xF0,0x00,
0x24,0x00,0x27,0xC0,0x29,0x00,0x3F,0xE0,
0xC2,0x80,0x04,0x40,0x18,0x20,0x00,0x00,
/*挨 CB0A4 */
0x21,0x00,0x22,0x40,0xF7,0xE0,0x20,0x20,
0x24,0x00,0x37,0xC0,0xE9,0x00,0x3F,0xE0,
0x22,0x80,0x24,0x40,0x78,0x20,0x00,0x00,
/*哎 CB0A5 */
0x04,0x80,0xEF,0xE0,0xA4,0x80,0xA0,0x00,
0xA4,0x80,0xA4,0x80,0xA4,0x80,0xE3,0x00,
0x03,0x00,0x04,0x80,0x38,0x60,0x00,0x00,
/*唉 CB0A6 */
0x02,0x80,0xE4,0x40,0xAF,0xE0,0xA4,0x00,
0xA7,0xC0,0xA9,0x00,0xA9,0x00,0xFF,0xE0,
0x02,0x80,0x04,0x40,0x18,0x20,0x00,0x00,
/*哀 CB0A7 */
0x04,0x00,0xFF,0xE0,0x00,0x00,0x3F,0x80,
0x20,0x80,0x3F,0x80,0x0C,0x40,0x12,0x80,
0x31,0x00,0xD4,0x80,0x18,0x60,0x00,0x00,
/*皑 CB0A8 */
0x21,0x00,0x45,0x20,0xF7,0xE0,0x90,0x00,
0x97,0xC0,0xF0,0x40,0x97,0xC0,0x94,0x00,
0xF4,0x20,0x94,0x20,0x07,0xE0,0x00,0x00,
/*癌 CB0A9 */
0x02,0x00,0x7F,0xE0,0x48,0x40,0xCF,0xC0,
0x40,0x00,0x5D,0xE0,0xD5,0x20,0x5D,0xE0,
0x42,0x00,0x92,0x40,0x9F,0xC0,0x00,0x00,
/*蔼 CB0AA */
0x12,0x00,0xFF,0xE0,0x48,0x40,0x2F,0xC0,
0x08,0x40,0xCF,0xC0,0x48,0x60,0x59,0x20,
0x4A,0xA0,0x6F,0xA0,0x00,0xC0,0x00,0x00,
/*矮 CB0AB */
0x41,0xC0,0x4F,0x00,0xF1,0x00,0xAF,0xE0,
0x25,0x40,0xF9,0x20,0x22,0x00,0x2F,0xE0,
0x54,0x80,0x43,0x80,0x9C,0x60,0x00,0x00,
/*艾 CB0AC */
0x09,0x00,0xFF,0xE0,0x09,0x00,0x09,0x00,
0x10,0x80,0x10,0x80,0x09,0x00,0x0A,0x00,
0x06,0x00,0x19,0x00,0xE0,0xE0,0x00,0x00,
/*碍 CB0AD */
0xF7,0xC0,0x24,0x40,0x27,0xC0,0x44,0x40,
0x77,0xC0,0xD0,0x00,0x57,0xE0,0x50,0x40,
0x77,0xE0,0x52,0x40,0x01,0xC0,0x00,0x00,
/*爱 CB0AE */
0x03,0xC0,0x7C,0x80,0x15,0x00,0xFF,0xE0,
0x88,0x20,0x7F,0xC0,0x08,0x00,0x0F,0x80,
0x19,0x00,0x26,0x00,0xD9,0xE0,0x00,0x00,
/*隘 CB0AF */
0xE8,0x40,0xA4,0x80,0xBF,0xE0,0xA2,0x80,
0xE4,0x40,0x98,0x20,0x9F,0xC0,0xF5,0x40,
0x95,0x40,0x95,0x40,0xBF,0xE0,0x00,0x00,
/*鞍 CB0B0 */
0x51,0x00,0xFF,0xE0,0x54,0x20,0x71,0x00,
0x21,0x00,0xFF,0xE0,0xAA,0x40,0xFA,0x40,
0x23,0x80,0xF9,0x40,0x26,0x20,0x00,0x00,
/*氨 CB0B1 */
0x20,0x00,0x7F,0xE0,0x40,0x00,0xBF,0x80,
0x08,0x80,0x7F,0x80,0x51,0x80,0xFE,0x80,
0x24,0xA0,0x1E,0x60,0xE3,0x20,0x00,0x00,
/*安 CB0B2 */
……
……
㈧ 单片机,字库文件是怎么调用的
字库文件必须嵌入到程序里面才能使用,一般而言,要制作小字库,以节约代码空间。单片机程序空间是比较紧张的,所以不能使用整个字库(比如汉字库),只取有用字的字模。
㈨ 怎么用单片机和led显示模块显示任意一个汉字,不是那种提前编好码的那种固定汉字的加汉字库
汉字字库比较大,如16X16点阵一个汉字32字节(8*8点阵效果太差),国标一级字库就有6千多个汉字,总共要200多K的存储空间,对于即使用STm32单片机,写入字库后,程序存储空间也受到限制,因此,字库多保存在外扩FLASHROM中或SD卡上。所以要显示汉字就要学会访问FLASHROM(如Q25Q16)或SD卡,野火和正点原子的STM32教程都讲有查找字库和在LCD屏上显示汉字的方法,LED显示原理和LCD完全一样。
㈩ 51单片机点阵显示一个汉字
8x8的点阵太小,很难正常显示一个汉字,通常,会使用4个8x8的点阵即16x16的点阵来显示一个汉字。
单片机在通过点阵显示汉字的时候,需要用到如下技术手段:
1、汉字取模
汉字取模,即把汉字对应16x16点阵的图形用16进制数来描述,形成可以用于驱动显示的数据。
例如下图,的汉字“中”
该字的16x16点阵图形中,每行有16个像素,可以编码为2个字节,每8个像素,对应一个字节的高低位,则该字编码的前2个字节为0x01,0x80……,如此,可用32个字节描述汉字的点阵图形。
关于汉字取模有很多开源的软件,你可以搜索下载并使用,将你的程序中所需要使用的汉字,全部处理成字模,再定义到程序中即可。(也可以使用汉字字库芯片,这里就不讨论了)
2、扫描显示
通常,驱动点阵设备时,为了节约单片机的管脚资源,会使用锁存器一类的期间,即锁存器输出端与点阵连接,而输入段由单片机控制,采用行、场扫描或分块行、场扫描的方式驱动,具体你可以搜寻相关资料。