代碼例程
TFT.zip
開(kāi)發(fā)資料中的例程有些瑕疵,上面是整理后的例程,修改了一些參數(shù),也添加了不少函數(shù),函數(shù)都有對(duì)應(yīng)的注釋?zhuān)灰ㄐ乃既タ匆粦?yīng)該是能看懂怎么用的。此外,這個(gè)例程也可以作為你們工程的模板,往上面添加一些函數(shù)、完善一下內(nèi)容,差不多就能做出一個(gè)作品了
TFT模塊
介紹
TFT的全稱(chēng):Thin Film Transistor,中文名字是薄膜晶體管?,F(xiàn)在我們所使用的筆記本電腦以及臺(tái)式電腦都運(yùn)用了相對(duì)先進(jìn)的TFT顯示屏,這類(lèi)顯示屏都由液晶像素點(diǎn)組成,并由集成在像素點(diǎn)后面的薄膜晶體管驅(qū)動(dòng)
不難看出,TFT也是屬于LCD液晶屏的一種,它的每一液晶像素點(diǎn)都是由集成在其后的薄膜晶體管來(lái)驅(qū)動(dòng)的
使用要點(diǎn)
減少刷新像素
我們使用到是一塊1.8寸TFT LCD,分辨率是128X160,驅(qū)動(dòng)芯片是ST7735S,支持SPI串口
雖然分辨率不高,但對(duì)于一款51單片機(jī)來(lái)說(shuō),這已經(jīng)是在負(fù)重前行了,可以計(jì)算一下,128X160=20480個(gè)像素,每個(gè)像素是16位彩色數(shù)據(jù),也就是刷新一個(gè)屏幕的數(shù)據(jù)量是40960Byte=40KB,這對(duì)于單片機(jī)的運(yùn)行頻率來(lái)說(shuō),無(wú)疑是個(gè)大數(shù)目了,燒錄開(kāi)發(fā)資料中的刷屏例程可以看出,刷新一幀畫(huà)面需要5s~6s,這是不能接受的,為了提高畫(huà)面刷新頻率,必須要盡量減少刷新的內(nèi)容,而對(duì)于固定的背景和元素,只在初始化時(shí)刷新的,因此設(shè)計(jì)得花里胡哨也沒(méi)事
上圖是鏈接中的例程運(yùn)行效果,以一款貪吃蛇游戲?yàn)槔澇陨咴谶\(yùn)動(dòng)時(shí),本質(zhì)上只有頭和尾需要做出改變,因此只需要把最后一格換成背景色,最前面一格前添加一個(gè)小元素,就可以完成一個(gè)流動(dòng)幀,這樣刷新的幀率完全足夠
坐標(biāo)系
/*************************************************
函數(shù)名:LCD_Set_Region
功能:設(shè)置lcd顯示區(qū)域,在此區(qū)域?qū)扅c(diǎn)數(shù)據(jù)自動(dòng)換行
入口參數(shù):xy起點(diǎn)和終點(diǎn)
返回值:無(wú)
*************************************************/
void Lcd_SetRegion(unsigned int x_start,unsigned int y_start,unsigned int x_end,unsigned int y_end)
{
Lcd_WriteIndex(0x2a);
Lcd_WriteData(0x02);
Lcd_WriteData(x_start+2);
Lcd_WriteData(0x02);
Lcd_WriteData(x_end+2);
Lcd_WriteIndex(0x2b);
Lcd_WriteData(0x01);
Lcd_WriteData(y_start+1);
Lcd_WriteData(0x01);
Lcd_WriteData(y_end+1);
Lcd_WriteIndex(0x2c);
}
這是開(kāi)發(fā)資料中 TFT 驅(qū)動(dòng)代碼的一個(gè)函數(shù),用于設(shè)置寫(xiě)入數(shù)據(jù)的范圍,如果燒錄可以看到,屏幕邊緣會(huì)出現(xiàn)一些不能刷新的地方,在 TFT.zip
中,對(duì)這塊內(nèi)容做了修改,把+1/+2刪掉了
使用時(shí)需要注意,Lcd_SetRegion函數(shù)參數(shù)傳入的坐標(biāo)是從0開(kāi)始的,每個(gè)坐標(biāo)點(diǎn)對(duì)應(yīng)一個(gè)像素點(diǎn),也就是最大坐標(biāo)點(diǎn)為(127,159)
其他需要傳入坐標(biāo)數(shù)據(jù)的Lcd函數(shù),都會(huì)引用到Lcd_SetRegion,因此使用時(shí),要知道像素與坐標(biāo)的對(duì)應(yīng)關(guān)系
游戲設(shè)計(jì)
對(duì)象
typedef struct
{
u8 life;
u8 headX;
u8 headY;
u8 snakeX[300];
u8 snakeY[300];
u8 length;
int dir;
int tpdir;
u8 foodX;
u8 foodY;
}Snake;
游戲設(shè)計(jì)最重要的就是對(duì)象,這方面是面向?qū)ο缶幊陶Z(yǔ)言的長(zhǎng)處,而對(duì)于C語(yǔ)言,結(jié)構(gòu)體也能體現(xiàn)這一點(diǎn)。上面代碼是一個(gè)貪吃蛇對(duì)象(結(jié)構(gòu)體),可以非常直觀地表達(dá)貪吃蛇的狀態(tài),這在游戲設(shè)計(jì)中是很重要的,尤其是多對(duì)象的情況(現(xiàn)在大概率用不到),學(xué)會(huì)使用結(jié)構(gòu)體,對(duì)變量的管理和內(nèi)容的設(shè)計(jì)都會(huì)帶來(lái)很大便利
VS Code
這里就推薦使用vs code作為代碼的編輯器,因?yàn)樗淖詣?dòng)補(bǔ)全真的很香,尤其是在使用結(jié)構(gòu)體變量時(shí)
如果你有VS Code,只需安裝一個(gè)插件Keil Assistant,再配置一下路徑就可以用了文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-422266.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-422266.html
到了這里,關(guān)于單片機(jī)開(kāi)發(fā)教程5——51單片機(jī)驅(qū)動(dòng)TFT彩屏的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!