一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【青風(fēng)帶你學(xué)stm32f051系列教程】第17課 點(diǎn)亮LCD液晶屏 | 愛板網(wǎng)

 weikong66 2013-03-28
【青風(fēng)帶你學(xué)stm32f051系列教程】第17課 點(diǎn)亮LCD液晶屏
2013年03月25日 ? 教程 ? 評(píng)論數(shù) 1 ? 被圍觀 224+

在嵌入式開發(fā)中,目前對(duì)于人機(jī)交互比較流行使用TFT-LCD彩屏,這是由于觸摸屏的大量普及,價(jià)格上已經(jīng)到達(dá)比較低的程度。他的用戶體驗(yàn)方面是要遠(yuǎn)遠(yuǎn)勝過之前的一些單色屏,并且加入觸摸之后,可以省略按鈕,用于人機(jī)交互。

TFT-LCD屬于真彩顯示屏,目前手機(jī),掌上游戲機(jī),平板電腦等都在使用TFT。

QF_STM32F051評(píng)估板使用的觸摸屏的控制器為ILI9328,采用16BIT并口輸入數(shù)據(jù),分辨率達(dá)到:320X240.分辨率其實(shí)是屏幕所具有的點(diǎn)的個(gè)數(shù)。230x240=76800個(gè)點(diǎn)。而每個(gè)點(diǎn)都是由三原色“紅 綠 藍(lán)”RGB組成,也就是說每個(gè)點(diǎn)可以配置成不同的顏色了。那么配置驅(qū)動(dòng)采用ILI9328驅(qū)動(dòng)器。ILI9328一般存在四種總線接口控制:

1. I80接口配置

2. VSYNC接口配置

3. SPI接口配置

4. RGB接口配置

其實(shí)是采用串口和并口的不同配置啟動(dòng)方式。為了保證驅(qū)動(dòng)速度,我們一般采用I80接口配置方式。本開發(fā)采用16位方式。

下面就是16位驅(qū)動(dòng)RPG的寄存器配置方式:

R5_R0為紅色,G5_G0為綠色,B5_B0配置為藍(lán)色。

硬件準(zhǔn)備:

端口配置:

硬件連接:PB0-PB7---DB0-DB7 低8位

PC0-PC7---DB8-DB7 高8位

PD2---WR PC12---RD PC11---CS PC10---RS PB11---CM

其中WR :寫信號(hào)輸入引腳,低電平時(shí)有效。

RD :讀信號(hào)輸入引腳,低電平時(shí)有效。

CS:TFT液晶屏的片選信號(hào),低電平時(shí)有效。

RS:寫數(shù)據(jù)和寫命令選擇引腳。取高寫數(shù)據(jù),取低寫命令。

CM:選擇8BIT和16BIT選擇引腳。

軟件準(zhǔn)備:

對(duì)于軟件配置我們采用分層的方式:

這種方式雖然較為復(fù)雜,但是對(duì)于最底層的硬件驅(qū)動(dòng)不同而已,上次的圖形層和控制則不需要變換,可以很方便的移植到其他的顯示屏上。這一節(jié)就是來講解Display Driver的編寫問題。

硬件連接好后,底層TFT-LCD的驅(qū)動(dòng)是和硬件密切相關(guān)的,TFT-LCD液晶屏實(shí)際上是一個(gè)16位/8位的并行的數(shù)據(jù)接口。開發(fā)板上通過CM管腳選擇了16位輸入。ILI9328的驅(qū)動(dòng)簡(jiǎn)單的說包含兩個(gè)重要的函數(shù):第一:我們確定向那個(gè)寄存器寫數(shù)據(jù)。第二:確定寄存器后,決定寫什么樣的數(shù)據(jù)。

這兩個(gè)函數(shù)編寫代碼如下,由于直接操作IO寄存器比較簡(jiǎn)單,這里面我選擇了直接寫寄存器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void LCD_WR_DATA(uint16_t val)//寫數(shù)據(jù)
{
 Set_Rs;//開寄存器選擇,選擇寫數(shù)據(jù)
 Clr_Cs; //片選置低
 GPIOB->ODR &= 0xff00;
 GPIOC->ODR &= 0xff00; //把PB,PC數(shù)據(jù)端口全部置低
 GPIOB->ODR|=((val)&(0x00ff));//寫入低8位
 GPIOC->ODR|=(val>>8);//寫入高八位
 Clr_nWr; //開寫使能
 Set_nWr; //關(guān)使能
 Set_Cs; //關(guān)片選
}
void LCD_WR_REG(uint16_t cmd)//寫命令
{
 Clr_Rs;;//開寄存器選擇,選擇寫命令
 Clr_Cs;
 GPIOB->ODR &= 0xff00;
 GPIOC->ODR &= 0xff00;
 GPIOB->ODR |=((cmd)&(0x00ff));
 GPIOC->ODR|=(cmd>>8);
Clr_nWr;
Set_nWr;
 Set_Cs;
}

下面來說明下上面兩個(gè)函數(shù):寫命令和寫數(shù)據(jù)進(jìn)程大體相當(dāng),不同的在于最開始通過Rs置低或者置高來進(jìn)行選擇,取高寫數(shù)據(jù),取低寫命令。GPIOB->ODR采用ODR寄存器,表示IO口輸出值。

對(duì)ILI9328Q驅(qū)動(dòng)器常用的命令如下表:

那么要向某個(gè)確定寄存器寫入數(shù)據(jù)可以編寫成如下,直接調(diào)用上面兩個(gè)子函數(shù):

1
2
3
4
5
void LCD_WR_REG_DATA(uint16_t reg, uint16_t data)
{
 LCD_WR_REG(reg);//確定要寫入的寄存器
 LCD_WR_DATA(data);//確定寫入寄存器的數(shù)據(jù)
 }

下面我們就可以開始對(duì)TFT-LCD進(jìn)行初始化,主要是多ILI9328驅(qū)動(dòng)器進(jìn)行初始化,首先初始化IO端口,然后按照ILI9328數(shù)據(jù)手冊(cè)上的要求進(jìn)行開機(jī)設(shè)置,詳細(xì)信息請(qǐng)查看PDF。那么我們?cè)O(shè)置LCD初始化函數(shù)為:

1
void LCD_init (void)

下面編寫一個(gè)進(jìn)入LCD刷屏子函數(shù),要求在屏幕上顯示8條不同的顏色條紋。不同顏色的數(shù)據(jù)值如下面所列,我們只需要選擇在不同區(qū)域填充不同顏色就可以。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define RED 0XF800 //紅色
#define GREEN 0X07E0 //綠色
#define BLUE 0X001F //藍(lán)色
#define WHITE 0XFFFF //白色
#define BLACK 0X0000 //黑色
#define YELLOW 0XFFE0 //黃色
#define ORANGE 0XFC08 //橙色
#define GRAY 0X8430 //灰色
#define LGRAY 0XC618 //淺灰色
#define DARKGRAY 0X8410 //深灰色
#define PORPO 0X801F //紫色
#define PINK 0XF81F //粉紅色
#define GRAYBLUE 0X5458 //灰藍(lán)色
#define LGRAYBLUE 0XA651 //淺灰藍(lán)色
#define DARKBLUE 0X01CF //深灰藍(lán)色
#define LIGHTBLUE 0X7D7C //淺藍(lán)色
  
void GLCD_Test(void)
{
 uint16_t i,j;
 Clr_Cs; //TFT進(jìn)行片選
 LCD_WR_REG_DATA(0x20, 0);//確定寫入的X坐標(biāo)
 LCD_WR_REG_DATA(0x21, 0);//確定其寫入的Y坐標(biāo)
 LCD_WR_REG(0x22);//開始寫入GRAM
  
 for(i=0;i<320;i++)
 for(j=0;j<240;j++)//循環(huán)寫顏色
 {
 if(i>279)LCD_WR_DATA(0x0000);
 else if(i>239)LCD_WR_DATA(0x001f);
 else if(i>199)LCD_WR_DATA(0x07e0);
 else if(i>159)LCD_WR_DATA(0x07ff);
 else if(i>119)LCD_WR_DATA(0xf800);
 else if(i>79)LCD_WR_DATA(0xf81f);
 else if(i>39)LCD_WR_DATA(0xffe0);
 else LCD_WR_DATA(0xffff);
 }
 Set_Cs;
}

那么上面一個(gè)簡(jiǎn)單的刷屏程序就出爐了,當(dāng)然我們還可以寫一些小的函數(shù)驗(yàn)證液晶屏的好壞。

主函數(shù)可以直接進(jìn)行調(diào)用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "stm32f0xx.h"
#include "ili9328.h"
  
void Delay() //延遲函數(shù)
{
 int i,j;
 for(i=0;i<5000;i++)
 {
 for(j=0;j<5000;j++);
 }
}
  
int main()
{
 SystemInit(); // 時(shí)鐘配置
 LCD_init(); // 液晶顯示器初始化
 GLCD_Test();
 Delay();
LCD_Clear(WHITE); // 全屏顯示白色
 POINT_COLOR = BLACK; // 定義筆的顏色為黑色
 BACK_COLOR = WHITE; // 定義筆的背景色為白色
 LCD_DrawRectage(20, 20, 180, 210, DARKBLUE); // 畫一個(gè)深藍(lán)色邊框的矩形
 LCD_Fill(60, 20, 179, 209, PINK); // 畫填充矩形
 POINT_COLOR = LIGHTBLUE; // 定義筆的顏色為淺藍(lán)色
 LCD_DrawCircle(100, 100, 25); // 畫一個(gè)圓
 LCD_ShowChar(120,20,'A');
 LCD_ShowString(140,20,"hello");
 while(1)
 {}
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日韩中文字幕狠狠人妻| 欧美一区二区三区喷汁尤物| 欧美一级日韩中文字幕| 国产精品第一香蕉视频| 深夜少妇一区二区三区| 一区二区福利在线视频| 精品国模一区二区三区欧美| 天堂网中文字幕在线视频| 日本婷婷色大香蕉视频在线观看| 亚洲国产四季欧美一区| 欧美久久一区二区精品| 天堂网中文字幕在线观看| 久久午夜福利精品日韩| 欧美日韩在线视频一区| 蜜桃传媒在线正在播放| 日韩黄片大全免费在线看| 五月天丁香婷婷狠狠爱| 免费特黄一级一区二区三区| 精品欧美日韩一二三区| 亚洲欧美日本成人在线| 国产精品免费视频视频| 亚洲一级二级三级精品| 国产黄色高清内射熟女视频| 麻豆欧美精品国产综合久久| 日韩免费av一区二区三区| 欧美日韩国产黑人一区| 欧美亚洲三级视频在线观看| 99国产成人免费一区二区| 日韩1区二区三区麻豆| 亚洲精品高清国产一线久久| 亚洲熟妇熟女久久精品| 亚洲一区在线观看蜜桃| 亚洲av一区二区三区精品| 亚洲精品熟女国产多毛| 三级高清有码在线观看| 日韩一区二区三区高清在| 国产欧美高清精品一区| 午夜精品成年人免费视频| 欧美日韩少妇精品专区性色| 国产精品免费不卡视频| 免费播放一区二区三区四区|