日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]人機(jī)交互是嵌入式系統(tǒng)必須具有的功能。比較簡(jiǎn)單的人機(jī)交互有按鍵、LED、蜂鳴器,稍微復(fù)雜的有7段數(shù)碼管和點(diǎn)陣。但如今這些都不能滿足人們的需求了,所以又出現(xiàn)了LCD和觸摸屏技術(shù)。s3c2440具有LCD和觸摸屏接口,可以很

人機(jī)交互是嵌入式系統(tǒng)必須具有的功能。比較簡(jiǎn)單的人機(jī)交互有按鍵、LED、蜂鳴器,稍微復(fù)雜的有7段數(shù)碼管和點(diǎn)陣。但如今這些都不能滿足人們的需求了,所以又出現(xiàn)了LCD和觸摸屏技術(shù)。s3c2440具有LCD和觸摸屏接口,可以很好的連接LCD和觸摸屏。這篇文章主要介紹TFT型LCD的用法。

要想正確使用LCD,必須注意兩點(diǎn):1、時(shí)序;2、顯示緩存區(qū)。

1、時(shí)序
LCD一般需要三個(gè)時(shí)序信號(hào):VSYNC、HSYNC和VCLK。VSYNC是垂直同步信號(hào),在每進(jìn)行一個(gè)幀(即一個(gè)屏)的掃描之前,該信號(hào)就有效一次,由該信號(hào)可以確定LCD的場(chǎng)頻,即每秒屏幕刷新的次數(shù)(單位Hz)。HSYNC是水平同步信號(hào),在每進(jìn)行一行的掃描之前,該信號(hào)就有效一次,由該信號(hào)可以確定LCD的行頻,即每秒屏幕從左到右掃描一行的次數(shù)(單位Hz)。VCLK是像素時(shí)鐘信號(hào)。
s3c2440處理LCD的時(shí)鐘源是HCLK,通過(guò)寄存器LCDCON1中的CLKVAL可以調(diào)整VCLK頻率大小,它的公式為:
VCLK=HCLK÷[(CLKVAL+1)×2]
例如,HCLK的頻率為100MHz,要想驅(qū)動(dòng)像素時(shí)鐘信號(hào)為6.4MHz的LCD屏,則通過(guò)上式計(jì)算CLKVAL值,結(jié)果CLKVAL為6.8,取整后(值為6)放入寄存器LCDCON1中相應(yīng)的位置即可。由于CLKVAL進(jìn)行了取整,因此我們把取整后的值代入上式,重新計(jì)算VCLK,得到VCLK=7.1MHz。
按理說(shuō),對(duì)于一個(gè)已知尺寸(即水平顯示尺寸HOZVAL和垂直顯示尺寸LINEVAL已知)的LCD屏,只要確定了VCLK值,行頻和場(chǎng)頻就應(yīng)該知道了。但這樣還不行的,因?yàn)樵诿恳粠瑫r(shí)鐘信號(hào)中,還會(huì)有一些與屏顯示無(wú)關(guān)的時(shí)鐘出現(xiàn),這就給確定行頻和場(chǎng)頻帶來(lái)了一定的復(fù)雜性。如在HSYNC信號(hào)先后會(huì)有水平同步信號(hào)前肩(HFPD)和水平同步信號(hào)后肩(HBPD)出現(xiàn),在VSYNC信號(hào)先后會(huì)有垂直同步信號(hào)前肩(VFPD)和垂直同步信號(hào)后肩(VBPD)出現(xiàn),在這些信號(hào)時(shí)序內(nèi),不會(huì)有有效像素信號(hào)出現(xiàn),另外HSYNC和VSYNC信號(hào)有效時(shí),其電平要保持一定的時(shí)間,它們分別叫做水平同步信號(hào)脈寬HSPW和垂直同步信號(hào)脈寬VSPW,這段時(shí)間也不能有像素信號(hào)。因此計(jì)算行頻和場(chǎng)頻時(shí),一定要包括這些信號(hào)。HBPD、HFPD和HSPW的單位是一個(gè)VCLK的時(shí)間,而VSPW、VFPD和VBPD的單位是掃描一行所用的時(shí)間。在s3c2440中,所有的這些信號(hào)(VSPW、VFPD、VBPD、LINEVAL、HBPD、HFPD、HSPW和HOZVAL)都是實(shí)際值減1的結(jié)果。這些值是通過(guò)寄存器LCDCON2、LCDCON3和LCDCON4來(lái)配置,只要把這些值配置成與所要驅(qū)動(dòng)的LCD中相關(guān)內(nèi)容的數(shù)據(jù)一致即可。例如,我們所要顯示的LCD屏大小為320×240,因此HOZVAL=320-1,LINEVAL=240-1。水平同步信號(hào)的脈寬、前肩和后肩分別為30、20和38,則HSPW=30-1,HFPD=20-1,HBPD=38-1;垂直同步信號(hào)的脈寬、前肩和后肩分別為3、12和15,則VSPW=3-1,VFPD=12-1,VBPD=15-1。
下面我們就具體計(jì)算一下行頻(HSF)和場(chǎng)頻(VSF):
HSF=VCLK÷[(HSPW+1)+(HSPD+1)+(HFPD+1)+(HOZVAL+1)]
=7.1÷408=17.5kHz
VSF=HSF÷[(VSPW+1)+(VBPD+1)+(VFPD+1)+(LINEVAL+1)]
=17.5÷270=64.8Hz
在有些情況下,s3c2440的LCD時(shí)鐘信號(hào)的默認(rèn)極性與所控制的LCD時(shí)鐘信號(hào)的極性相反,這時(shí)可以通過(guò)寄存器LCDCON5的相關(guān)位來(lái)改變某些時(shí)鐘信號(hào)的極性。

2、顯示緩存區(qū)
只要把所要顯示的數(shù)據(jù)放入顯示緩存區(qū)內(nèi),就可以在屏幕上呈現(xiàn)內(nèi)容。該緩存區(qū)是我們自己編程時(shí)開(kāi)辟的一段內(nèi)存區(qū)。一般我們是通過(guò)定義一個(gè)與屏幕尺寸大小相同的二維數(shù)組來(lái)開(kāi)辟該空間的,這樣控制屏幕內(nèi)容會(huì)方便一些,如當(dāng)屏幕的尺寸為320×240時(shí),可以定義該緩存區(qū)為L(zhǎng)CD_BUFFER[240][320]。由于s3c2440支持16位和24位的非調(diào)色板真彩色的TFT型LCD模式,而24位顏色模式是用32位數(shù)據(jù)來(lái)表示的,所以前面定義的那個(gè)二維數(shù)據(jù)的數(shù)據(jù)類型應(yīng)該是半字整型或全字整型的。例如,在24位顏色模式下,我們想要在尺寸大小為320×240屏幕的中心處設(shè)置為白色像素,則:LCD_BUFFER[120][160]=0xffffffff。
在s3c2440中,寄存器LCDSADDR1和LCDSADDR2用于設(shè)置顯示緩存區(qū),即把我們定義的那個(gè)二維數(shù)組告訴s3c2440。其中LCDBANK的9位數(shù)據(jù)指定LCD的BANK,即顯示緩存區(qū)的第30位到第22位地址;LCDBASEU的21位數(shù)據(jù)指定了LCD的基址,即顯示緩存區(qū)開(kāi)始地址的第21位到第1位;LCDBASEL的21位數(shù)據(jù)指定了LCD的尾址,即顯示緩存區(qū)結(jié)束地址的第21位到第1位。例如,我們想要在尺寸為320×240的屏幕上顯示24位顏色,定義的顯示緩存區(qū)數(shù)組為L(zhǎng)CD_BUFFER[240][320],則LCDBANK等于LCD_BUFFER的第30位到第22位數(shù)據(jù)值(因?yàn)長(zhǎng)CD_BUFFER表示的就是數(shù)組的首地址),LCDBASEU等于LCD_BUFFER的第21位到第1位數(shù)據(jù)值,由于是用32位數(shù)據(jù)表示24為顏色,因此每個(gè)像素值是4個(gè)字節(jié),所以LCDBASEL等于(LCD_BUFFER+(240×320×4))結(jié)果的第21位到第1位的數(shù)據(jù)值。另外寄存器LCDSADDR3有兩個(gè)內(nèi)容:OFFSIZE和PAGEWIDTH。OFFSIZE用于虛擬屏幕的偏移長(zhǎng)度,如果我們不使用虛擬屏幕,就把它置為0;PAGEWIDTH定義了視口的寬,單位是半字,如在上面的例子中,PAGEWIDTH應(yīng)該為320×32÷16。

下面我們給出一段具體的TFT型LCD顯示的實(shí)例,其中,屏幕的大小為320×240,所設(shè)置的顏色為24位真彩色模式。

#define U32 unsigned int
#define M5D(n) ((n) & 0x1fffff) //用于設(shè)置顯示緩存區(qū)時(shí),取低21位地址

#define rGPCCON (*(volatile unsigned *)0x56000020) //Port C control
#define rGPCDAT (*(volatile unsigned *)0x56000024) //Port C data
#define rGPCUP (*(volatile unsigned *)0x56000028) //Pull-up control C

#define rGPDCON (*(volatile unsigned *)0x56000030) //Port D control
#define rGPDDAT (*(volatile unsigned *)0x56000034) //Port D data
#define rGPDUP (*(volatile unsigned *)0x56000038) //Pull-up control D

#define rGPGCON (*(volatile unsigned *)0x56000060) //Port G control
#define rGPGDAT (*(volatile unsigned *)0x56000064) //Port G data
#define rGPGUP (*(volatile unsigned *)0x56000068) //Pull-up control G

#define rLCDCON1 (*(volatile unsigned *)0x4d000000) //LCD control 1
#define rLCDCON2 (*(volatile unsigned *)0x4d000004) //LCD control 2
#define rLCDCON3 (*(volatile unsigned *)0x4d000008) //LCD control 3
#define rLCDCON4 (*(volatile unsigned *)0x4d00000c) //LCD control 4
#define rLCDCON5 (*(volatile unsigned *)0x4d000010) //LCD control 5
#define rLCDSADDR1(*(volatile unsigned *)0x4d000014) //STN/TFT Frame buffer start address 1
#define rLCDSADDR2(*(volatile unsigned *)0x4d000018) //STN/TFT Frame buffer start address 2
#define rLCDSADDR3(*(volatile unsigned *)0x4d00001c) //STN/TFT Virtual screen address set
#define rLCDINTMSK(*(volatile unsigned *)0x4d00005c) //LCD Interrupt mask
#define rTCONSEL (*(volatile unsigned *)0x4d000060) //LPC3600 Control --- edited by junon

#define LCD_WIDTH 320 //屏幕的寬
#define LCD_HEIGHT240 //屏幕的高

//垂直同步信號(hào)的脈寬、后肩和前肩
#define VSPW (3-1)
#define VBPD (15-1)
#define VFPD (12-1)
//水平同步信號(hào)的脈寬、后肩和前肩
#define HSPW (30-1)
#define HBPD (38-1)
#define HFPD (20-1)
//顯示尺寸
#define LINEVAL(LCD_HEIGHT-1)
#define HOZVAL (LCD_WIDTH-1)

//for LCDCON1
#define CLKVAL_TFT 6 //設(shè)置時(shí)鐘信號(hào)
#define MVAL_USED 0 //
#define PNRMODE_TFT 3 //TFT型LCD
#define BPPMODE_TFT 13 //24位TFT型LCD

//for LCDCON5
#define BPP24BL 0 //32位數(shù)據(jù)表示24位顏色值時(shí),低位數(shù)據(jù)有效,高8位無(wú)效
#define INVVCLK 0 //像素值在VCLK下降沿有效
#define INVVLINE 1 //翻轉(zhuǎn)HSYNC信號(hào)
#define INVVFRAME 1 //翻轉(zhuǎn)VSYNC信號(hào)
#define INVVD 0 //正常VD信號(hào)極性
#define INVVDEN 0 //正常VDEN信號(hào)極性
#define PWREN 1 //使能PWREN信號(hào)
#define BSWP 0 //顏色數(shù)據(jù)字節(jié)不交換
#define HWSWP 0 //顏色數(shù)據(jù)半字不交換
//定義顯示緩存區(qū)
volatile U32 LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];

//延時(shí)程序
void delay(int a)
{
int k;
for(k=0;k ;
}

//繪制屏幕背景顏色,顏色為c
void Brush_Background( U32 c)
{
int x,y ;

for( y = 0 ; y < LCD_HEIGHT ; y++ )
{
for( x = 0 ; x < LCD_WIDTH ; x++ )
{
LCD_BUFFER[y][x] = c ;
}
}
}

//畫(huà)實(shí)心圓,顏色為c。圓心在屏幕中心,半徑為80個(gè)像素
void Draw_Circular(U32 c)
{
int x,y ;
int tempX,tempY;
int radius = 80;
int SquareOfR = radius*radius;

for( y = 0 ; y < LCD_HEIGHT ; y++ )
{
for( x = 0 ; x < LCD_WIDTH ; x++ )
{
if(y<=120 && x<=160)
{
tempY=120-y;
tempX=160-x;
}
else if(y<=120&& x>=160)
{
tempY=120-y;
tempX=x-160;
}
else if(y>=120&& x<=160)
{
tempY=y-120;
tempX=160-x;
}
else
{
tempY = y-120;
tempX = x-160;
}

if ((tempY*tempY+tempX*tempX)<=SquareOfR)
LCD_BUFFER[y][x] = c ;
}
}
}

void Main(void)
{
//配置LCD相關(guān)引腳
rGPCUP= 0x00000000;
rGPCCON = 0xaaaa02a9;
rGPDUP= 0x00000000;
rGPDCON=0xaaaaaaaa;

rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(PNRMODE_TFT<<5)|(BPPMODE_TFT<<1)|0;
rLCDCON2=(VBPD<<24)|(LINEVAL<<14)|(VFPD<<6)|(VSPW);
rLCDCON3=(HBPD<<19)|(HOZVAL<<8)|(HFPD);
rLCDCON4=(HSPW);
rLCDCON5 = (BPP24BL<<12) | (INVVCLK<<10) | (INVVLINE<<9) | (INVVFRAME<<8) | (0<<7) | (INVVDEN<<6) | (PWREN<<3)|(BSWP<<1) | (HWSWP);

rLCDSADDR1=(((U32)LCD_BUFFER>>22)<<21)|M5D((U32)LCD_BUFFER>>1);
rLCDSADDR2=M5D( ((U32)LCD_BUFFER+(LCD_WIDTH*LCD_HEIGHT*4))>>1 );
rLCDSADDR3=LCD_WIDTH*32/16;
rLCDINTMSK|=(3); // 屏蔽LCD中斷
rTCONSEL = 0; //無(wú)效LPC3480

rGPGUP=rGPGUP&(~(1<<4))|(1<<4); //GPG4上拉電阻無(wú)效
rGPGCON=rGPGCON&(~(3<<8))|(3<<8); //設(shè)置GPG4為L(zhǎng)CD_PWREN
rGPGDAT = rGPGDAT | (1<<4) ; //GPG4置1

rLCDCON5=rLCDCON5&(~(1<<3))|(1<<3); //有效PWREN信號(hào)
rLCDCON5=rLCDCON5&(~(1<<5))|(0<<5); //PWREN信號(hào)極性不翻轉(zhuǎn)

rLCDCON1|=1; //LCD開(kāi)啟

while(1)
{
//黑色背景,白色實(shí)心圓
Brush_Background(0x0);
Draw_Circular(0xffffff);
delay(5000000);

//白色背景,黑色實(shí)心圓
Brush_Background(0xffffff);
Draw_Circular(0x0);
delay(5000000);

//藍(lán)色背景,黃色實(shí)心圓
Brush_Background(0xff);
Draw_Circular(0xffff00);
delay(5000000);

//綠色背景,品色實(shí)心圓
Brush_Background(0xff00);
Draw_Circular(0xff00ff);
delay(5000000);

//紅色背景,青色實(shí)心圓
Brush_Background(0xff0000);
Draw_Circular(0xffff);
delay(5000000);

//青色背景,紅色實(shí)心圓
Brush_Background(0xffff);
Draw_Circular(0xff0000);
delay(5000000);

//品色背景,綠色實(shí)心圓
Brush_Background(0xff00ff);
Draw_Circular(0xff00);
delay(5000000);

//黃色背景,藍(lán)色實(shí)心圓
Brush_Background(0xffff00);
Draw_Circular(0xff);
delay(5000000);
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

7月29日消息,LG Display已將其在美國(guó)的70項(xiàng)LCD液晶顯示器相關(guān)專利轉(zhuǎn)讓給三星顯示,值得注意的是,三星顯示已于三年前退出LCD業(yè)務(wù)。

關(guān)鍵字: LCD 三星

HT16K24操作電壓為2.4V~5.5V,內(nèi)建I2C通信接口,提供三種LCD顯示與按鍵模式:24SEG × 4COM + 24 KEY;22SEG × 6COM + 22 KEY;20SEG × 8COM + 20 K...

關(guān)鍵字: LCD MCU 蜂鳴器

離線GPS工具:跟蹤、保存和查找具有距離和方位的航路點(diǎn)——沒(méi)有網(wǎng)絡(luò),沒(méi)有云,您的數(shù)據(jù),您的規(guī)則。

關(guān)鍵字: GPS設(shè)備 LCD 微控制器 Arduino Uno

在技術(shù)上,LCD和OLED各有其獨(dú)特之處。液晶電視通過(guò)控制液態(tài)晶體實(shí)現(xiàn)圖像顯示,其原理是在兩片玻璃基板中夾入液態(tài)晶體,通過(guò)細(xì)小的電線控制水晶分子的方向。而OLED憑借自發(fā)光二極管帶來(lái)更優(yōu)的視角與色彩表現(xiàn),其RGB色彩信號(hào)...

關(guān)鍵字: OLED LCD

雙鎖系統(tǒng),通過(guò)鍵盤(pán)輸入密碼開(kāi)門(mén),客人來(lái)了用短信開(kāi)門(mén)

關(guān)鍵字: LCD 雙鎖系統(tǒng) L293D 變壓器

在汽車顯示系統(tǒng)領(lǐng)域,TFT LCD顯示屏目前是車載顯示面板的主流選擇。與此同時(shí),OLED和micro-LED顯示屏也逐漸吸引了市場(chǎng)的廣泛關(guān)注。為了適應(yīng)不同的顯示技術(shù),我們需要開(kāi)發(fā)相應(yīng)的電源技術(shù)。TFT LCD顯示屏通常使...

關(guān)鍵字: LCD OLED micro-LED

如今,汽車行業(yè)對(duì)先進(jìn)顯示屏的需求空前高漲,亟需能夠?qū)崿F(xiàn)更大尺寸、更高亮度、曲面設(shè)計(jì)、更高分辨率和更高對(duì)比度的解決方案。與此同時(shí),各類新型車載顯示屏也日益受到青睞。目前,TFT LCD是汽車平板顯示技術(shù)的主流選擇。OLED...

關(guān)鍵字: LCD OLED micro-LED

大家好,歡迎回來(lái)。在這個(gè)項(xiàng)目中,我們將學(xué)習(xí)如何使用鍵盤(pán)和LCD顯示制作一個(gè)安全的基于Arduino的門(mén)鎖。你可以用它來(lái)保護(hù)你的辦公室、房間或家里的保險(xiǎn)箱。要鎖門(mén)和開(kāi)鎖,你需要在安全系統(tǒng)中輸入密碼。這確保了只有經(jīng)過(guò)授權(quán)的人...

關(guān)鍵字: 鍵盤(pán) LCD Arduino 電子門(mén)鎖

April 1, 2025 ---- 樂(lè)金顯示廣州LCD 8.5代線今日(4月1日)正式交割至TCL華星光電,并改名為t11。至此,TCL華星光電將擁有2條6代、4條8.5代、1條8.6代和2條10.5代LCD產(chǎn)線。Tr...

關(guān)鍵字: 電視 PID面板 LCD

將您的樹(shù)莓派Pico變成帶有觸摸屏界面的USB-HID設(shè)備!在這個(gè)項(xiàng)目中,我們將在Arduino IDE中設(shè)置編程環(huán)境,為3.5”P(pán)ico Touch LCD屏蔽配置庫(kù),測(cè)試基本功能,創(chuàng)建簡(jiǎn)單的按鈕(用于復(fù)制和粘貼),顯...

關(guān)鍵字: 樹(shù)莓派 觸摸屏 LCD Windows
關(guān)閉