|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
關(guān)于44B0驅(qū)動單色320 240LCD的問題 |
| 作者:likunpeng 欄目:ARM技術(shù) |
關(guān)于44B0驅(qū)動單色320 240LCD的問題 現(xiàn)在在做44B0驅(qū)動單色320 240LCD 開發(fā)板自帶的是彩色256色的程序,如下 LCD。H中的內(nèi)容 #ifndef __LCD_H__ #define __LCD_H__ #include "def.h" #define SCR_XSIZE (320) #define SCR_YSIZE (240) #define COLOR_NUMBER 256 #define LCD_XSIZE (320) #define LCD_YSIZE (240) #define M5D(n) ((n) & 0x1fffff) #define ARRAY_SIZE_COLOR (SCR_XSIZE/1*SCR_YSIZE) #define HOZVAL (LCD_XSIZE/4-1) #define HOZVAL_COLOR (LCD_XSIZE*3/8-1) #define LINEVAL (LCD_YSIZE-1) #define MVAL (13) #define CLKVAL_COLOR (4) //60MHZ #define MVAL_USED 0 #define LCD_BUF_SIZE (SCR_XSIZE * SCR_YSIZE) extern INT32U aLcdActiveBuffer[LCD_YSIZE][LCD_XSIZE/4]; #define LCD_PutPixel(x, y, c)\ aLcdActiveBuffer[(y)][(x)/4]=(( aLcdActiveBuffer[(y)][(x)/4] & (~(0xff000000>>((x)%4)*8)) ) | ( (c)<<((4-1-((x)%4))*8) )); #define LCD_ActivePutPixel(x, y, c)\ aLcdActiveBuffer[(y)][(x)/4]=(( aLcdActiveBuffer[(y)][(x)/4] & (~(0xff000000>>((x)%4)*8)) )\ | ( (c)<<((4-1-((x)%4))*8) )); #define GUISWAP(a, b) {a^=b; b^=a; a^=b;} void Lcd_Init(void); void Lcd_Clr(void); void Lcd_Draw_Box (INT16 usLeft, INT16 usTop, INT16 usRight, INT16 usBottom, INT8U ucColor); void Lcd_Draw_Line (INT16 usX0, INT16 usY0, INT16 usX1, INT16 usY1, INT8U ucColor, INT16U usWidth); void Lcd_Draw_HLine (INT16 usX0, INT16 usX1, INT16 usY0, INT8U ucColor, INT16U usWidth); void Lcd_Draw_VLine (INT16 usY0, INT16 usY1, INT16 usX0, INT8U ucColor, INT16U usWidth); void Lcd_Fill_Box (INT16U usX0, INT16U usY0, INT16U usX1, INT16U usY1, INT8U ucColor); #endif 初始化部分 void Lcd_Init (void) { //int i, j; //int time = 10000*2; rLCDCON1=(0x0)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)| (CLKVAL_COLOR<<12);//0x4f40 // disable,8B_SNGL_SCAN,WDLY=8clk,WLH=8clk, rLCDCON2=(119)|(HOZVAL_COLOR<<10)|(10<<21); //LINEBLANK=10 (without any calculation) rLCDSADDR1= (0x3<<27) | ( ((unsigned int) aLcdActiveBuffer>>22)<<21 ) | M5D((unsigned int)aLcdActiveBuffer>>1); // 256-color, LCDBANK, LCDBASEU rLCDSADDR2= M5D((((unsigned int)aLcdActiveBuffer+ (SCR_XSIZE*LCD_YSIZE)/2)>>1)) | (MVAL<<21); rLCDSADDR3= (LCD_XSIZE/2) | ( ((SCR_XSIZE-LCD_XSIZE)/2)<<9 ); //The following VALUE has to be changed for better DISPLAY. rREDLUT =0xfdb96420; rGREENLUT=0xfdb96420; rBLUELUT =0xfb40; //rDITHMODE=0x0; rDITHMODE = 0x12210; rDP1_2 =0xa5a5; rDP4_7 =0xba5da65; rDP3_5 =0xa5a5f; rDP2_3 =0xd6b; rDP5_7 =0xeb7b5ed; rDP3_4 =0x7dbe; rDP4_5 =0x7ebdf; rDP6_7 =0x7fdfbfe; rLCDCON1=(0x1)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12); //enable //rLCDCON1=(0x1)|(2<<5)|(MVAL_USED<<7)|(0x1<<8)|(0x1<<10)|(CLKVAL_COLOR<<12); //enable rPDATE=0x1fe; Lcd_Clr(); 疑問 1:原來的是用INT32U aLcdActiveBuffer[LCD_YSIZE][LCD_XSIZE/4]; LCD BUFFER SIZE是如何計算得到的,如換單色或其他色的如何改?#define LCD_BUF_SIZE (SCR_XSIZE * SCR_YSIZE)這個大小為什么與上面的不同? 2:#define M5D(n) ((n) & 0x1fffff) M5D做何用? 3:#define LCD_PutPixel(x, y, c)\ aLcdActiveBuffer[(y)][(x)/4]=(( aLcdActiveBuffer[(y)][(x)/4] & (~(0xff000000>>((x)%4)*8)) ) | ( (c)<<((4-1-((x)%4))*8) )); #define LCD_ActivePutPixel(x, y, c)\ aLcdActiveBuffer[(y)][(x)/4]=(( aLcdActiveBuffer[(y)][(x)/4] & (~(0xff000000>>((x)%4)*8)) )\ | ( (c)<<((4-1-((x)%4))*8) )); 這兩個畫點函數(shù)/4 *8 %4 怎么得來的?如為其他色應(yīng)該如何修改? 問題有點多,不過還是希望哪位老兄給解答一下,先謝了! |
| 2樓: | >>參與討論 |
| 作者: zlb6 于 2006/6/4 18:55:00 發(fā)布:
是不是這樣. 1:單色用1b表示,256色用1B表示 單色: LCD_BUF_SIZE (SCR_XSIZE * SCR_YSIZE/8) 256色: LCD_BUF_SIZE (SCR_XSIZE * SCR_YSIZE) LCD_BUF_SIZE 表示的是顯示緩存的字節(jié)數(shù)據(jù) INT32U aLcdActiveBuffer[LCD_YSIZE][LCD_XSIZE/4]; 這個數(shù)組定義的是INT32U,要/4 2: m5d估計是防止數(shù)據(jù)溢出的, 跟rLCDSADDR1 寄存器的設(shè)置方式是不是有關(guān)? 3: /4,%4:還是32位整型和字節(jié)之間的轉(zhuǎn)換, *8是要移位0,8,16,或24位. |
|
| 3樓: | >>參與討論 |
| 作者: likunpeng 于 2006/6/4 19:33:00 發(fā)布:
謝謝 剛才查到的 M5D((U32)frameBuffer1>>1 式中的M5D()宏定義是用來屏蔽高位段地址,即保留低21位,但沒有0位,因為根據(jù)控制器讀地址的方式,這一位無效。 1:單色用1b表示,256色用1B表示 單色: LCD_BUF_SIZE (SCR_XSIZE * SCR_YSIZE/8) 256色: LCD_BUF_SIZE (SCR_XSIZE * SCR_YSIZE) 這個還不太明白 * - 本貼最后修改時間:2006-6-4 19:35:53 修改者:likunpeng |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |