|
网上买的屏:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5019585&bbs_page_no=1&search_mode=4&search_text=dongls&bbs_id=9999
我用的是ATMEGA88
#include <avr/io.h>
#include <util/delay.h>
//定义液晶屏接口
#define CTRLP PORTB
#define CTRLDDR DDRB
#define DATAP PORTD
#define DATAIN PIND
#define DATADDR DDRD
#define CS PB1 //片选
#define RST PB0 //复位
#define RS PB2 //数据/命令选择
#define WR PB3 //写
#define RD PB4 //读
//液晶屏控制端口初始化
void TFT_PortInit(void)
{
DATADDR = 0xFF; //8位数据端口配置为输出
CTRLDDR |= _BV(RST) | _BV(CS) | _BV(RS) | _BV(WR) | _BV(RD); //控制端口配置为输出
CTRLP |= _BV(RST) | _BV(CS) | _BV(RS) | _BV(WR) | _BV(RD); //控制端口初始高电平1
}
//发送命令
void TFT_WriteReg(unsigned int index)
{
CTRLP |= (1 << RD);
CTRLP &= ~(1 << RS);
CTRLP &= ~(1 << CS);
CTRLP &= ~(1 << WR);
DATAP = (index >> 8);
CTRLP |= (1 << WR);
CTRLP &= ~(1 << WR);
DATAP = (index & 0xFF);
CTRLP |= (1 << WR);
CTRLP |= (1 << CS);
}
//发送数据
void TFT_WriteData(unsigned int Data)
{
CTRLP |= (1 << RD);
CTRLP |= (1 << RS);
CTRLP &= ~(1 << CS);
CTRLP &= ~(1 << WR);
DATAP = (Data >> 8);
CTRLP |= (1 << WR);
CTRLP &= ~(1 << WR);
DATAP = (Data & 0xFF);
CTRLP |= (1 << WR);
CTRLP |= (1 << CS);
}
//写命令数据
void TFT_Write(unsigned int index, unsigned int Data)
{
TFT_WriteReg(index);
TFT_WriteData(Data);
}
//定义坐标
static void TFT_SetPos(unsigned int x0, unsigned int x1, unsigned int y0, unsigned int y1)
{
TFT_Write(0x0050,x0);
TFT_Write(0x0051,x1);
TFT_Write(0x0052,y0);
TFT_Write(0x0053,y1);
TFT_Write(0x0020,x0);
TFT_Write(0x0021,y0);
TFT_WriteReg(0x0022);//LCD_WriteCMD(GRAMWR);
}
//清屏
void TFT_ClearScreen(unsigned int bColor)
{
unsigned int i,j;
TFT_SetPos(0,240,0,320);//320x240
for (i=0;i<320;i++)
{
for (j=0;j<240;j++)
TFT_WriteData(bColor);
}
}
//TFT屏初始化
void TFT_Init(void)
{
TFT_PortInit();
CTRLP &= ~(1 << RST);
_delay_ms(100);
CTRLP |= (1 << RST);
_delay_ms(50);//根据不同晶振速度可以调整延时,保障稳定显示
TFT_Write(0x0001, 0x0100); //SS = 1; SM = 0; 输出转变方向:S720到S1
TFT_Write(0x0002, 0x0700); //EOR = 1; B/C = 0; 行反转
TFT_Write(0x0003, 0x1030); //水平写入方向得以更新,BGR = 1(转换RGB数据到BGR) ??
TFT_Write(0x0004, 0x0000); //不调整大小 RSZ = 00; RCH = 00; RCV = 00
TFT_Write(0x0008, 0x0207); //设定正面和背面门廓期的行号:BP = 7; FP = 2
TFT_Write(0x0009, 0x0000); //set non-display area refresh cycle ISC[3:0]
TFT_Write(0x000A, 0x0000); //FMARK function : 1 frame
TFT_Write(0x000C, 0x0000); //RGB 显示接口控制(18位RGB接口,DB17~DB0, 内部系统时钟,系统接口访问GRAM,读写周期为 1 FRAME)
TFT_Write(0x000D, 0x0000); //FRAME marker position
TFT_Write(0x000F, 0x0000); //RGB interface polarity
//power on sequence VGHVGL
TFT_Write(0x0010, 0x0000); //SAP(得先禁用,后启用) BT[3:0] AP SLP STB
TFT_Write(0x0011, 0x0007); //DC1[2:0], DC0[2:0], VC[2:0]
TFT_Write(0x0012, 0x0000); //VREGOUT voltage
TFT_Write(0x0013, 0x1300); //VDV[4:0] for VCOM amplitude (0.7) 0x1300 - 1.0
// TFT_InitData(0x0007,0x0001);
_delay_ms(300); // Dis-charge capacitor power voltage
//vgh
TFT_Write(0x0010, 0x1290); //1690//SAP, BT[3:0], AP, DSTB, SLP, STB
TFT_Write(0x0011, 0x0527); //227 //DC1[2:0], DC0[2:0], VC[2:0]
// _delay_ms(50);
//vregiout
TFT_Write(0x0012, 0x0018); //1D//Internal reference voltage= Vci;
// _delay_ms(50);
TFT_Write(0x0013, 0x0800); //1500//Set VDV[4:0] for VCOM amplitude
TFT_Write(0x0029, 0x0014); //10// Set VCM[5:0] for VCOMH
TFT_Write(0x002B, 0x000B); //D// Set Frame Rate
_delay_ms(50);
TFT_Write(0x0020, 0x0000);
TFT_Write(0x0021, 0x0000);
//gamma
//**************************************
// TFT_Write(0x0030, 0x0007);
//***************************************
TFT_Write(0x0031, 0x0007);
TFT_Write(0x0032, 0x0002);// 0006
TFT_Write(0x0035, 0x0206);
TFT_Write(0x0036, 0x0408);
TFT_Write(0x0037, 0x0507);
TFT_Write(0x0038, 0x0200);//0200
TFT_Write(0x0039, 0x0707);
TFT_Write(0x003C, 0x0504);// 0504
TFT_Write(0x003D, 0x0F02); //0F02
//ram
TFT_Write(0x0050, 0x0000); // Horizontal GRAM Start Address
TFT_Write(0x0051, 0x00EF); // Horizontal GRAM End Address
TFT_Write(0x0052, 0x0000); // Vertical GRAM Start Address
TFT_Write(0x0053, 0x013F); // Vertical GRAM Start Address
TFT_Write(0x0060, 0x2700); // Gate Scan Line
TFT_Write(0x0061, 0x0001); // NDL,VLE, REV
TFT_Write(0x006A, 0x0000); // set scrolling line
//Partial Display Control
TFT_Write(0x0080, 0x0000);
TFT_Write(0x0081, 0x0000);
TFT_Write(0x0082, 0x0000);
TFT_Write(0x0083, 0x0000);
TFT_Write(0x0084, 0x0000);
TFT_Write(0x0085, 0x0000);
//panel control
TFT_Write(0x0090, 0x0010);
TFT_Write(0x0092, 0x0000); //0900 //6 clocks
TFT_Write(0x0093, 0x0003);
TFT_Write(0x0095, 0x0110);
TFT_Write(0x0097, 0x0000);
TFT_Write(0x0098, 0x0000);
TFT_Write(0x0007, 0x0133); // 262K color and display ON 0133
_delay_ms(200);
//TFT_SetPos(0, 240, 0, 320);
TFT_ClearScreen(0xF800);
}
初始化时:如果加TFT_Write(0x0030, 0x0007);这一句的话是白屏(只背光亮),如果不加这一句的话是花屏.
请教各位,如何修改?先谢谢回贴的各位. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|