如何在tft中显示汉字?
我那时候用的是吴鉴鹰单片机开发板,各方面还是不错的。
从刚开始接触单片机,到现在已经有4年的时间了,在这期间学习和使用了51单片机、飞思卡尔单片机,LPC2138,PIC16F887等系列的单片机,每接触一款单片机,都会经历熟悉其基本开发,然后将其用于项目中的过程,对于如何学习一款单片机,自己做了如下的总结。
大家都知道,51单片机是最容易入门的,不仅因为其编程简单,更重要的是网上的资料非常丰富。所以一般学习单片机开发的都将51单片机作为入门开发的首选。我学习51单片机的时候是采用这样的一个步骤进行学习的:
第一步(熟悉的过程):买了一款51单片机开发板,然后就开始了我的学习之旅,刚开始的时候没有去看视频教程,而是对着一本实验教材进行学习,那本实验教材的名字记不清楚了,但是其内容就是围绕单片机的LED灯进行控制,将51单片机内部的各个功能部件全部都使用到了,这样就能使我在很短的时间内,通过控制LED灯的亮、灭熟悉了51单片机的内部的各种资源,这时对51单片机也就没有感到陌生了。所以,个人觉得,学习单片机,要从实验入手,先熟悉单片机再说,开发语言开始使用的是C语言。
第二步(进阶的过程):有了第一步的基础之后,接下来的便是进阶的过程,当时,我看的是郭天祥十天学会单片机的视频教程,因为这个教程从基础到复杂的编程慢慢深入,讲的比较的全面,而且也生动,所以那一阶段,也是我学习单片机进步最快的阶段,每次听课的时候,按照上面的实验,以及课堂上面调试程序时出现的一些问题,自己认真的在电脑上进行调试,并分析产生故障的原因,让我有了一定的开发基础。在看完了视频教程之后,后面又对基础的知识进行了下补习,主要是看单片机原理性的教材,因为有些细节性的东西还是要从教材上面获得。
第三步(项目实战的阶段):学习单片机的时候,虽然也编写了一些程序,但是那些都是一些很小的模块程序,并没有起到综合应用的目的,所以在这之后,我和另外一个学习硬件的同学一起组成了一个小的团队,进行项目实践开发,那时候,实验室的条件比价好,有很多的器件可以自己使用。所以,我们就设计了我们的第一个作品,基于单片机的液体点滴监控系统。做这个系统时,就将以前单片机所学的知识,做了一个综合的应用,包括有LCD1602控制,串口的控制等。
经过以上三个步骤的学习之后,对于51单片机的开发基本上就算入门了。而对于其他类型的单片机,如飞思卡尔单片机,LPC2148 ARM7单片机,PIC16F887等,虽然每个系列的功能不一样,但是最基本的编程思想还是一样的,不同的可能就是编译器,程序下载的软件等差别,所以有了51单片机的开发基础之后,学习其他单片机所采用的方法就是一个差异化的学习,学习各种单片机不同的地方,这样,就能很快的熟悉一款新的型号的单片机。
如在学习PIC16F887这个系列的单片机时,我首先做的工作不是去阅读数据手册,而是先拿着DEMO代码,在编译软件中编译、链接、生成HEX文件,然后将其下载到开发板中跑起来,这个过程主要就是学习其软件的基本操作,有了这个基础之后,就能自己进行编程、测试。之后就是熟悉其编程的模式,所谓其编程模式,就是寄存器的控制,中断程序的编写,熟悉了这个操作,也就能控制其他的功能模块了,如串口的控制、I2C硬件控制器的控制。这些基本的开发熟悉了之后,接下来便是学习差异的部分,例如PIC单片机C语言中,其堆栈深度不能超过8级,超过了之后,将会使得程序出现跑飞的现象。而且内存的分配完全要靠自己来控制,分成了4个BANK的数据,BANK0,BANK1,BANK2,BANK3 等。这些就是每个系列单片机所独有的一些东西,这些东西需要详细的了解,因为它们可能为你的编程带来很大的便利。
以上就是我学习单片机的总结,如果大家有更好的学习方法,希望大家能够提出来,一起讨论,共同进步。
,“一”这个字,8*8的点阵,0代表无,1代表画点,总共64个点,就要是{0x00,0x00,0x00, 0xff,0x00,0x00,0x00,0x00},这个点阵,8行扫面完后,就能再屏幕上看到一个杠了.
TFT汉字显示需要一个个点去显示一、字库格式是先行后列,以12*12格式为例,字库的前两字节为第一行点阵(第一字节8bit,第二字节的高4bit),共 24 字节为一个汉字的内容。其它字库依此类推
二、显示时从高bit位(bit7)到低bit位(bit0)依次显示,该bit位为1则输出字符颜色,为0则输出背景色
三、下面是一个字符的显示例程,从 8*5,12*6,16*8,24*12,。。。
const unsigned long tab_addr_offset_asc[]=
{
offset_asc_8,offset_asc_12,offset_asc_16,offset_asc_24,offset_asc_32,offset_asc_40,offset_asc_48,offset_asc_56,
offset_asc_64,offset_asc_72,offset_asc_80,offset_asc_96,offset_asc_128,offset_asc_end,
};
const unsigned short tab_len_asc[]=
{
0x08,0x0c,0x10,0x30,0x40,0x78,0x90,0xe0,0x100,0x168,0x190,0x240,0x400,
};
const unsigned char tab_xw_asc[]=
{
0x04,0x05,0x07,0x0b,0x0f,0x13,0x17,0x1b,0x1f,0x23,0x27,0x2f,0x3f,
};
const unsigned char tab_yw_asc[]=
{
0x07,0x0b,0x0f,0x17,0x1f,0x27,0x2f,0x37,0x3f,0x47,0x4f,0x5f,0x7f,
};
//*************************************************************************
// 这是一个字符显示程序, 显示数据由 lcd_byte_data 传递
// 显示到 pos_x(行), pos_y(列)
//*************************************************************************
void wr_lcd_hex(unsigned char lcd_byte_data,unsigned char font_ord)
{
unsigned char i,j,k;
unsigned char x_w,y_w; //行列位宽
unsigned char x_byte_w; //行字节宽
unsigned char zoom_bak;
unsigned short b_order;
x_w=tab_xw_asc[font_ord];
y_w=tab_yw_asc[font_ord];
x_byte_w=x_w;
x_byte_w+=0x07;
x_byte_w>>=0x03; //每行字节数
clrwdt();
ex_ee_addr.w[0]=lcd_byte_data;
ex_ee_addr.w[1]=0x00;
ex_ee_addr.val*=tab_len_asc[font_ord];
ex_ee_addr.val+=tab_addr_offset_asc[font_ord];
lcd_set_rang(lcd_pos_x,lcd_pos_x+x_w,lcd_pos_y,lcd_pos_y+y_w); //设定写入区域
b_order=0x00;
set_lcd_cs_on;
lcd_wr_cmd(lcd_cmd_wr_rams); //写存储器,后跟内容
zoom_bak=zoom;
zoom=0x01;
x_w++; //宽度实际位数
k=max_45db_buff; //进入下面循环程序时自动读入字库
while (b_order<tab_len_asc[font_ord])
{
if (k>=max_45db_buff) //续读字库
{
rd_45db_data(ex_ee_addr.val,rd_45db_buff,max_45db_buff); //读字库
ex_ee_addr.val+=max_45db_buff;
i=x_w;
k=0x00;
}
j=0x80;
while ((i)&&(j))
{
if (rd_45db_buff[k]&j)
lcd_wr_color(lcd_word_color);
else
lcd_wr_color(lcd_back_color);
j>>=0x01;
i--;
}
k++;
b_order++;
if (i==0x00) //当前行写完,更新行长
i=x_w;
}
zoom=zoom_bak;
set_lcd_cs_off;
//调整到下一显示位置
lcd_pos_x+=x_w;
if (lcd_pos_x>max_lcd_pos_x)
{
lcd_pos_x=0x00;
lcd_pos_y+=y_w+0x01;
if (lcd_pos_y>max_lcd_pos_y)
lcd_pos_y=0x00;
}
}
您好,以下是单片机实践团为您解答:
1、我们先分析使用内部flash的情况:
1)DrawSingle16Hz(30,100, "汽", Red,White,1);
2)函数:void DrawSingle16Hz(u16 x, u16 y, u8 *pHz, u16 LineColor,u16 FillColor, u8 Mod)
3)
typedef struct typFNT_GB16 /*16*16 汉字字模显示数据结构 */
{
char Msk[32];
char Index[2];
}gb16;
4)
gb16 const HzLib[] =
{
0x42,0x00,0x22,0x00,0x23,0xFC,0x04,0x00,0x97,0xF8,0x58,0x00,0x57,0xF0,0x10,0x10,
0x10,0x10,0x20,0x10,0xE0,0x10,0x20,0x10,0x20,0x0A,0x20,0x0A,0x20,0x06,0x20,0x02,
"汽",
0x02,0x00,0x02,0x00,0x7F,0xFC,0x04,0x00,0x04,0x80,0x08,0x80,0x10,0x80,0x3F,0xFC,
0x00,0x80,0x00,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,
"车",
}
5)关于字库就是3)&4)里面的东西,写好API函数后直接调用1)即可显示汉字,这是我STM32的处理思路。
2、接下来说说你的外部flash,其实也是一样的,只是有一些变化,内部flash的话编译生成的是程序的一部分,他会自己执行。外部的需要一个读取的过程,也就是读取3)&4)的内容。
我想问您的bin格式字库是怎么生成的,应该也是c的数组编译生成的吧,查找的时候并不是直接安照bin文件的flash地址进行一一对应的,而是通过c的逻辑查找的,不管是什么形式。至于你说的汉字内码这种方式是标准汉字库的做法,就比如3)中的Index或者4)中的具体汉字,只不过他是使用统一的内码来实现汉字表示的。
3、关于片外flash一般做字库都是使用spi型的flash来做的,这个涉及的过程就是查找并读取的过程,建议先搞清楚内部flash的过程。关于汉字内码参考:http://baike.baidu.com/view/1209513.htm
4、常在线,不明白的hi我。
液晶屏的主要构造,工作原理是什么?谢谢!
液晶显示器工作原理 现在市场上的液晶显示器都采用了TFT液晶面板,这种液晶面板的是目前最先进的液晶显示器技术,从结构上看,液晶屏由两片线性偏光器和一层液晶所构成。其中,两片线性偏光器分别位于液晶显示器的内外层,每片只允许透过一个方向的光线,它们放置的方向成90度交叉(水平、垂直),也就是...
液晶显示器的主要构成和结构是什么?
画面质量更高 传统的CRT显示器多采用模拟显示方式,显示的信号输出采用模拟输出方式,在传送过程中就有可能造成图像的损失,导致画面质量的下降,而液晶显示器的信号传送采用数字方式,由显卡直接输出数字信号,不会造成信号的损失,但目前多数液晶显示器仍然采用面向模拟显示器的VGA接口,只有少数如Acer、EMC、三星等厂商设置了...
各位大神客观理性个人角度,也可商业角度发表下看法:索尼TFT屏幕...
TFT= Thin Film Transistor 即薄膜晶体管,是液晶面板的像素驱动阵列电路采用的技术,可以说目前所有的液晶面板都是TFT技术,所以不存在TFT屏幕落后这一说。IPS = In-Plane-Switch 是相对于TN(Twisted Nematic 扭曲向列)液晶技术而言的,比TN液晶色彩好、视角宽,目前所有中高端手机都是IPS屏幕,除非是很...
哪些手机将配备LTPO显示屏并能有效延长电池寿命?
更深入地讲,手机屏幕并非简单的玻璃层,而是由多层复杂组件构成。LTPO技术的关键在于集成在OLED显示屏中的薄膜晶体管(TFT),由低温多晶硅制成。这种混合材料允许屏幕在不同刷新率间灵活切换,从而节省能源。对于120Hz手机,LTPO的作用在于在不必要时降低刷新率,极大地延长了日常使用的电池寿命。LTPO并非仅...
哪个手机比较好
显示屏幕 内屏颜色 26万色内屏材质 TFT LCD屏幕尺寸 240×320像素外屏颜色 无数码相机功能 数码相机功能 无数码相机感光元件 无数码相机像素(万) 0数码相机性能 无 挑错主要功能 和弦铃声 40和弦铃声铃声功能 可选铃声,内置振动,下载铃声,可编铃声;支持MP3\/AAC等格式WAP支持版本 2.0网页浏览 HTML\/XHTML蓝牙技术 ...
...平板电视?液晶电视?CRT电视?等离子电视?区别何在?什么产品效果最好...
PDP的出现,使得中大型尺寸(约40~70寸)显示器的发展应用产生极大变化,以其超薄体积与重量远小于传统大尺寸 CRT电视,在高解析度、不受磁场影响、视角广及主动发光等胜于TFT-LCD的特点,完全符合多媒体产品轻、薄、短、小的需求。CRT(Crystal Ray Tube,阴极射线管)可以说是投影技术的“鼻祖”。使用...
电视机中所说的4K是什么意思
4K显示面板采用氧化物薄膜晶体管(TFT)制作,具备高速电子移动速度,呈现画面内容具高分辨率及薄边框,呈现超薄质感,可使电视机更轻薄,画面更为细致。 4K显示屏幕在电视上是非常常见的,而一般同级别的电视中如果采用了4K的显示效果那么它的价格和性能都会强上不少。 扩展资料: 识别“真假4K电视”: 前几年4K电视机刚刚...
请问手机行的和水的有什么区别?
c 仔细检查WAP和语音功能及通话纪录信息功能中有无记录 e 外壳就靠对比了(与证明是好的机器去比亮度,均匀度,色调,颗粒度...) f 闻气味,新机器有檀香,不同与一般的清洁剂和香水味.机身不能有粘粘的蜡和油(有的话被JS美容了) g 仔细检查SIM卡接触点,机身电池接触点有无磨痕(区别接触点其余部分) h 看...
中国古诗大全
慈母手中线,游子身上衣。临行密密缝,意恐迟迟归。谁言寸草心,报得三春晖。菩萨蛮 书江西造口壁 宋 辛弃疾 郁孤台下清江水,中间多少行人泪。西北望长安,可怜无数山。青山遮不住,毕竟东流去。江晚正愁余,山深闻鹧鸪。语文第十二册:卜算子咏梅 毛泽东 1961年12月 风雨送春归,飞雪迎春到。已...
拓询云南: 1. 想想一下一个汉字占据的屏幕面积由100X100个点阵形成2. 每一个汉字需可以由其中某些点点亮后连线而成.3. 液晶显示就是通过TFT 控制而让100X100的某些点阵来点亮,从而实现显示汉字
南岔区18529963383: 怎么stm32在TFT屏上显示中文 不用字库 - ?
拓询云南: ,“一”这个字,8*8的点阵,0代表无,1代表画点,总共64个点,就要是{0x00,0x00,0x00, 0xff,0x00,0x00,0x00,0x00},这个点阵,8行扫面完后,就能再屏幕上看到一个杠了.
南岔区18529963383: 单片机如何写程序才能在一个2.2'' 的TFT显示屏上显示出Hello word呢? - ?
拓询云南: 数组中的每一个字节的每一位都代表着显示器中对应的像素点,比如“0”的话不亮,“1”的时候亮. 然后程序中会有相应的函数来将数组中的数据按格式通过IO口发送到液晶屏的显存中,液晶屏按照接收的数据点亮相应的像素点.这样汉字就像图片一样显示出来了. 想要显示自己的汉字,你可以用取模软件,把汉字换算成像“普”那样形式的数据.以数组的形式写在程序中,之后用函数调用这个数组就行了
南岔区18529963383: 怎样在TFT彩屏中显示动态字 - ?
拓询云南: 先显示某几个字,然后再显示空格,这样把之前的字给覆盖掉,然后再显示字,因为速度足够快,所以看起来会像是滚动的显示
南岔区18529963383: C51中TFT彩屏无法显示出汉字,但程序编译没问题 - ?
拓询云南: 建议先写一个单字符显示函数,这样调用起来更方便,移植也方便;然后显示字符串 参考函数如下:typedef struct typFNT_GB16 /*12*16 汉字字模显示数据结构 */ { char Index[2]; char Msk[32]; }HZ;//HZ code HzLib[] = { /* 宋体 9小五 显示为12*16 *...
南岔区18529963383: 32单片机无sd卡怎么tft显示汉字 - ?
拓询云南: 如果只用51的话,控制不了.因为TFT彩屏的数据处理量不是51能完成的,如果非要用51控制,中间要加个控制卡.51只是8位机,也就是同一时刻最多处理8位数据.建议用16位机或者是32位机控制彩屏.
南岔区18529963383: 怎么编写单片机——TFT彩屏汉字程序? - ?
拓询云南: 你现在看到的这两个函数LCD_ShowString()ChineseChar()是你在上层调用的,具体的函数定义你要去看底层是怎么实现的.我先简单介绍下着两个函数 LCD_ShowString(12,60,colors[0],colors[7],"-");应该是讲屏幕上x=12,y=60的地方...
南岔区18529963383: 数码相机SOSHOW500中TFT LCD显示不是中文了,如何设置为中文?
拓询云南: 知识标题数码相机SOSHOW500中TFT LCD显示不是中文了,如何设置为中文? 解决方案描述SOSHOW500中TFT LCD显示不是中文了,如何设置为中文?1)开机后,将“模式转换旋钮”,设置为“静态”,按下“Menu”钮进入菜单;2)...
南岔区18529963383: 什么是段码液晶屏,能显示图形汉字吗? - ?
拓询云南: 我认为这样理解是最正确的,段码屏可以显示汉字,但是由于段码屏的图案是直接通过菲林模具做进玻璃里面的 ,因此汉字只能控制亮或不亮,但是不能变化其他汉字. 另外再比如8字数码,其实也是由七个小分段组成的,通过控制这七个小分段亮灭来实现0~9数字的显示.
南岔区18529963383: 请问单片机驱动TFT彩屏怎样显示任意大小的图片?? - ?
拓询云南: 这个我做过,看他的例子里显示图片那个函数是不是有个循环,for(i=0;i<xxx;i++) XXX就是你要显示的图片的长*宽*2;这样就可以了.有问题找我,ID是我的qq,希望能帮助你