![]() |
我也是點不亮![]() |
改好沒? |
手冊上的命令地址是8位,你定義成16了;所以你發出命令的時候就有1字節成數據了 手冊45頁R00H 寫命令地址是00H,數據是B505H 你寫成16位就成了:地址00H,數據00B505H 你對照手冊把這些錯誤修改再試吧 |
小貓貓愛吃魚 發表于 2018-11-10 10:42 有普中的其他TFT,沒有這個原理圖,初始化代碼一行行看,水平有限,也沒有發現什么!感覺時序好像有點不對! |
這是數據手冊!搞不定的就喜歡在這個上面糾纏! |
3.28 MB, 下載次數: 41
dyjsc 發表于 2018-11-10 14:04 淘來的板子,沒有例程!上述初始化程序是從正點原子的stm32上改編的,但是沒有點亮! |
#ifndef __R61505V_H #define __R61505V_H #include <reg52.h> //---重定義關鍵詞---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif #ifndef ulong #define ulong unsigned long #endif //---8080工作模式定義使用的IO口---// sbit TFT_WR = P2^5; //MPU向LCD寫入數據控制線,上升沿寫入 sbit TFT_RD = P2^6; //MPU從LCD讀入數據控制線 sbit TFT_CS = P2^7; //片選信號線(如果有多片組合,可有多條片選信號線),低電平有效 sbit TFT_RS = P3^2; //數據/指令選擇線(1:數據讀寫,0:命令讀寫) sbit TFT_RST = P3^3; //復位 #define TFT_DATAPORT P0 //---定義顏色的宏---// #define WHITE 0xFFFF #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define MAGENTA 0xF81F #define GREEN 0x07E0 #define CYAN 0x7FFF #define YELLOW 0xFFE0 //定義顏色的宏 //---定義屏的大小---// #define TFT_XMAX ((uint)239)// //設置TFT屏的大小 #define TFT_YMAX ((uint)319)// //-- 聲明全局函數 --// void TFT_WriteCmd(uint cmd); void TFT_WriteData(uint dat); void TFT_Init(void); void TFT_SetWindow(uint xStart, uint yStart, uint xEnd, uint yEnd); void TFT_ClearScreen(uint color); void TFT_WriteColorData(uint color); void WriteData(uchar i); void WriteComm(uchar i); void DispColor(unsigned int color); #endif |
/******************************************************** 工作模式:8080 *********************************************************/ #include "R61505V.H" /**************************************************************************** 寫8位命令 ****************************************************************************/ void WriteComm(uchar i) { TFT_WR = 1; //初始化WR TFT_CS = 0; //打開片選 TFT_RD = 1; //選擇寫 TFT_RS = 0; //選擇發送命令 TFT_DATAPORT = i; TFT_WR = 0; //寫入時序 TFT_WR = 1; TFT_CS = 1; //關閉片選 } /**************************************************************************** 寫16位命令 ****************************************************************************/ void TFT_WriteCmd(uint cmd) { uchar cmdH, cmdL; cmdH = cmd >> 8; cmdL = cmd & 0x00FF; WriteComm(cmdH); WriteComm(cmdL); } /**************************************************************************** 寫8位數據 ****************************************************************************/ void WriteData(uchar dat) { TFT_WR = 1; //初始化WR TFT_CS = 0; //打開片選 TFT_RD = 1; //選擇寫 TFT_RS = 1; //選擇發送數據 TFT_DATAPORT = dat; TFT_WR = 0; //寫入時序 TFT_WR = 1; TFT_CS = 1; //關閉片選 } /**************************************************************************** 寫16位數據 ****************************************************************************/ void TFT_WriteData(uint dat) { uchar datH, datL; datH = dat >> 8; datL = dat & 0xFF; WriteData(datH); WriteData(datL); } /**************************************************************************** *函數名:TFT_WriteCmdData *輸 入:cmd:命令 * :dat:數據 *輸 出: *功 能:寫命令, 寫數據。 ****************************************************************************/ void TFT_WriteCmdData(uint cmd, uint dat) { WriteComm(cmd); TFT_WriteData(dat); } void delay500(void) { uint i; for(i=500; i>0; i--) ; } /**************************************************************************** *函數名:TFT_Init *輸 入: *輸 出: *功 能:初始化TFT。 ****************************************************************************/ void TFT_Init(void) { TFT_RST = 1; delay500(); TFT_RST = 0; delay500(); TFT_RST = 1; delay500(); TFT_WriteCmdData(0x0007,0x0000); delay500(); TFT_WriteCmdData(0x0012,0x011C);//0x011A why need to set several times? TFT_WriteCmdData(0x00A4,0x0001);//NVM TFT_WriteCmdData(0x0008,0x000F); TFT_WriteCmdData(0x000A,0x0008); TFT_WriteCmdData(0x000D,0x0008); //伽馬校正 TFT_WriteCmdData(0x0030,0x0707); TFT_WriteCmdData(0x0031,0x0007); //0x0707 TFT_WriteCmdData(0x0032,0x0603); TFT_WriteCmdData(0x0033,0x0700); TFT_WriteCmdData(0x0034,0x0202); TFT_WriteCmdData(0x0035,0x0002); //?0x0606 TFT_WriteCmdData(0x0036,0x1F0F); TFT_WriteCmdData(0x0037,0x0707); //0x0f0f 0x0105 TFT_WriteCmdData(0x0038,0x0000); TFT_WriteCmdData(0x0039,0x0000); TFT_WriteCmdData(0x003A,0x0707); TFT_WriteCmdData(0x003B,0x0000); //0x0303 TFT_WriteCmdData(0x003C,0x0007); //?0x0707 TFT_WriteCmdData(0x003D,0x0000); //0x1313//0x1f08 delay500(); TFT_WriteCmdData(0x0007,0x0001); TFT_WriteCmdData(0x0017,0x0001);//開啟電源 delay500(); //電源配置 TFT_WriteCmdData(0x0010,0x17A0); TFT_WriteCmdData(0x0011,0x0217);//reference voltage VC[2:0] Vciout = 1.00*Vcivl TFT_WriteCmdData(0x0012,0x011E);//0x011c //Vreg1out = Vcilvl*1.80 is it the same as Vgama1out ? TFT_WriteCmdData(0x0013,0x0F00);//VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl TFT_WriteCmdData(0x002A,0x0000); TFT_WriteCmdData(0x0029,0x000A);//0x0001F Vcomh = VCM1[4:0]*Vreg1out gate source voltage?? TFT_WriteCmdData(0x0012,0x013E);// 0x013C power supply on //Coordinates Control// TFT_WriteCmdData(0x0050,0x0000);//0x0e00 TFT_WriteCmdData(0x0051,0x00EF); TFT_WriteCmdData(0x0052,0x0000); TFT_WriteCmdData(0x0053,0x013F); //Pannel Image Control// TFT_WriteCmdData(0x0060,0x2700); TFT_WriteCmdData(0x0061,0x0001); TFT_WriteCmdData(0x006A,0x0000); TFT_WriteCmdData(0x0080,0x0000); //Partial Image Control// TFT_WriteCmdData(0x0081,0x0000); TFT_WriteCmdData(0x0082,0x0000); TFT_WriteCmdData(0x0083,0x0000); TFT_WriteCmdData(0x0084,0x0000); TFT_WriteCmdData(0x0085,0x0000); //Panel Interface Control// TFT_WriteCmdData(0x0090,0x0013);//0x0010 frenqucy TFT_WriteCmdData(0x0092,0x0300); TFT_WriteCmdData(0x0093,0x0005); TFT_WriteCmdData(0x0095,0x0000); TFT_WriteCmdData(0x0097,0x0000); TFT_WriteCmdData(0x0098,0x0000); TFT_WriteCmdData(0x0001,0x0100); TFT_WriteCmdData(0x0002,0x0700); TFT_WriteCmdData(0x0003,0x1038);//掃描方向 上->下 左->右 TFT_WriteCmdData(0x0004,0x0000); TFT_WriteCmdData(0x000C,0x0000); TFT_WriteCmdData(0x000F,0x0000); TFT_WriteCmdData(0x0020,0x0000); TFT_WriteCmdData(0x0021,0x0000); TFT_WriteCmdData(0x0007,0x0021); delay500(); TFT_WriteCmdData(0x0007,0x0061); delay500(); TFT_WriteCmdData(0x0007,0x0173); delay500(); // LCD_Display_Dir(0); //默認為豎屏 // LCD_LED=1; //點亮背光 // LCD_Clear(WHITE); } /**************************************************************************** *函數名:TFT_SetWindow *輸 入:xStart:起始X坐標 * :yStart:起始Y坐標 * :xEnd:結束X坐標 * :yEnd:結束Y坐標 *輸 出: *功 能:設置要操作的窗口。 ****************************************************************************/ void TFT_SetWindow(uint xStart, uint yStart, uint xEnd, uint yEnd) { WriteComm(0x2A);//P94 set_column_address: 2Ah TFT_WriteData(xStart); TFT_WriteData(xEnd); // WriteData(xStart>>8); // WriteData(xStart&0xff); // WriteData(xEnd>>8); // WriteData(xEnd&0xff); WriteComm(0x2b);//P96 set_page_address: 2Bh TFT_WriteData(yStart); TFT_WriteData(yEnd); // WriteData(yStart>>8); // WriteData(yStart&0xff); // WriteData(yEnd>>8); // WriteData(yEnd&0xff); TFT_WriteCmd(0x2c); //P98 write_memory_start: 2Ch } /**************************************************************************** *函數名:TFT_WriteColorData *輸 入:16位顏色數據 *輸 出: *功 能:同寫入16位數據一樣 ****************************************************************************/ void TFT_WriteColorData(uint color) { TFT_CS = 0; TFT_RS = 1; TFT_RD = 1; TFT_DATAPORT = color >>8;//寫高八位 TFT_WR = 0; //寫入時序 TFT_WR = 1; TFT_DATAPORT = color; TFT_WR = 0; //寫入時序 TFT_WR = 1; TFT_CS = 1; } /**************************************************************************** *函數名:GUI_Clearcreen *輸 入:backColor:清屏顏色 *輸 出: *功 能:清屏并涂上顏色。 ****************************************************************************/ void TFT_ClearScreen(uint color) { uint i, j; TFT_SetWindow(0, 0, TFT_XMAX, TFT_YMAX); //作用區域 for(i=0; i < TFT_YMAX+1 ; i++) { for (j=0; j < TFT_XMAX+1; j++) //逐點寫入 { TFT_WriteColorData(color); } } } |
你購買液晶時應該有例程吧 |
同樣想知道。若能,n多手機就可以改裝了 |