单片机如何写TFT彩屏的程序?

单片机如何写TFT彩屏的程序?,第1张

武汉 谷鑫科技专业从事单片机驱动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=240y2=320x1=6y1=16goto loop1}/穗塌/x1/32,y1/20

if(key==1){x2=320y2=240x1=8y1=12goto loop1}

if(key==2){x2=480y2=240x1=12y1=12goto loop1}

if(key==3){x2=480y2=272x1=12y1=14goto loop1}

if(key==4){x2=640y2=480x1=16y1=24goto loop1}

if(key==5){x2=800y2=480x1=20y1=24goto loop1}

if(key==6){x2=800y2=600x1=20y1=30goto loop1}

if(key==7){x2=800y2=600x1=20y1=30goto loop1}//亮度测试

}

loop1:

bright--if(bright==255)bright=7

CMD = 0x06

DAT = bright

//////////////拆纤/////////以下是清屏功能///////////////////////////////////////

//用红色清屏

CMD = 0x04DAT = 0xe0//背景色

CMD = 0x08//启动填充 *** 作

for(y=0y<260*12y++)//延时16.6毫秒

CMD = 0x00//退出填充 *** 作

///////////////////////以上是清屏功能///////////////////////////////////////

while(key==7)

{

for(bright=7bright!=255bright--)

{

CMD = 0x06

DAT = bright

for(y=0y<15y++){x=1while(x!=0)x++}

}

CMD = 0x20//关断显示,poweroff

for(y=0y<15y++){x=1while(x!=0)x++}

key = P1&0x07

}

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//用红色清屏

CMD = 0x04DAT = 0x1c//背景色

CMD = 0x08//启动填充 *** 作

for(y=0y<260*12y++)//延时16.6毫秒

CMD = 0x00//退出填充 *** 作

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//用红色清屏

CMD = 0x04DAT = 0x03//背景色

CMD = 0x08//启动填充 *** 作

for(y=0y<260*12y++)//延时16.6毫秒

CMD = 0x00//退出填充 *** 作

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//用红色清屏

CMD = 0x04DAT = 0x00//背景色

CMD = 0x08//启动填充 *** 作

for(y=0y<260*12y++)//延时16.6毫秒

CMD = 0x00//退出填充 *** 作

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//用红色清屏

CMD = 0x04DAT = 0xff//背景色

CMD = 0x08//启动填充 *** 作

for(y=0y<260*12y++)//延时16.6毫秒

CMD = 0x00//退出填充 *** 作

///////////////////////以上是清屏功能///////////////////////////////////////

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

///////////////////////以下是测试8点写功能///////////////////////////////////////

//8点写模式下清屏DAT=0

CMD = 0x02DAT=0xff//前景色

CMD = 0x04DAT=0x00//背景色

CMD = 0x01

for( y=0y<y2y++ )//用前景色清屏

{

X_ADDR = 0

X_ADDR = 0

Y_ADDR = y

if( ((key==1)|(key==2))==0 )Y_ADDR = y/256

for( x=0x<(x2/8)x++ )DAT=0x55

}

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

for( y=0y<y2y++ )//用背景色清屏

{

X_ADDR = 0

X_ADDR = 0

Y_ADDR = y

if( ((key==1)|(key==2))==0 )Y_ADDR = y/256

for( x=0x<(x2/8)x++ )DAT=0x0f

}

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//8点写模式下写单色图片

CMD = 0x02DAT=0x00//前景色

CMD = 0x04DAT=0xff//背景色

CMD = 0x01

for (y=0y<80y++)

{

X_ADDR = 0

X_ADDR = 0

Y_ADDR = y

if( ((key==1)|(key==2))==0 )Y_ADDR = y/256

for ( n=0n<10n++) DAT = picture[y*10+n]

}

for(y=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//8点写模式下写汉字

CMD = 0x02DAT=0x00//前景色

CMD = 0x04DAT=0xff//背景色

CMD = 0x01

for ( n=0n<=15n++ )

{

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=0y<1y++){x=1while(x!=0)x++}

for(y=0y<1y++){x=1while(x!=0)x++}

//以下是测试单点写

CMD = 0x00

i=0

for(j=0j<x1j++)//20,x/40

{for (z=0z<y1z++)//24,y/20

{for (k=0k<20k++)

{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=0m<40m++)DAT = i

}

i++

}

}

for(y=0y<1y++){x=1while(x!=0)x++}

http://tieba.baidu.com/club/10621043/p/14619152

你现在看到的这两个函数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()函数进行显示

其实很简单的,只需用该几步就可以达到你想要的,不难~~

lua语言,Lua是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(PontificalCatholicUniversityofRiodeJaneiro)里的一个由RobertoIerusalimschy、WaldemarCeles和LuizHenriquedeFigueiredo三人所组成的研究小组于1993年开发的。其设计目的是为了通过灵活嵌入应用程序中从而为扰纤雀应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有 *** 作系统和平台上都竖旁可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。缓早所以Lua不适合作为开发独立应用程序的语言。Lua有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12233436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存