TFT彩屏幕如何翻转文字90度显示。

lutao050306 2014-02-07 04:41:28
如题所示。屏幕现在只能竖着看,我想横着显示内容 TFT为德飞来开发板给的。


/*------------------------------------------------
包含头文件
------------------------------------------------*/
#include"reg52.h"
#include"tft.h"
/*------------------------------------------------
定义单片机引脚
------------------------------------------------*/
sbit CS=P2^2; //片选
sbit RES=P2^1; //复位
sbit RS=P2^4; //数据/命令选择
sbit RW=P2^5;
#define DataPort P0 //数据口使用DataPort
//unsigned char code pic[];
#define X_MAX 240
#define Y_MAX 400
/*------------------------------------------------
清屏函数
------------------------------------------------*/
void ClearScreen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,X_MAX-1,0,Y_MAX-1);//
for (i=0;i<Y_MAX;i++)
{

for (j=0;j<X_MAX;j++)
Write_Data_U16(bColor);

}
}
/*------------------------------------------------
写8x16字符函数
------------------------------------------------*/
#include "8X16.h"
void LCD_PutChar8x16(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(x,x+8-1,y,y+16-1);
for(i=0; i<16;i++) {
unsigned char m=Font8x16[c*16+i];
for(j=0;j<8;j++) {
if((m&0x80)==0x80) {
Write_Data_U16(fColor);
}
else {
Write_Data_U16(bColor);
}
m<<=1;
}
}
}

/*------------------------------------------------
写字符串函数
------------------------------------------------*/
void LCD_PutChar(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor) {

LCD_PutChar8x16( x, y, c, fColor, bColor );
}

/*------------------------------------------------
写16x16汉字函数
------------------------------------------------*/
#include "GB1616.h" //16*16汉字字模

void PutGB1616(unsigned short x, unsigned short y, unsigned char c[2], unsigned int fColor,unsigned int bColor){
unsigned int i,j,k;

LCD_SetPos(x, x+16-1,y, y+16-1);

for (k=0;k<64;k++) { //64标示自建汉字库中的个数,循环查询内码
if ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])){
for(i=0;i<32;i++) {
unsigned short m=codeGB_16[k].Msk[i];
for(j=0;j<8;j++) {
if((m&0x80)==0x80) {
Write_Data_U16(fColor);
}
else {
Write_Data_U16(bColor);
}
m<<=1;
}
}
}
}
}
/*------------------------------------------------
写字符串函数
------------------------------------------------*/
void LCD_PutString(unsigned short x, unsigned short y, unsigned char *s, unsigned int fColor, unsigned int bColor) {
unsigned char l=0;
while(*s) {
if( *s < 0x80)
{
LCD_PutChar(x+l*8,y,*s,fColor,bColor);
s++;l++;
}
else
{
PutGB1616(x+l*8,y,(unsigned char*)s,fColor,bColor);
s+=2;l+=2;
}
}
}
/*------------------------------------------------
指定区域显示指定RGB颜色
------------------------------------------------*/
void Show_RGB (unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1,unsigned int Color)
{
unsigned int i,j;
LCD_SetPos(x0,x1,y0,y1);
for (i=y0;i<=y1;i++)
{
for (j=x0;j<=x1;j++)
Write_Data_U16(Color);
}
}

/*------------------------------------------------
显示彩条
------------------------------------------------*/
void show_colour_bar (void)//8条色彩

{ unsigned char GAP=50;
int V,H;
LCD_SetPos(0,X_MAX-1,0,Y_MAX-1);

for(H=0;H<X_MAX;H++)
{
for(V=0;V<GAP*1;V++)
Write_Data_U16(0xf800);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*1;V<GAP*2;V++)
Write_Data_U16(0x07e0);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*2;V<GAP*3;V++)
Write_Data_U16(0x001f);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*3;V<GAP*4;V++)
Write_Data_U16(0xffe0);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*4;V<GAP*5;V++)
Write_Data_U16(0xf81f);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*5;V<GAP*6;V++)
Write_Data_U16(0x07ff);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*6;V<GAP*7;V++)
Write_Data_U16(0xffff);
}

for(H=0;H<X_MAX;H++)
{
for(V=GAP*7;V<GAP*8;V++)
Write_Data_U16(0x0000);
}

}

/*------------------------------------------------
写16位数据函数
------------------------------------------------*/
void Write_Data_U16(unsigned int y)
{
unsigned char m,n;
m=y>>8;
n=y;
LCD_Write_Data(m);
LCD_Write_Data(n);

}
/*------------------------------------------------
写指令函数
------------------------------------------------*/
void LCD_Write_Command(unsigned char u)
{

CS=0;
RS=0;
DataPort=u;
RW=0;
RW=1;
CS=1;
}

/*------------------------------------------------
写数据函数
------------------------------------------------*/
void LCD_Write_Data(unsigned char u)
{
CS=0;
RS=1;
DataPort=u;
RW=0;
RW=1;
CS=1;
}
WriteCom(a,b)
{
LCD_Write_Command(a);
LCD_Write_Command(b);
}

WriteData(a,b)
{
LCD_Write_Data(a);
LCD_Write_Data(b);
}
/*------------------------------------------------
延时函数
------------------------------------------------*/
void delayms(unsigned int count)
{
int i,j;
for(i=0;i<count;i++)
{
for(j=0;j<260;j++);
}
}



/*------------------------------------------------
液晶初始化代码
------------------------------------------------*/

void TFT_Initial(void)
{
// VCI=2.80V
//************* Reset LCD Driver ****************//
RES = 1;
delayms(1); // delaymsms 1ms
RES = 0;
delayms(10); // delaymsms 10ms // This delaymsms time is necessary
RES = 1;
delayms(50); // delaymsms 50 ms
// Synchronization after reset
WriteCom(0x06,0x06);WriteData(0X00,0X00);
delayms(100);
WriteCom(0x00,0x07);WriteData(0X00,0X01);
delayms(5);
WriteCom(0x01,0x10);WriteData(0X00,0X01);
delayms(5);
WriteCom(0x01,0x00);WriteData(0X17,0XB0);
WriteCom(0x01,0x01);WriteData(0X01,0X47);
WriteCom(0x01,0x02);WriteData(0X01,0X9D);
WriteCom(0x01,0x03);WriteData(0X36,0X00);
WriteCom(0x02,0x81);WriteData(0X00,0X10);
delayms(5);
WriteCom(0x01,0x02);WriteData(0X01,0XBD);
delayms(5);
WriteCom(0x00,0x00);WriteData(0X00,0X00);
WriteCom(0x00,0x01);WriteData(0X01,0X00);
WriteCom(0x00,0x02);WriteData(0X01,0X00);
WriteCom(0x00,0x03);WriteData(0X10,0XB0);
WriteCom(0x00,0x06);WriteData(0X00,0X00);
WriteCom(0x00,0x08);WriteData(0X02,0X02);

WriteCom(0x00,0x09);WriteData(0X00,0X01);
WriteCom(0x00,0x0B);WriteData(0X00,0X10);
WriteCom(0x00,0x0C);WriteData(0X00,0X00);
WriteCom(0x00,0x0F);WriteData(0X00,0X00);
WriteCom(0x00,0x07);WriteData(0X00,0X01);

WriteCom(0x00,0x10);WriteData(0X00,0X11);
WriteCom(0x00,0x11);WriteData(0X03,0X01);
WriteCom(0x00,0x12);WriteData(0X03,0X00);
WriteCom(0x00,0x20);WriteData(0X02,0X1E);
WriteCom(0x00,0x21);WriteData(0X02,0X02);

WriteCom(0x00,0x90);WriteData(0X08,0X00);
WriteCom(0x00,0x92);WriteData(0X00,0X00);
WriteCom(0x01,0x00);WriteData(0X12,0XB0);
delayms(10);
WriteCom(0x01,0x01);WriteData(0X01,0X47);
delayms(10);
WriteCom(0x01,0x02);WriteData(0X01,0XBE);
delayms(10);
WriteCom(0x01,0x03);WriteData(0X2B,0X00);
delayms(10);
WriteCom(0x01,0x07);WriteData(0X00,0X00);
delayms(10);
WriteCom(0x01,0x10);WriteData(0X00,0X01);
delayms(10);
WriteCom(0x02,0x10);WriteData(0X00,0X00);
WriteCom(0x02,0x11);WriteData(0X00,0XEF);
WriteCom(0x02,0x12);WriteData(0X00,0X00);
WriteCom(0x02,0x13);WriteData(0X01,0X8F);
WriteCom(0x02,0x00);WriteData(0X00,0X00);

WriteCom(0x02,0x01);WriteData(0X00,0X00);
WriteCom(0x02,0x80);WriteData(0X00,0X00);
WriteCom(0x02,0x81);WriteData(0X00,0X07);
WriteCom(0x02,0x82);WriteData(0X00,0X00);
delayms(10);
WriteCom(0x03,0x00);WriteData(0X01,0X01);
WriteCom(0x03,0x01);WriteData(0X09,0X29);
WriteCom(0x03,0x02);WriteData(0X0F,0X2C);
WriteCom(0x03,0x03);WriteData(0X2C,0X0F);
WriteCom(0x03,0x04);WriteData(0X29,0X09);
WriteCom(0x03,0x05);WriteData(0X01,0X01);
WriteCom(0x03,0x06);WriteData(0X19,0X04);
WriteCom(0x03,0x07);WriteData(0X04,0X19);
WriteCom(0x03,0x08);WriteData(0X06,0X05);

WriteCom(0x03,0x09);WriteData(0X04,0X03);
WriteCom(0x03,0x0A);WriteData(0X0E,0X06);
WriteCom(0x03,0x0B);WriteData(0X0E,0X00);
WriteCom(0x03,0x0C);WriteData(0X00,0X0E);
WriteCom(0x03,0x0D);WriteData(0X06,0X0E);
WriteCom(0x03,0x0E);WriteData(0X03,0X04);
WriteCom(0x03,0x0F);WriteData(0X05,0X06);
WriteCom(0x04,0x00);WriteData(0X35,0X00);
WriteCom(0x04,0x01);WriteData(0X00,0X01);

WriteCom(0x04,0x04);WriteData(0X00,0X00);
WriteCom(0x05,0x00);WriteData(0X00,0X00);
WriteCom(0x05,0x01);WriteData(0X00,0X00);
WriteCom(0x05,0x02);WriteData(0X00,0X00);
WriteCom(0x05,0x03);WriteData(0X00,0X00);
WriteCom(0x05,0x04);WriteData(0X00,0X00);
WriteCom(0x05,0x05);WriteData(0X00,0X00);
WriteCom(0x06,0x00);WriteData(0X00,0X00);
WriteCom(0x06,0x06);WriteData(0X00,0X00);
WriteCom(0x06,0xF0);WriteData(0X00,0X00);
WriteCom(0x07,0xF0);WriteData(0X54,0X20);
WriteCom(0x07,0xF3);WriteData(0X28,0X0F);
WriteCom(0x07,0xF4);WriteData(0X00,0X22);
WriteCom(0x07,0xF5);WriteData(0X00,0X01);
WriteCom(0x07,0xF0);WriteData(0X00,0X00);
WriteCom(0x00,0x07);WriteData(0X01,0X73);
delayms(5);
WriteCom(0x00,0x07);WriteData(0X00,0X61);
delayms(5);
WriteCom(0x00,0x07);WriteData(0X01,0X73);
delayms(500);
WriteCom(0x02,0x02);
}

/*------------------------------------------------
函数名称:LCD_DefineDispWindow
功 能:定义显示窗体
参 数:x0: 窗体中X坐标中较小者
x1: 窗体中X坐标中较大者
y0: 窗体中Y坐标中较小者
y1: 窗体中Y坐标中较大者
返 回 值:无
------------------------------------------------*/
static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
{

WriteCom(0x02,0x10);WriteData(x0>>8,x0);
WriteCom(0x02,0x11);WriteData(x1>>8,x1);
WriteCom(0x02,0x12);WriteData(y0>>8,y0);
WriteCom(0x02,0x13);WriteData(y1>>8,y1);

WriteCom(0x02,0x00);WriteData(0X00,0X00);
WriteCom(0x02,0x01);WriteData(0X00,0X00);
WriteCom(0x02,0x02);
}


...全文
1352 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵转世 2014-06-03
  • 打赏
  • 举报
回复
设置芯片寄存器应该可行的。
shenshunxiao 2014-06-03
  • 打赏
  • 举报
回复
显示屏寄存器有个横向显示和纵向显示设置寄存器,设置下就可以了
zhang_chg 2014-06-03
  • 打赏
  • 举报
回复
看看TFT的PDF上面写着那
依然听风 2014-02-12
  • 打赏
  • 举报
回复
要么改字库,重新横向取模; 要么改函数,转置显示
of123 2014-02-11
  • 打赏
  • 举报
回复
所有的点阵字库都是以列为单元,也就是说,字库数据中的每一个字节就是一列的点阵。 转置 90 度有两种方法: 1 事先转换字库数据,行列互换,生成一个新的横向字库。 2 在显示的时候实现转换,要改写底层显示函数,增加转置处理。
vc8fans 2014-02-08
  • 打赏
  • 举报
回复
实践过这要在驱动的低层该,上面改是不行的,
zhxianbin 2014-02-08
  • 打赏
  • 举报
回复
看芯片手册吧
haoziccy 2014-02-08
  • 打赏
  • 举报
回复
引用 2 楼 wanyeye 的回复:
个人觉得 坐标基准 调整个90度应该就可以了吧 瞎猜的 或者,从生成字模数据下手。。。
“或者,从生成字模数据下手。。。”+1 字模图片旋转90度后再取模, 反正屛有认识字,最终在屛上显示的都图片。
色郎中 2014-02-07
  • 打赏
  • 举报
回复
个人觉得 坐标基准 调整个90度应该就可以了吧 瞎猜的 或者,从生成字模数据下手。。。
lutao050306 2014-02-07
  • 打赏
  • 举报
回复
主函数



/*------------------------------------------------
                包含头文件
------------------------------------------------*/
#include"reg52.h"
#include"tft.h"
/*------------------------------------------------
             		主函数
------------------------------------------------*/
void  main(void)
{   
//LCD_Write_Command(0x0003);
//LCD_Write_Data(0x1018);
TFT_Initial();//初始化

while(1)
{
//ClearScreen(0x0000);
//ClearScreen(0x00ff);
//ClearScreen(0xff00);


//show_colour_bar();	//显示彩条
//ClearScreen(0xff00);
//Show_RGB (0,240,0,320,0xf800);//刷出320x240的小区域
ClearScreen(0xff00);
LCD_PutString(40,40,"图片",0x0000,0xffff);
LCD_PutString(40,60,"I LOVE MY JOB ",0x0000,0xf800);
LCD_PutString(10,80,"上海朗译电子科技有限公司",0x0000,0xf800);
LCD_PutString(40,100,"专业技术支持论坛",0x07e0,0xf800);
LCD_PutString(40,120,"专业开发板工控板",0x001f,0xf800);
LCD_PutString(40,140,"1234567890",0x001f,0xf800);
LCD_PutString(0,160,"abcdefghijklmnopqistuvwxyz",0x001f,0xf800);
LCD_PutString(0,180,"`,./<>';:[]{}\|?)(-=+*&^%$",0x001f,0xf800);	
while(1);       	//刷完停止
	}
}


27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧