|
|

楼主 |
发表于 2012-11-19 00:38:06
|
显示全部楼层
弘毅 发表于 2012-11-18 18:03 
水乐天写了一个51移植到Arduino的帖子,你参考下,看看有没有启发~
http://www.geek-workshop.com/thread- ...
多谢指点。
又经过一天的调试,发现代码移植应该是对的,可惜由于某种未知原因,TFT仍然无法正常工作。这款TFT1.8只用5根线再加2根电源就可以驱动的,分辨率128x160,30圆左右,觉得蛮适合用arduino来玩的。我这儿贴一下淘宝链接:http://item.taobao.com/item.htm?id=17157919220,希望有同好能调通并分享,造福大家。
我的代码贴在下面,希望有帮助:
/********************************************************
3.3V接线说明:
1.下载本程序到单片机
2.插线(注意单片机的这几个管脚不要有外围电路):
GND 地
VCC 3.3V(裸屏必须用3.3V供电)
PIN_RESET= 8;
PIN_A0 = 9;
PIN_SDI = 10;
PIN_SCK = 11;
PIN_CS = 12;
(5V的单片机需要在信号线上串接1K电阻,电源必须保证3.3V)
********************************************************/
/*********************头文件及定义*************************/
/*******************接口定义*******************************/
unsigned int PIN_RESET= 2;
unsigned int PIN_A0 = 3;
unsigned int PIN_SDI = 4;
unsigned int PIN_SCK = 5;
unsigned int PIN_CS = 6;
unsigned int PIN_LED = 13;
/*****************数组声名**********************************/
/*
unsigned char map[];
unsigned char num[];
unsigned char palette[];
unsigned char Red[];
unsigned char Green[];
unsigned char Blue[];
unsigned char White[];
unsigned char pflower[];
unsigned char phill[];
*/
/*****************函数声名***********************************/
//void delay(unsigned int t);
//void keypress(void);
void write_cmd(unsigned char cmd);
void write_reg(unsigned char para1);
void write_dat(unsigned char data_h,unsigned char data_l);
void TFT_INIT(void);
void display_rgbw(unsigned char data_h,unsigned char data_l);
//void display_pic();
unsigned char palette[]=
{
0xf8,0x00,//red
0x07,0xe0,//green
0x00,0x1f,//blue
0xf8,0x1f,//purple
0xff,0xe0,//yellow
0x07,0xff,//cyan
0xff,0xff,//white
0xfc,0x08,//orange
};
/*****************主函数*************************************/
void setup()
{
// 设置数字口模式
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_RESET, OUTPUT);
pinMode(PIN_A0, OUTPUT);
pinMode(PIN_SDI, OUTPUT);
pinMode(PIN_SCK, OUTPUT);
pinMode(PIN_CS, OUTPUT);
// PIN_RESET
digitalWrite(PIN_RESET, LOW); //PIN_RESET=0;
delay(50);
digitalWrite(PIN_RESET, HIGH); //PIN_RESET=1;
delay(100);
// 初始化
TFT_INIT();
delay(100);
//*
digitalWrite(PIN_LED, HIGH); // light the led
display_rgbw(0x07,0xe0); //绿色
delay(2000);
while(true);
//*/
}
void loop()
{
display_rgbw(0xf8,0x00); //全屏红色
delay(1000);
if (true)
return;
display_rgbw(0x07,0xe0); //绿色
delay(2000);
display_rgbw(0x00,0x1f); //蓝色
delay(2000);
display_rgbw(0xff,0xff); //紫色
delay(2000);
display_rgbw(0x07,0xff); //cyan
delay(2000);
display_rgbw(0xff,0xff); //白色
delay(2000);
display_rgbw(0xfc,0x08); //桔黄色
delay(2000);
//display_col_colorbar();
//display_eprom(1);
//display_eprom(2);
//display_eprom(3);
//display_pic(); //显示图片
//delay(5000);
}
/*
void delay(unsigned int t)
{
unsigned int i,j;
for(j=0;j<t;j++)
for(i=0;i<250;i++);
}
*/
/******************DRIVE IC寄存器寻址 8080 SERIES*******************************/
void write_cmd(unsigned char cmd)
{
unsigned char bit8;
digitalWrite(PIN_A0, LOW); //PIN_A0=0; //发送命令
digitalWrite(PIN_CS, LOW); //PIN_CS=0;
for(bit8=0;bit8<8;bit8++)
{
digitalWrite(PIN_SCK, LOW); //PIN_SCK=0;
if((cmd&0x80)==0x80)
digitalWrite(PIN_SDI, HIGH); //PIN_SDI=1;
else
digitalWrite(PIN_SDI, LOW); //PIN_SDI=0;
digitalWrite(PIN_SCK, HIGH); //PIN_SCK=1;
cmd=(cmd<<1);
}
digitalWrite(PIN_CS, HIGH); //PIN_CS=1;
}
/*****************DRIVE IC寄存器写数据 8080 SERIES******************************/
void write_reg(unsigned char para1)
{
unsigned char bit8;
digitalWrite(PIN_A0, HIGH); //PIN_A0=1;
digitalWrite(PIN_CS, LOW); //PIN_CS=0;
for(bit8=0;bit8<8;bit8++)
{
digitalWrite(PIN_SCK, LOW); //PIN_SCK=0;
if((para1&0x80)==0x80)
digitalWrite(PIN_SDI, HIGH); //PIN_SDI=1;
else
digitalWrite(PIN_SDI, LOW); //PIN_SDI=0;
digitalWrite(PIN_SCK, HIGH); //PIN_SCK=1;
para1=(para1<<1);
}
digitalWrite(PIN_CS, HIGH); //PIN_CS=1;
}
/****************DRIVE IC GDRAM 写数据 16BITS 8080 SERIES*****************************/
void write_dat(unsigned char data_h, unsigned char data_l)
{
unsigned char bit8;
digitalWrite(PIN_A0, HIGH); //PIN_A0=1;
digitalWrite(PIN_CS, LOW); //PIN_CS=0;
for(bit8=0;bit8<8;bit8++) //High byte
{
digitalWrite(PIN_SCK, LOW); //PIN_SCK=0;
if((data_h&0x80)==0x80)
digitalWrite(PIN_SDI, HIGH); //PIN_SDI=1;
else
digitalWrite(PIN_SDI, LOW); //PIN_SDI=0;
digitalWrite(PIN_SCK, HIGH); //PIN_SCK=1;
data_h=(data_h<<1);
}
digitalWrite(PIN_CS, HIGH); //PIN_CS=1;
digitalWrite(PIN_CS, LOW); //PIN_CS=0;
for(bit8=0;bit8<8;bit8++) //Low byte
{
digitalWrite(PIN_SCK, LOW); //PIN_SCK=0;
if((data_l&0x80)==0x80)
digitalWrite(PIN_SDI, HIGH); //PIN_SDI=1;
else
digitalWrite(PIN_SDI, LOW); //PIN_SDI=0;
digitalWrite(PIN_SCK, HIGH); //PIN_SCK=1;
data_l=(data_l<<1);
}
digitalWrite(PIN_CS, HIGH); //PIN_CS=1;
}
/*****************DRIVE IC INITIALIZATION*******************/
void TFT_INIT()
{
write_cmd(0x11); //关闭睡眠,振荡器工作(start OSC)
delay(120);
write_cmd(0x3a); //Interface Pixel Format
write_reg(0x55);
//*
write_cmd(0x26); //Gamma Set
write_reg(0x04);
write_cmd(0xf2); //GAM_R_SEL
write_reg(0x01);
write_cmd(0xe0); //Positive Gamma Correction Setting
write_reg(0x3f);
write_reg(0x25);
write_reg(0x1c);
write_reg(0x1e);
write_reg(0x20);
write_reg(0x12);
write_reg(0x2a);
write_reg(0x90);
write_reg(0x24);
write_reg(0x11);
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_cmd(0xe1); //Negative Gamma Correction Setting
write_reg(0x20);
write_reg(0x20);
write_reg(0x20);
write_reg(0x20);
write_reg(0x05);
write_reg(0x00);
write_reg(0x15);
write_reg(0xa7);
write_reg(0x3d);
write_reg(0x18);
write_reg(0x25);
write_reg(0x2a);
write_reg(0x2b);
write_reg(0x2b);
write_reg(0x3a);
//*/
write_cmd(0xb1); //Frame Rate Control(In normal mode/Full colors)
write_reg(0x08);
write_reg(0x08);
write_cmd(0xb4); //Display Inversion Control
write_reg(0x07);
write_cmd(0xc0); //Power_Control1
write_reg(0x0a);
write_reg(0x02);
write_cmd(0xc1); //Power_Control2
write_reg(0x02);
write_cmd(0xc5); //VCOM_Control 1
write_reg(0x4f);
write_reg(0x5a);
write_cmd(0xc7); //VCOM Offset Control
write_reg(0x40);
write_cmd(0x2a); //配置MCU可操作的LCD内部RAM横坐标起始、结束参数
write_reg(0x00); //横坐标起始地址0x0000
write_reg(0x00);
write_reg(0x00); //横坐标结束地址0x007f(127)
write_reg(0x7f);
write_cmd(0x2b); //配置MCU可操作的LCD内部RAM纵坐标起始、结束参数
write_reg(0x00); //纵坐标起始地址0x0000
write_reg(0x00);
write_reg(0x00); //纵坐标结束地址0x009f(159)
write_reg(0x9f);
write_cmd(0x36); //配置MPU和DDRAM对应关系, Memory Access Control
write_reg(0xc0); //MX=1,MY=1
write_cmd(0xb7); //Source Driver Direction Control
write_reg(0x00);
// write_cmd(0xb8); //Gate Driver Direction Control
// write_reg(0x01);
write_cmd(0x29); //开启屏幕显示, Display On
write_cmd(0x2c); //设置为LCD接收数据/命令模式, Memory Write
}
/*****************显示单色画面*****************************************************/
void display_rgbw(unsigned char data_h,unsigned char data_l)
{
unsigned int i,j;
write_cmd(0x2a); //Horizontal Address Start Position
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_reg(0x7f);
write_cmd(0x2b); //Vertival Address end Position
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_reg(0x9f);
write_cmd(0x2c); //Memory Write
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
write_dat(data_h,data_l);
}
}
}
/****************显示图片(从单片机的DATA区)********************************/
/*
void display_pic()
{
unsigned int i,j,k=0;
write_cmd(0x2a); //Horizontal Address Start Position
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_reg(0x7f); //0--127水平地址结束
write_cmd(0x2b); //Vertival Address end Position
write_reg(0x00);
write_reg(0x00);
write_reg(0x00);
write_reg(0x9f); //0--159,垂直地址结
write_cmd(0x2c);
for(i=0;i<160;i++)
{
for(j=0;j<128;j++)
{
write_dat(PIC[k],PIC[k+1]);
k++; k++;
}
}
}
*/
|
|