?? s6d0139.c
字號(hào):
/****************************************************************************************
* 文件名:LCDDRIVE.C
* 功能:TFT4137液晶模塊驅(qū)動(dòng)。驅(qū)動(dòng)芯片為S6D0139 (片內(nèi)172800字節(jié)GRAM,即240*320*18/8),
*
* RGB對(duì)應(yīng)值(16位數(shù)據(jù),分First,Second兩次傳輸,Fd7--Fd0,Sd7--Sd0):
* Fd7--Fd3 R色
* Fd2--Fd0,Sd7--Sd5 G色
* Sd4--Sd0 B色
* 寫(xiě)操作時(shí)地址計(jì)數(shù)器會(huì)自動(dòng)增長(zhǎng),而讀操作則不會(huì)自動(dòng)增長(zhǎng)。讀操作時(shí),讀第2個(gè)數(shù)
* 據(jù)才是有效的數(shù)據(jù)
****************************************************************************************/
#include "config.h"
#define USE_GPIO_BUS 0
#if USE_GPIO_BUS == 1
// 總線控制口定義
#define GP_nCS0 (1<<30)
#define GP_nCS1 (0x80000000)
#define GP_nWE (1<<25)
#define GP_nOE (1<<24)
#define GP_A1 (1<<1)
#define GP_A14 (1<<14)
#define GP_A15 (1<<15)
// 總線控制信號(hào)函數(shù)
//#define SET_nCS() FIO4SET = GP_nCS0
//#define CLR_nCS() FIO4CLR = GP_nCS0
#define SET_nCS() FIO4SET = GP_nCS1
#define CLR_nCS() FIO4CLR = GP_nCS1
#define SET_nWE() FIO4SET = GP_nWE
#define CLR_nWE() FIO4CLR = GP_nWE
#define SET_nOE() FIO4SET = GP_nOE
#define CLR_nOE() FIO4CLR = GP_nOE
#define OP_DR() FIO4SET = GP_A1
#define OP_IR() FIO4CLR = GP_A1
#define WR_DATA8(dat) FIO3MASK = 0xFFFFFF00; FIO3PIN = dat
/*
void GPIO_test(void)
{
SET_nCS();
CLR_nCS();
SET_nWE();
CLR_nWE();
SET_nOE();
CLR_nOE();
OP_DR();
OP_IR();
SET_nCS();
SET_nWE();
SET_nOE();
OP_DR();
WR_DATA8(0x05);
WR_DATA8(0xA0);
}
*/
/*******************************************************
* 名稱: DelayuS
* 功能: 軟件延時(shí)(uS級(jí),與系統(tǒng)時(shí)鐘有關(guān))。
* 入口參數(shù): no 延時(shí)控制(uint32),值越大延時(shí)越長(zhǎng)
* 出口參數(shù): 無(wú)
*******************************************************/
//void DelayuS(uint32 no)
//{// uint32 i;
// for(; no>0; no--)
// {
// for(i=0; i<1; i++);
// }
//}
#define DelayuS(s)
/*******************************************************
* 名稱: TftSendCom
* 功能: 向TFT液晶模塊發(fā)送命令字。
* 入口參數(shù): com 命令字(uint16)
* 出口參數(shù): 無(wú)
*******************************************************/
void TftSendCom(uint16 com)
{ uint8 data;
OP_IR(); // 發(fā)命令
SET_nOE();
CLR_nCS();
data = (com >> 8);
WR_DATA8(data);
CLR_nWE();
DelayuS(2);
SET_nWE();
DelayuS(1);
SET_nCS();
DelayuS(1);
CLR_nCS();
data = com & 0x00FF;
WR_DATA8(data);
CLR_nWE();
DelayuS(2);
SET_nWE();
DelayuS(1);
SET_nCS();
DelayuS(1);
}
/*******************************************************
* 名稱: TftSendDat
* 功能: 向TFT液晶模塊發(fā)送數(shù)據(jù)。
* 入口參數(shù): dat 待發(fā)送的數(shù)據(jù)(uint16)
* 出口參數(shù): 無(wú)
*******************************************************/
void TftSendDat(uint16 dat)
{ uint8 data;
OP_DR(); // 發(fā)數(shù)據(jù)
SET_nOE();
CLR_nCS();
data = (dat >> 8);
WR_DATA8(data);
CLR_nWE();
DelayuS(2);
SET_nWE();
DelayuS(1);
SET_nCS();
DelayuS(1);
CLR_nCS();
data = (dat & 0x00FF);
WR_DATA8(data);
CLR_nWE();
DelayuS(2);
SET_nWE();
DelayuS(1);
SET_nCS();
DelayuS(1);
}
/*******************************************************
* 名稱: TftRcvDat
* 功能: 讀取TFT液晶模塊的數(shù)據(jù)。
* 入口參數(shù): 無(wú)
* 出口參數(shù): 返回值即是讀出的數(shù)據(jù)
*******************************************************/
uint16 TftRcvDat(void)
{ uint16 ret, bak;
FIO3DIR = 0x00000000;
OP_DR(); // 讀數(shù)據(jù)
SET_nWE();
CLR_nCS();
CLR_nOE();
DelayuS(2);
bak = FIO3PIN & 0x000000FF;
ret = (bak << 8);
SET_nOE();
SET_nCS();
DelayuS(1);
CLR_nCS();
CLR_nOE();
DelayuS(2);
bak = FIO3PIN & 0x000000FF;
ret = ret | bak;
SET_nOE();
SET_nCS();
FIO3DIR = 0x000000FF;
DelayuS(1);
return(ret);
}
#else
/*******************************************************
* 名稱: TftSendCom
* 功能: 向TFT液晶模塊發(fā)送命令字。
* 入口參數(shù): com 命令字(uint16)
* 出口參數(shù): 無(wú)
*******************************************************/
void TftSendCom(uint16 com)
{ uint8 data;
data = (com >> 8);
S6D0139_IR = data;
data = com & 0x00FF;
S6D0139_IR = data;
}
/*******************************************************
* 名稱: TftSendDat
* 功能: 向TFT液晶模塊發(fā)送數(shù)據(jù)。
* 入口參數(shù): dat 待發(fā)送的數(shù)據(jù)(uint16)
* 出口參數(shù): 無(wú)
*******************************************************/
void TftSendDat(uint16 dat)
{ uint8 data;
data = (dat >> 8);
S6D0139_DR = data;
data = (dat & 0x00FF);
S6D0139_DR = data;
}
/*******************************************************
* 名稱: TftRcvDat
* 功能: 讀取TFT液晶模塊的數(shù)據(jù)。
* 入口參數(shù): 無(wú)
* 出口參數(shù): 返回值即是讀出的數(shù)據(jù)
*******************************************************/
uint16 TftRcvDat(void)
{ uint16 ret, bak;
bak = S6D0139_DR;
ret = (bak << 8);
bak = S6D0139_DR;
ret = ret | bak;
return(ret);
}
#endif // USE_GPIO_BUS
/*******************************************************
* 名稱: TftSetAddr
* 功能: 設(shè)置數(shù)據(jù)地址指針(坐標(biāo)值)。
* 入口參數(shù): x 橫坐標(biāo)的值 (0-239)
* y 縱坐標(biāo)的值 (0-319)
* 出口參數(shù): 設(shè)置正確返回TRUE,參數(shù)超出范圍返回FALSE
*******************************************************/
uint8 TftSetAddr(uint16 x, uint16 y)
{ TftSendCom(SET_ADDR_X); // 設(shè)置地址低8位
TftSendDat(x);
TftSendCom(SET_ADDR_Y); // 設(shè)置地址高9位
TftSendDat(y);
if((x<240) && (y<320)) return(TRUE);
else return(FALSE);
}
/*******************************************************
* 名稱: TftSetWrite
* 功能: 設(shè)置數(shù)據(jù)地址指針(坐標(biāo)值),并發(fā)送寫(xiě)數(shù)據(jù)命令。
* 接著不斷的寫(xiě)入數(shù)據(jù)即可,GRAM地址會(huì)自動(dòng)增加。
* 入口參數(shù): x 橫坐標(biāo)的值 (0-239)
* y 縱坐標(biāo)的值 (0-319)
* 出口參數(shù): 設(shè)置正確返回TRUE,參數(shù)超出范圍返回FALSE
*******************************************************/
uint8 TftSetWrite(uint16 x, uint16 y)
{ uint8 ret;
ret = TftSetAddr(x, y);
TftSendCom(WR_RD_DATA); // 寫(xiě)數(shù)據(jù)
return(ret);
}
/*******************************************************
* 名稱: TftSetWindow
* 功能: 設(shè)置數(shù)據(jù)填充窗口大小。
* 入口參數(shù): x0,y0 窗口左上角從標(biāo)
* x1,y1 窗口右上角從標(biāo)
* 出口參數(shù): 設(shè)置正確返回TRUE,參數(shù)錯(cuò)誤返回FALSE
*******************************************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -