音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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的問題
關(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
是不是這樣.
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
謝謝
剛才查到的
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

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請教各位高手,希望不吝賜教!
const int a=1; const int b=a;編譯不通過?
flash操作最奇怪的問題
基于嵌入式系統(tǒng)的CAN總線..
為何linux forum上不去了?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號