娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年11月09日(星期六)

正在發(fā)生

2019年11月09日 | 2440裸機(jī)編程之九 LCD液晶顯示器

發(fā)布者:SparklingDreams 來源: 51hei關(guān)鍵字:裸機(jī)編程  LCD液晶顯示器 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

S3C2440A 內(nèi)部含有一個(gè)LCD 驅(qū)動(dòng)控制器.能自動(dòng)產(chǎn)生LCD 驅(qū)動(dòng)控制所需的控制信號(hào),因此S3C2440A 可以與諸如黑白灰度、STN 型彩色、TFT 型彩色等LCD 屏直接接口,而不需要另外加LCD 控制器。在這種接口方式下,LCD 顯示緩沖區(qū)映射在系統(tǒng)的存儲(chǔ)器空間上(DMA),程序只需像素點(diǎn)內(nèi)容寫入存儲(chǔ)器對(duì)應(yīng)地址就可以實(shí)現(xiàn)對(duì)應(yīng)LCD屏上像素點(diǎn)顏色的顯示,十分方便。


這里以S3C2440A 與一個(gè)TFT 型640 像素×480 行的彩色液晶顯示屏接口為例,介紹如何在LCD 上顯示某種色彩及如何繪制簡(jiǎn)單圖形等。

2440的LCD 驅(qū)動(dòng)控制器如下:



要想正確使用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,通過寄存器LCDCON1 中的CLKVAL 可以調(diào)整VCLK 頻率大小,它的公式為:VCLK=HCLK÷[(CLKVAL+1)×2]
例如,HCLK 的頻率為100MHz,要想驅(qū)動(dòng)像素時(shí)鐘信號(hào)為6.4MHz 的LCD 屏,則通過上式計(jì)算CLKVAL 值,結(jié)果CLKVAL 為6.8,取整后(值為6)放入寄存器LCDCON1 中相應(yīng)的位置即可。由于CLKVAL 進(jìn)行了取整,因此我們把取整后的值代入上式,重新計(jì)算VCLK,得到VCLK=7.1MHz。


按理說,對(duì)于一個(gè)已知尺寸(即水平顯示尺寸HOZVAL 和垂直顯示尺寸LINEVAL 已知)的LCD 屏,只要確定了VCLK 值,行頻和場(chǎng)頻就應(yīng)該知道了。但這樣還不行的,因?yàn)樵诿恳粠瑫r(shí)鐘信號(hào)中,還會(huì)有一些與屏顯示無關(guān)的時(shí)鐘出現(xiàn),這就給確定行頻和場(chǎng)頻帶來了一定的復(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é)果。這些值是通過寄存器LCDCON2、LCDCON3 和LCDCON4 來配置,只要把這些值配置成與所要驅(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í)可以通過寄存器LCDCON5 的相關(guān)位來改變某些時(shí)鐘信號(hào)的極性。


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



下面是實(shí)驗(yàn)程序:
//********************************************************************
#define CLKVAL (6)  //VCLK=HCLK÷[(CLKVAL+1)×2]
#define PNRMODE (3)  //TFT LCD panel
#define BPPMODE (12) //16 bpp for TFT
#define ENVID (1)  //輸出和控制 有效

#define VBPD (29)  //垂直同步信號(hào)后肩
#define LINEVAL (480) //垂直尺寸
#define VFPD (13)  //垂直同步信號(hào)前肩
#define VSPW (3)  //垂直同步信號(hào)脈寬

#define HBPD (40)  //水平同步信號(hào)后肩
#define HOZVAL (800) //水平尺寸
#define HFPD (40)  //水平同步信號(hào)前肩

#define HSPW (48)  //水平同步信號(hào)脈寬

#define FRM565 (1)  //565格式
#define PWREN (1)  //GPG供電使能(用于掉電模式)
#define BSWP (0)     //字節(jié)不交換:
//#define HWSWP (1)     //半字交換 16位用不到


#define OFFSIZE (0)  //若不用虛擬屏幕,則為0
#define PAGEWIDTH (HOZVAL)//虛擬屏幕的寬 單位半字 若不用虛擬屏幕,則和實(shí)際一致


volatile unsigned short pixel[LINEVAL][HOZVAL]={0};      //緩沖區(qū)



void Main(void)
{     
    int i;
    ……硬件初始化……

Uart_Printf("LCD實(shí)驗(yàn)nn");

lcd_init();

while(1)
{
  Uart_Printf("input x1 :");
  x1=Uart_GetIntNum();
  Uart_Printf("x1 = %dn",x1);
  
  Uart_Printf("input x2 :");
  x2=Uart_GetIntNum();
  Uart_Printf("x2 = %dn",x2);
  
  Uart_Printf("input y1 :");
  y1=Uart_GetIntNum();
  Uart_Printf("y1 = %dn",y1);
  
  Uart_Printf("input y2 :");
  y2=Uart_GetIntNum();
  Uart_Printf("y2 = %dn",y2);
  
  Uart_Printf("input color :");
  color=Uart_GetIntNum();
  Uart_Printf("color = %dn",color);
  
  rectangle(x1,x2,y1,y2,color);//畫一個(gè)矩形
  Uart_Printf("paint overn");
}

}

void lcd_init(void)
{
rGPCCON = 0xAAAAAAAA;         //LCD功能
rGPDCON = 0xAAAAAAAA;         //LCD功能
rGPGCON = rGPGCON & ~(3<<8) | 3<<8 ;     //LCD電源功能

rLCDCON1 = rLCDCON1 & ~(0x3ff<<8) | CLKVAL<<8 ;   //LCD頻率
rLCDCON1 = rLCDCON1 & ~(0x3<<5) | PNRMODE<<5 ;   //顯示模式
rLCDCON1 = rLCDCON1 & ~(0xf<<1) | BPPMODE<<1 ;   //BPP模式(每個(gè)像素用幾位表示)
rLCDCON1 = rLCDCON1 & ~(1) | 0 ;     //關(guān)閉輸出

rLCDCON2 = rLCDCON2 & ~(0xff<<24) | VBPD<<24 ;   //與LCD屬性一致
rLCDCON2 = rLCDCON2 & ~(0x3ff<<14) | (LINEVAL-1)<<14 ; //垂直尺寸
rLCDCON2 = rLCDCON2 & ~(0xff<<6) | VFPD<<6 ;   //與LCD屬性一致
rLCDCON2 = rLCDCON2 & ~(0x3f) | VSPW ;     //與LCD屬性一致

rLCDCON3 = rLCDCON3 & ~(0x7f<<19) | HBPD<<19 ;   //與LCD屬性一致
rLCDCON3 = rLCDCON3 & ~(0x7ff<<8) | (HOZVAL-1)<<8 ;  //水平尺寸
rLCDCON3 = rLCDCON3 & ~(0xff) | HFPD ;     //與LCD屬性一致

rLCDCON4 = rLCDCON4 & ~(0xff) | HSPW ;     //與LCD屬性一致

rLCDCON5 = rLCDCON5 & ~(1<<11) | FRM565<<11 ;   //模式:565或5551
rLCDCON5 = rLCDCON5 & ~(1<<3) | PWREN<<3 ;    //供電引腳使能 ( GPG4 )
rLCDCON5 = rLCDCON5 & ~(1<<1) | BSWP ;     //字節(jié)是否交換


rLCDSADDR1 = rLCDSADDR1 & ~(0x1ff<<21) | ( ( (U32)pixel>>22 )&0x1ff )<<21 ;       //緩存區(qū)首地址高位[30:22]->rLCDSADDR1[29:21]
rLCDSADDR1 = rLCDSADDR1 & ~(0x1fffff) | ( (U32)pixel>>1 )&0x1fffff ;        //緩存區(qū)首地址低位[21:1]->rLCDSADDR1[20:0]

rLCDSADDR2 = rLCDSADDR2 & ~(0x1fffff) | ( ((U32)pixel+LINEVAL*HOZVAL*2)>>1 )&0x1fffff ;    //緩存區(qū)(尾地址+1)低位[21:1]->rLCDSADDR2[20:0]

rLCDSADDR3 = rLCDSADDR3 & ~(0x7ff<<11) | OFFSIZE<<11 ;            //虛擬屏幕偏移長(zhǎng)度
rLCDSADDR3 = rLCDSADDR3 & ~(0x7ff) | PAGEWIDTH ;             //虛擬屏幕寬度

rLCDCON1 = rLCDCON1 & ~(1) | ENVID ;                //開啟輸出,這個(gè)要最后做,不然有問題
}

U8 make_pixel(U16 x,U16 y,U32 color)
{
if(x{
  pixel[y][x] = color;
  return 1;
}
else return 0;
}
  
  


void rectangle(U16 x1,U16 x2,U16 y1,U16 y2,U32 color)
{
U16 x;
for(;y1<=y2;y1++)
  for(x=x1;x<=x2;x++)
   make_pixel(x,y1,color);
}
//*******************************************************************


實(shí)驗(yàn)結(jié)果如下:


關(guān)鍵字:裸機(jī)編程  LCD液晶顯示器 引用地址:2440裸機(jī)編程之九 LCD液晶顯示器

上一篇:2440裸機(jī)編程之十 觸摸屏
下一篇:2440裸機(jī)編程之八 UART通用異步收發(fā)

推薦閱讀

英特爾近日宣布英特爾?至強(qiáng)?處理器產(chǎn)品家族迎來兩位新成員:Cascade Lake-AP(預(yù)計(jì)2019年上半年發(fā)布)和面向入門級(jí)服務(wù)器的英特爾?至強(qiáng)?E-2100處理器(現(xiàn)已正式發(fā)布)。這兩個(gè)新產(chǎn)品系列建立在英特爾至強(qiáng)平臺(tái)長(zhǎng)達(dá)20年的領(lǐng)導(dǎo)地位之上,讓客戶可以更加靈活地選擇最符合自身需求的解決方案。 “我們一直致力于提供能滿足客戶系統(tǒng)需求的各種工作負(fù)載優(yōu)化...
STC12C單片機(jī)控制光傳感器測(cè)速PWM控制直流電機(jī)部分代碼預(yù)覽:#include"mytype.h" //包含總合的頭文件#define DATA P2 //定義P0口為數(shù)據(jù)端//定義按鍵I/O口sbit key0=P0^6; //正反轉(zhuǎn)、停止模式切換按鍵sbit key1=P0^7; //加速按鍵sbit key2=P0^2; sbit key3=P0^1; //減速...
因?yàn)橄胧箖蓚€(gè)51單片機(jī)通訊,又不能使用串口,因?yàn)镾TC89C52單片機(jī)只有一個(gè)串口,己被占用了,沒有串口可以用。所以編寫了這個(gè)程序。使用仿真軟件進(jìn)行測(cè)試,工作正常。在電路上實(shí)際測(cè)試,運(yùn)行正常。對(duì)控制線,進(jìn)行短接干擾,測(cè)試,都按照預(yù)想的結(jié)果運(yùn)行。測(cè)試代碼:發(fā)送端不停的發(fā)送自定義數(shù)據(jù)幀,每發(fā)送一次,將第數(shù)據(jù)幀中的2個(gè)字節(jié)數(shù)加 1,再發(fā)送。接收端...
2019年第一季度,華為歐洲智能手機(jī)市場(chǎng)份額高達(dá)26%,出貨量達(dá)1172萬臺(tái),超過了蘋果的21%。不過,從2019年三季度開始,受外部因素影響,華為歐洲市場(chǎng)銷量一直下滑,而今年第三季度,華為在歐洲市場(chǎng)手機(jī)銷量更是大幅下跌。根據(jù)數(shù)據(jù)顯示,2021年三季度華為在歐洲的銷量已經(jīng)跌到谷底,市場(chǎng)份額只有0.5%,排名第十名,同比下滑了94%。而在華為下滑后,國(guó)產(chǎn)手機(jī)...

史海拾趣

問答坊 | AI 解惑

基于ADC0809的溫度計(jì)設(shè)定(可進(jìn)行攝氏和華氏的轉(zhuǎn)換)

該設(shè)計(jì)利用0809的進(jìn)行模數(shù)轉(zhuǎn)換,仿真利用滑動(dòng)變阻仿真AD590的模擬量。以一單鍵盤來控制攝氏溫度和華氏溫度的轉(zhuǎn)換。 [ 本帖最后由 houanchan 于 2009-5-19 13:31 編輯 ]…

查看全部問答∨

有沒有一種攝像頭臟了還能拍清楚呢?

有沒有一種攝像頭臟了還能拍清楚呢?比方說我把它放在工業(yè)環(huán)境中,時(shí)間長(zhǎng)了它的攝像頭上沾染了很多的灰塵,但是它還能拍清楚呢?(主要是攝像頭如果會(huì)安裝在高處維護(hù)不方便,如果臟了可能圖像就不清晰了吧) 請(qǐng)教有沒有這樣的攝像頭,什么類型的?…

查看全部問答∨

尋求MMS彩信的編碼協(xié)議

尋求MMS的編碼協(xié)議,找了半天都找不到。 能不能指點(diǎn)下如何解析?…

查看全部問答∨

大周末還在緊急問一個(gè)嚴(yán)肅問題:2440據(jù)說快停產(chǎn)了是嗎?

大周末還在緊急問一個(gè)嚴(yán)肅問題:2440據(jù)說快停產(chǎn)了是嗎? 網(wǎng)絡(luò)上一直有這個(gè)說法,不知道是否可靠? 還有現(xiàn)在有些朋友已經(jīng)在市場(chǎng)不幸買到了翻新的2440 這個(gè)事實(shí)讓人覺得這個(gè)是真的停產(chǎn)了!? 大家來說說吧,嘿嘿。 因?yàn)榘硞冞€用2440繼續(xù)上2440 ...…

查看全部問答∨

求解:NAND FLASH 中程序莫名其妙丟失,幫忙分析分析

小弟碰到一個(gè)很奇怪的問題,求教各位大俠: 我們BOOTLOADER和主CODE都是放在NANDFLASH中的,有十幾臺(tái)機(jī)子升級(jí)后QA測(cè)試OK,裝完前后蓋還是OK,但是到包裝前插電開機(jī)忽然打不開了,好像是NAND FLASH 中程序壞掉的樣子,好像聽說有“位反轉(zhuǎn)”的可能, ...…

查看全部問答∨

請(qǐng)教:有沒識(shí)別人手和木棒的傳感器啊!

     最近做一個(gè)項(xiàng)目,只要是做個(gè)保護(hù)措施!如何識(shí)別人手和木棒,用紅外傳感器不知行不行?謝謝啊!…

查看全部問答∨

請(qǐng)問高手WINCE5.0支持MAPI嗎

請(qǐng)問下WINCE5.0支持MAPI嗎,如果支持,有沒有相關(guān)的文檔介紹下.如果不支持,如何去做一個(gè)電子郵件收發(fā)的軟件.謝謝. …

查看全部問答∨

請(qǐng)教:tuner中的SD mode 是指什么模式?

data sheet中是這么講的: SD mode switch 1 : SD mode When this mode switch is set to the on state, the IF counter will count every time a stop condition arrives over the I2C circuit. --------------------- SD mode 是指什么模式? ...…

查看全部問答∨

實(shí)用[多功能]應(yīng)急照明系統(tǒng)

本人開發(fā)過消防應(yīng)急燈并申請(qǐng)了實(shí)用新型發(fā)明專利,希望大家在本人方案基礎(chǔ)上進(jìn)行補(bǔ)充,期待我們的應(yīng)急燈更加完美!!草草畫了個(gè)圖,大家?guī)兔ρa(bǔ)充呀(控制板的指示燈不是必須的,考慮到省電,當(dāng)然也可以延時(shí)熄滅) [ 本帖最后由 ailover2001 于 20 ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 古丈县| 北碚区| 同江市| 富顺县| 景泰县| 伊春市| 双江| 丰顺县| 焉耆| 西城区| 镇平县| 凤翔县| 临汾市| 连云港市| 石棉县| 昌江| 林西县| 新宾| 巨鹿县| 通河县| 泰和县| 广州市| 兴山县| 汉寿县| 丰都县| 六枝特区| 左贡县| 临夏市| 西青区| 陵川县| 高平市| 子长县| 六枝特区| 平邑县| 横峰县| 武平县| 天长市| 无锡市| 鞍山市| 元朗区| 长顺县|