① 单片机中TFT彩屏显示汉字原理
数组中的每一个字节的每一位都代表着显示器中对应的像素点,比如“0”的话不亮,“1”的时候亮。
然后程序中会有相应的函数来将数组中的数据按格式通过IO口发送到液晶屏的显存中,液晶屏按照接收的数据点亮相应的像素点。这样汉字就像图片一样显示出来了。
想要显示自己的汉字,你可以用取模软件,把汉字换算成像“普”那样形式的数据。以数组的形式写在程序中,之后用函数调用这个数组就行了
② 单片机控制TFT液晶,液晶驱动为ILI9341,请教各位大神如何实现动画显示且屏幕不闪烁
不是的, 需要两个缓冲, 第一个缓冲在驱动TFT的同时, 第二个缓冲正在写入第二副图片, 当第二个缓冲填满后, 它将驱动TFT, 而第一个缓冲在写入下一个图片.
也就是用两个缓冲交替写入数据, 交替工作, 这可节省数据载入缓冲的时间, 消除闪烁.
③ 关于单片机驱动TFT显示静态图片的问题
不推荐把图片放在MCU里,因为TFT显示数据量很大,很占MCU空间,一般MCU没有那么多存储空间,一般外接EEPROM或FLASH。但如果只是简单的背景色,则不需要存图片,用写点的程序将颜色数据写进去即可,叠加小图片,再重新写一次新数据即可。
④ 求高手指点,单片机怎么用TFT 彩屏显示图像
一般的单片机直接驱动TFT彩屏很困难,资源以及速度都达不到。驱动颜色数较少的低分辨率小尺寸屏还可以。
彩屏驱动还是用32位的ARM做吧。
如果一定要用普通的单片机驱动TFT彩屏,就选通用的彩色液晶模块吧,这个液晶已经用32位的嵌入式处理器做好了驱动,并开发了指令集,你只需通过串口对液晶模块发命令即可,如显示文字,画线,画园,显示预存的图像等。液晶具体驱动已经由模块内部做好了。这样的彩色模块市场有售,北京迪文科技的就不错,价位也不高
⑤ 51单片机能是2.4寸的TFT彩屏整屏显示吗
完全可以的,理论上可以驱动任何尺寸的彩屏,只是速度很慢,越大越慢。
点阵液晶屏是用一个字节驱动8个像素点,一个点是一位,所以只有亮和灭,两种状态。
彩色液晶屏是用两个字节驱动一个像素点,所以一个点可以有65536种颜色。
彩色液晶屏大都是16位的位宽,你用51单片机8位驱动必须要买带锁存器的液晶屏。
一般来讲用51单片机从SD卡中读出一张彩图,写到TFT彩屏里面需要接近十秒的时间。
所以说驱动彩屏,还是用ARM7这个级别的MCU比较靠谱。
⑥ 怎么编写单片机——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()函数进行显示
其实很简单的,只需用该几步就可以达到你想要的,不难~~
⑦ 51单片机驱动TFT液晶屏
如果显示图形是正确的 , 那只说明 功能接口是正确的。 颜色错误也要看哪一种, 如果是颜色反了 , 比如红色显示绿色, 那就是颜色信号线接反或者写颜色寄存器地址弄错了, 如果是颜色深浅的问题就要看 数据位数是不是有弄错 , 高低位有没有接对。 大概就这些了 。
⑧ 请问单片机驱动TFT彩屏怎样显示任意大小的图片
这个我做过,看他的例子里显示图片那个函数是不是有个循环,for(i=0;i<xxx;i++)
XXX就是你要显示的图片的长*宽*2;这样就可以了。有问题找我,ID是我的qq,希望能帮助你
⑨ 单片机如何写TFT彩屏的程序
武汉 谷鑫科技专业从事单片机驱动TFT彩屏的研发和生产。
下面是TFT6448BS-5.7模块的驱动程序:
sfr AUXR = 0x8e;//////////////////////////////////注意增加该语句。
#include <reg51.h>
#include <absacc.h>
#define X_ADDR XBYTE[0x0000]
#define Y_ADDR XBYTE[0x0100]
#define CMD XBYTE[0x0200]
#define DAT XBYTE[0x0300]
unsigned char code zk[32] = {//请
0x00, 0x47, 0x20, 0x23, 0x00, 0xEF, 0x20, 0x23, //left
0x22, 0x23, 0x22, 0x23, 0x2A, 0x32, 0x22, 0x02,
0x48, 0xFC, 0x40, 0xF8, 0x40, 0xFE, 0x08, 0xFC, //right
0x08, 0xF8, 0x08, 0xF8, 0x08, 0x08, 0x28, 0x10};
unsigned char code picture[];
main()
{
unsigned int x,y,x2,y2;
unsigned int i;
unsigned char key,x1,y1,j,k,z,m,n,bright;
AUXR = 0x02;//////////////////////////////////注意增加该语句。
bright = 8;
key = 0;//////////////////////////////////////选择液晶屏型号
//0:TFT2432;
//1:TFT3224;
//2:TFT480234
//3:TFT480272
//4:TFT6448
//5:TFT8048
//6:TFT8060
//7:TFT8060
if(P13==4)
{
if(key==0){x2=240;y2=320;x1=6; y1=16; goto loop1;}//x1/32,y1/20
if(key==1){x2=320;y2=240;x1=8; y1=12; goto loop1;}
if(key==2){x2=480;y2=240;x1=12;y1=12; goto loop1;}
if(key==3){x2=480;y2=272;x1=12;y1=14; goto loop1;}
if(key==4){x2=640;y2=480;x1=16;y1=24; goto loop1;}
if(key==5){x2=800;y2=480;x1=20;y1=24; goto loop1;}
if(key==6){x2=800;y2=600;x1=20;y1=30; goto loop1;}
if(key==7){x2=800;y2=600;x1=20;y1=30; goto loop1;}//亮度测试
}
loop1:
bright--;if(bright==255)bright=7;
CMD = 0x06;
DAT = bright;
///////////////////////以下是清屏功能///////////////////////////////////////
//用红色清屏
CMD = 0x04;DAT = 0xe0;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////
while(key==7)
{
for(bright=7;bright!=255;bright--)
{
CMD = 0x06;
DAT = bright;
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
}
CMD = 0x20;//关断显示,poweroff
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
key = P1&0x07;
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用红色清屏
CMD = 0x04;DAT = 0x1c;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用红色清屏
CMD = 0x04;DAT = 0x03;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用红色清屏
CMD = 0x04;DAT = 0x00;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//用红色清屏
CMD = 0x04;DAT = 0xff;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
///////////////////////以下是测试8点写功能///////////////////////////////////////
//8点写模式下清屏DAT=0;
CMD = 0x02;DAT=0xff;//前景色
CMD = 0x04;DAT=0x00;//背景色
CMD = 0x01;
for( y=0;y<y2;y++ )//用前景色清屏
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y; ;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for( x=0;x<(x2/8);x++ )DAT=0x55;
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for( y=0;y<y2;y++ )//用背景色清屏
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for( x=0;x<(x2/8);x++ )DAT=0x0f;
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//8点写模式下写单色图片
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for (y=0; y<80; y++)
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for ( n=0; n<10; n++) DAT = picture[y*10+n];
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//8点写模式下写汉字
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for ( n=0; n<=15; n++ )
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = n;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
DAT = zk[n];
DAT = zk[n+16];
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
//以下是测试单点写
CMD = 0x00;
i=0;
for(j=0;j<x1;j++)//20,x/40
{for (z=0;z<y1;z++)//24,y/20
{for (k=0;k<20;k++)
{x=j*40;
y=z*20+k;
X_ADDR = x;
if(key!=0)X_ADDR = x/256;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for (m=0;m<40;m++)DAT = i;
}
i++;
}
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}
http://tieba..com/club/10621043/p/14619152
⑩ 如何用单片机驱动tftlcd液晶屏
一般情况下按照TFTLCD的寄存器配置手册对寄存器进行配置就可以实现。