国产精品无码一区二区在线,办公室激情呻吟无码A片漫画,影音先锋 av天堂,欧洲女人牲交性开放视频

首頁(yè) > 技術(shù)支持 > 應(yīng)用與案例 > 正文
單片機(jī)與RA8875接法及軟件初始化之一(通過(guò)8080接口介紹) 作者:david   發(fā)表日期:2020-10-16   來(lái)源:   瀏覽:

本篇文章主要介紹8080時(shí)序驅(qū)動(dòng)RA8875

RA8875 是一個(gè)文字與繪圖模式的雙圖層液晶顯示 (TFT-LCD) 控制器,可結(jié)合文字或2D圖形應(yīng)用,最大
可支持到
800*480 點(diǎn)分辨率的中小尺寸數(shù)字面板。內(nèi)建 768KB 顯示內(nèi)存可提供大多數(shù)使用者的應(yīng)用一個(gè)
更彈性的解決方案。此外,使用者可藉由選用外部串行式
Flash 接口,支持BIG5/GB 編碼,可提供最大達(dá)
32*32 像素之的字型輸入。在圖形的使用上, RA8875 支持2D BTE 引擎 (Block Transfer Engine),此
功能兼容于一般通用的
2D BitBLT 功能,可處理大量圖形數(shù)據(jù)轉(zhuǎn)換與傳送。同時(shí)RA8875 也內(nèi)建幾何圖形
加速引擎
(Geometric Speed-up Engine),提供使用者透過(guò)簡(jiǎn)單的設(shè)定輕松畫出直線、矩形、圓形和橢圓
的幾何圖形。為了貼近終端始用者的應(yīng)用,
RA8875 整合了強(qiáng)大的功能,如畫面卷動(dòng)功能、顯示浮動(dòng)窗
口、圖形
Pattern 及文字放大等功能,可大量節(jié)省使用者軟件開(kāi)發(fā)的時(shí)間,并提升MCU軟件的執(zhí)行效率。
RA8875 提供低成本的 8080/6800 并列式MCU 接口,由于內(nèi)建強(qiáng)大的硬件加速功能,可降低數(shù)據(jù)傳輸所
需的時(shí)間并且改善效率。
RA8875提供串行式 SPI/I2C 等極少量腳位的界面,內(nèi)建 4-wire 的觸控面板控制
器,以及
2組脈波寬度調(diào)變 (PWM) ,可用于調(diào)整面板背光或其它應(yīng)用。相對(duì)于其它的解決方案, RA8875
是一個(gè)功能強(qiáng)大及低成本的彩色TFT 控制器,讓使用者順利解決軟硬件開(kāi)發(fā)上的疑慮,同時(shí)達(dá)成低成本、高效能的系統(tǒng)方案。

一、硬件設(shè)計(jì)
連接DB[15:0]、CS、WE、RD等信號(hào)線。
    

選擇通訊時(shí)序時(shí),硬件電路兩個(gè)腳位需要設(shè)定,本篇文章以8080時(shí)序講解,所以C86和PS引腳都接地


XI\XO為內(nèi)部晶體振蕩電路的輸入及輸出端,用來(lái)連接外部晶體振蕩器,以產(chǎn)生RA885的內(nèi)部頻率信號(hào),晶體振蕩器選取范圍為15MHZ~30MHZ(建議可接20MHZ)


二、軟件設(shè)計(jì)

1、單片機(jī)FSMC初始化

 void FSMC_LCD_Init(void)

{
 
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;      //初始化結(jié)構(gòu)體
FSMC_NORSRAMTimingInitTypeDef  readWriteTiming;          //時(shí)序結(jié)構(gòu)體
 
 
/*使能FSMC外設(shè)時(shí)鐘*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);
 
//地址建立時(shí)間(ADDSET)具體實(shí)驗(yàn)測(cè)試進(jìn)行設(shè)置
readWriteTiming.FSMC_AddressSetupTime = 0x00;
//數(shù)據(jù)保持時(shí)間(DATAST)
readWriteTiming.FSMC_DataSetupTime = 0x03;
 
 
//地址保持時(shí)間(ADDHLD)模式B未用到
readWriteTiming.FSMC_AddressHoldTime = 0x00;
 
//設(shè)置總線轉(zhuǎn)換周期,僅用于復(fù)用模式的NOR操作
readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
 
//設(shè)置時(shí)鐘分頻,僅用于同步類型的存儲(chǔ)器
readWriteTiming.FSMC_CLKDivision = 0x00;
 
//數(shù)據(jù)保持時(shí)間,僅用于NOR
readWriteTiming.FSMC_DataLatency = 0x00;
 
//選擇匹配SRAM的模式
readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;
    
 
// 選擇FSMC映射的存儲(chǔ)區(qū)域: Bank1 NORSRAMx
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_BANK_NORSRAMx; 
 
//設(shè)置地址總線與數(shù)據(jù)總線是否復(fù)用,僅用于NOR
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; 
 
//設(shè)置要控制的存儲(chǔ)器類型:NOR類型
FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_NOR;   
 
//存儲(chǔ)器數(shù)據(jù)寬度:16位
FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; 
 
//設(shè)置是否使用突發(fā)訪問(wèn)模式,僅用于同步類型的存儲(chǔ)器
FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;
 
//設(shè)置是否使能等待信號(hào),僅用于同步類型的存儲(chǔ)器
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable;
 
//設(shè)置等待信號(hào)的有效極性,僅用于同步類型的存儲(chǔ)器
FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
 
//設(shè)置是否支持把非對(duì)齊的突發(fā)操作,僅用于同步類型的存儲(chǔ)器
FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; 
 
//設(shè)置等待信號(hào)插入的時(shí)間,僅用于同步類型的存儲(chǔ)器
FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
 
//存儲(chǔ)器寫使能 
FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
 
//不使用等待信號(hào)
FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;  
 
// 不使用擴(kuò)展模式,讀寫使用相同的時(shí)序
FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; 
 
//突發(fā)寫操作
FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;  
 
//讀寫時(shí)序配置
FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming;
 
//讀寫同樣時(shí)序,使用擴(kuò)展模式時(shí)這個(gè)配置才有效
FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &readWriteTiming; 
 
FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置
 
FSMC_NORSRAMCmd(FSMC_BANK_NORSRAMx, ENABLE);  // 使能BANK
 
}

2、寫入命令及寫入數(shù)據(jù)

#define  ILI9341_CMD_ADDR   (__IO uint16_t*)(0x60000000)
#define  ILI9341_DATA_ADDR   (__IO uint16_t*)(0x60020000)   //此處寫入命令及數(shù)據(jù)地址根據(jù)硬件連接的地址線修改
 

__inline void ILI9341_Write_Cmd ( uint16_t usCmd )

{
*ILI9341_CMD_ADDR = usCmd;
}
 
__inline void ILI9341_Write_Data ( uint16_t usData )
{
* ILI9341_DATA_ADDR = usData;
 
}
 
3、8875初始化及液晶屏的相關(guān)初始化(以AT070TN92為例)

GPIO_ResetBits(GPIOE, GPIO_Pin_1);
    Delay(0xAFF);   
    GPIO_SetBits(GPIOE, GPIO_Pin_1 ); //軟件復(fù)位 
    Delay(0xAFF);
 
 
//RA8875_PLL_ini    
LCD_CmdWrite(0x88);       
    LCD_DataWrite(0x0b);
    delay_ms(1);    
    LCD_CmdWrite(0x89);       
    LCD_DataWrite(0x02);  
    delay_ms(1);
 
  LCD_CmdWrite(0x10);  //SYSR   bit[4:3]=00 256 color  bit[2:1]=  00 8bit MPU interface
    //LCD_DataWrite(0x000c);   // if 8bit MCU interface   and 65k color display      
   LCD_DataWrite(0x0F); // if 16bit MCU interface   and 65k color display  
delay_us(1); 
 
LCD_CmdWrite(0x04);     //PCLK inverse 
   LCD_DataWrite(0x81);
   delay_ms(1);
  
   //Horizontal set
   LCD_CmdWrite(0x14); //HDWR//Horizontal Display Width Setting Bit[6:0]                   
   LCD_DataWrite(0x63);//Horizontal display width(pixels) = (HDWR + 1)*8 
                   
   LCD_CmdWrite(0x15); //Horizontal Non-Display Period Fine Tuning Option Register (HNDFTR)
   LCD_DataWrite(0x03);//Horizontal Non-Display Period Fine Tuning(HNDFT) [3:0]   
          
   LCD_CmdWrite(0x16); //HNDR//Horizontal Non-Display Period Bit[4:0]                      
   LCD_DataWrite(0x03);//Horizontal Non-Display Period (pixels) = (HNDR + 1)*8 
             
   LCD_CmdWrite(0x17); //HSTR//HSYNC Start Position[4:0]                                   
   LCD_DataWrite(0x02);//HSYNC Start Position(PCLK) = (HSTR + 1)*8    
                     
   LCD_CmdWrite(0x18); //HPWR//HSYNC Polarity ,The period width of HSYNC.                  
   LCD_DataWrite(0x00);//HSYNC Width [4:0]   HSYNC Pulse width(PCLK) = (HPWR + 1)*8   
 
   //Vertical set    
   LCD_CmdWrite(0x19); //VDHR0 //Vertical Display Height Bit [7:0]                         
   LCD_DataWrite(0xdf);//Vertical pixels = VDHR + 1       
                                 
   LCD_CmdWrite(0x1a); //VDHR1 //Vertical Display Height Bit [8]                           
   LCD_DataWrite(0x01);//Vertical pixels = VDHR + 1  
                                      
   LCD_CmdWrite(0x1b); //VNDR0 //Vertical Non-Display Period Bit [7:0]                     
   LCD_DataWrite(0x14);//Vertical Non-Display area = (VNDR + 1) 
                           
   LCD_CmdWrite(0x1c); //VNDR1 //Vertical Non-Display Period Bit [8]                       
   LCD_DataWrite(0x00);//Vertical Non-Display area = (VNDR + 1)  
                          
   LCD_CmdWrite(0x1d); //VSTR0 //VSYNC Start Position[7:0]                                 
   LCD_DataWrite(0x06);//VSYNC Start Position(PCLK) = (VSTR + 1)  
                          
   LCD_CmdWrite(0x1e); //VSTR1 //VSYNC Start Position[8]                                   
   LCD_DataWrite(0x00);//VSYNC Start Position(PCLK) = (VSTR + 1)   
                        
   LCD_CmdWrite(0x1f); //VPWR //VSYNC Polarity ,VSYNC Pulse Width[6:0]                     
   LCD_DataWrite(0x01);//VSYNC Pulse Width(PCLK) = (VPWR + 1)                              
 
   LCD_CmdWrite(0xf2);  
   LCD_DataWrite(0x01);
//Active window  set 
   //setting active window X
    LCD_CmdWrite(0x30); //Horizontal Start Point 0 of Active Window (HSAW0)
    LCD_DataWrite(0x00); //Horizontal Start Point of Active Window [7:0]
//delay_us(1); 
    LCD_CmdWrite(0x31); //Horizontal Start Point 1 of Active Window (HSAW1)   
    LCD_DataWrite(0x00); //Horizontal Start Point of Active Window [9:8]
//delay_us(1); 
    LCD_CmdWrite(0x34); //Horizontal End Point 0 of Active Window (HEAW0)
    LCD_DataWrite(0x1F); //Horizontal End Point of Active Window [7:0]
//delay_us(1); 
    LCD_CmdWrite(0x35); //Horizontal End Point 1 of Active Window (HEAW1)   
    LCD_DataWrite(0x03); //Horizontal End Point of Active Window [9:8]
//delay_us(1); 
 
   //setting active window Y
    LCD_CmdWrite(0x32); //Vertical Start Point 0 of Active Window (VSAW0)
    LCD_DataWrite(0x00); //Vertical Start Point of Active Window [7:0]
//delay_us(1); 
    LCD_CmdWrite(0x33); //Vertical Start Point 1 of Active Window (VSAW1)   
    LCD_DataWrite(0x00); //Vertical Start Point of Active Window [8]
//delay_us(1); 
    LCD_CmdWrite(0x36); //Vertical End Point of Active Window 0 (VEAW0)
    LCD_DataWrite(0xdf); //Vertical End Point of Active Window [7:0]
//delay_us(1); 
    LCD_CmdWrite(0x37); //Vertical End Point of Active Window 1 (VEAW1)   
    LCD_DataWrite(0x01); //Vertical End Point of Active Window [8]
 
// /*setting RA8875 display on*/
    LCD_CmdWrite(0x01); //  
    LCD_DataWrite(0x80); // 
    delay_ms(20); 
 
   /*RA8875 DMA function setting*/
SROM_CLK_DIV(0); //set serial interface clock rate 
    Serial_ROM_select1(); 
    Select_Serial_Waveform_mode3();  
    SERIAL_ROM_Read_Cycle_5bus();
    SERIAL_ROM_DMA_mode();
    SERIAL_ROM_Signal_mode();
 
    DMA_Block_mode();
 
/*setting RA8875 memory clear with active window*/
    Clear_Active_Window();
 
/*setting backlight on RA8875 PWM1 control*/
PWM1_enable();
    PWM1_fnuction_sel();
    PWM1_clock_ratio(0x02); //bit0~3  58KHZ  
    PWM1_duty_cycle(0xff); // 
    Brightness_level=10;
 
LCD_Clear(0x001f);//

注:RA8875色彩深度 可為256/65K 色,最大支持到800*480.

分享到:

相關(guān)熱詞搜索:RA8875 8080時(shí)序

上一篇:自建字庫(kù)調(diào)用方法及范例(RA8876,RA8877)
下一篇:單片機(jī)與RA8875接法及軟件初始化之二(通過(guò)串口連接)