打印

求助STM32驱动ILI9325

[复制链接]
5800|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
_crystal_|  楼主 | 2011-2-28 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近买了一块TFT屏,拿起手边的STM32板子想把它点亮,按照卖家给资料写了一个程序,却没有成功。怀疑过是IO口设置不当,但又找不到原因。
贴上部分程序,希望有人能帮到我。

#define P_TFT_CS  GPIOB
#define TFT_CS   GPIO_Pin_13
#define P_TFT_RST  GPIOC
#define TFT_RST  GPIO_Pin_11
#define P_TFT_RS  GPIOB
#define TFT_RS   GPIO_Pin_3
#define P_TFT_WR  GPIOA
#define TFT_WR   GPIO_Pin_15
#define P_TFT_RD  GPIOA
#define TFT_RD   GPIO_Pin_14
#define P_DB8   GPIOA
#define DB8    GPIO_Pin_13
#define P_DB9   GPIOB
#define DB9    GPIO_Pin_0
#define P_DB10   GPIOA
#define DB10   GPIO_Pin_5
#define P_DB11   GPIOB
#define DB11   GPIO_Pin_7
#define P_DB12   GPIOB
#define DB12   GPIO_Pin_1
#define P_DB13   GPIOA
#define DB13   GPIO_Pin_4
#define P_DB14   GPIOA
#define DB14   GPIO_Pin_6
#define P_DB15   GPIOB
#define DB15   GPIO_Pin_14
#define P_DB0   GPIOB
#define DB0    GPIO_Pin_12
#define P_DB1   GPIOB
#define DB1    GPIO_Pin_15
#define P_DB2   GPIOC
#define DB2    GPIO_Pin_0
#define P_DB3   GPIOC
#define DB3    GPIO_Pin_1
#define P_DB4   GPIOC
#define DB4    GPIO_Pin_2
#define P_DB5   GPIOC
#define DB5    GPIO_Pin_6
#define P_DB6   GPIOA
#define DB6    GPIO_Pin_1
#define P_DB7   GPIOA
#define DB7    GPIO_Pin_2

#define Set_CS  GPIO_SetBits(P_TFT_CS,TFT_CS);
#define Clr_CS  GPIO_ResetBits(P_TFT_CS,TFT_CS);
#define Set_RS  GPIO_SetBits(P_TFT_RS,TFT_RS);
#define Clr_RS  GPIO_ResetBits(P_TFT_RS,TFT_RS);
#define Set_WR GPIO_SetBits(P_TFT_WR,TFT_WR);
#define Clr_WR GPIO_ResetBits(P_TFT_WR,TFT_WR);
#define Set_RD GPIO_SetBits(P_TFT_RD,TFT_RD);
#define Clr_RD GPIO_ResetBits(P_TFT_RD,TFT_RD);
#define Set_RST GPIO_SetBits(P_TFT_RST,TFT_RST);
#define Clr_RST GPIO_ResetBits(P_TFT_RST,TFT_RST);

int main(void)
{
#ifdef DEBUG
  debug();
#endif
  RCC_Configuration();
  NVIC_Configuration();
  GPIO_Configuration();
   
  USART_Configuration();

DataToIO(0xFFFF);
Set_CS;
Set_WR;
Set_RD;
Set_RS;
Set_RST;

TFT_Init();
TFT_Pant(0xFFFF);
TFT_Pant(0xF800);
while(1);
}

void RCC_Configuration(void)
{
  RCC_DeInit();
  RCC_HSICmd(ENABLE);  // internal HSI RC (8 MHz)
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  
  RCC_HSEConfig(RCC_HSE_OFF);
  RCC_LSEConfig(RCC_LSE_OFF);
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_8); //  32HMz
  RCC_PLLCmd(ENABLE);
  while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  
  FLASH_SetLatency(FLASH_Latency_0);
  
  RCC_PCLK2Config(RCC_HCLK_Div1);
  RCC_PCLK1Config(RCC_HCLK_Div2);
  RCC_HCLKConfig(RCC_SYSCLK_Div1);   
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
                         | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD
                         | RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 , ENABLE);
}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;  
  /*---- Pin Remap --------------------------------------*/
    GPIO_PinRemapConfig(GPIO_Remap_PD01, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 | \
        GPIO_Pin_8|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  /* Configure USART1 Rx (PA.10) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}

///////////////////////////////////////////////////////////////////////

void DataToIO(u16 val)
{
if((val&0x0001)==0)
  GPIO_ResetBits(P_DB0, DB0);
else
  GPIO_SetBits(P_DB0, DB0);
if((val&0x0002)==0)
  GPIO_ResetBits(P_DB1, DB1);
else
  GPIO_SetBits(P_DB1, DB1);
if((val&0x0004)==0)
  GPIO_ResetBits(P_DB2, DB2);
else
  GPIO_SetBits(P_DB2, DB2);
if((val&0x0008)==0)
  GPIO_ResetBits(P_DB3, DB3);
else
  GPIO_SetBits(P_DB3, DB3);
if((val&0x0010)==0)
  GPIO_ResetBits(P_DB4, DB4);
else
  GPIO_SetBits(P_DB4, DB4);
if((val&0x0020)==0)
  GPIO_ResetBits(P_DB5, DB5);
else
  GPIO_SetBits(P_DB5, DB5);
if((val&0x0040)==0)
  GPIO_ResetBits(P_DB6, DB6);
else
  GPIO_SetBits(P_DB6, DB6);
if((val&0x0080)==0)
  GPIO_ResetBits(P_DB7, DB7);
else
  GPIO_SetBits(P_DB7, DB7);
if((val&0x0100)==0)
  GPIO_ResetBits(P_DB8, DB8);
else
  GPIO_SetBits(P_DB8, DB8);
if((val&0x0200)==0)
  GPIO_ResetBits(P_DB9, DB9);
else
  GPIO_SetBits(P_DB9, DB9);
if((val&0x0400)==0)
  GPIO_ResetBits(P_DB10, DB10);
else
  GPIO_SetBits(P_DB10, DB10);
if((val&0x0800)==0)
  GPIO_ResetBits(P_DB11, DB11);
else
  GPIO_SetBits(P_DB11, DB11);
if((val&0x1000)==0)
  GPIO_ResetBits(P_DB12, DB12);
else
  GPIO_SetBits(P_DB12, DB12);
if((val&0x2000)==0)
  GPIO_ResetBits(P_DB13, DB13);
else
  GPIO_SetBits(P_DB13, DB13);
if((val&0x4000)==0)
  GPIO_ResetBits(P_DB14, DB14);
else
  GPIO_SetBits(P_DB14, DB14);
if((val&0x8000)==0)
  GPIO_ResetBits(P_DB15, DB15);
else
  GPIO_SetBits(P_DB15, DB15);
}

/*-------------------------------------------------*/
void Delayms(u32 ms)  // /* X1ms */
{
u32 i,j;
for(i=0;i<ms;i++)
  for(j=0;j<100;j++);
}
/*---------------------------------------*/
void TFT_Write_com(u16 dat)  //发送命令
{
Clr_RS;
Set_RD;
DataToIO(dat);
Delayms(1);
Clr_WR;
Set_WR;
}
/*---------------------------------------*/
void TFT_Write_dat(u16 dat)  // 发送数据
{
Set_RS;
Set_RD;
DataToIO(dat);
Delayms(1);
Clr_WR;
Set_WR;
}
/*---------------------------------------*/
void TFT_SetAddr(u16 x1, u16 y1, u16 x2, u16 y2)
{
TFT_Write_com(0x0020);TFT_Write_dat(x1); //设置X坐标位置
    TFT_Write_com(0x0021);TFT_Write_dat(y1);    //设置Y坐标位置
    TFT_Write_com(0x0050);TFT_Write_dat(x1); //开始X
TFT_Write_com(0x0052);TFT_Write_dat(y1); //开始Y
    TFT_Write_com(0x0051);TFT_Write_dat(x2); //结束X
TFT_Write_com(0x0053);TFT_Write_dat(y2); //结束Y
    TFT_Write_com(0x0022);
}
/*---------------------------------------*/
void TFT_Init(void)
{
Set_RST;
Delayms(5);
Clr_RST;
Delayms(5);
Set_RST;
Set_CS;
Set_RD;
Set_WR;
Delayms(5);
  
Clr_CS; // 打开片选使能
//************* Start Initial Sequence **********//
TFT_Write_com(0x00E5); TFT_Write_dat(0x78F0); // set SRAM internal timing
TFT_Write_com(0x0001); TFT_Write_dat(0x0100); // set SS and SM bit (S720 -> S1)
TFT_Write_com(0x0002); TFT_Write_dat(0x0700); // set 1 line inversion
TFT_Write_com(0x0003); TFT_Write_dat(0x1030); // set GRAM write direction and BGR=1.
TFT_Write_com(0x0004); TFT_Write_dat(0x0000); // Resize register
TFT_Write_com(0x0008); TFT_Write_dat(0x0207); // set the back porch and front porch
TFT_Write_com(0x0009); TFT_Write_dat(0x0000); // set non-display area refresh cycle ISC[3:0]
TFT_Write_com(0x000A); TFT_Write_dat(0x0000); // FMARK function
TFT_Write_com(0x000C); TFT_Write_dat(0x0000); // RGB interface setting
TFT_Write_com(0x000D); TFT_Write_dat(0x0000); // Frame marker Position
TFT_Write_com(0x000F); TFT_Write_dat(0x0000); // RGB interface polarity
//*************Power On sequence ****************//
TFT_Write_com(0x0010); TFT_Write_dat(0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
TFT_Write_com(0x0011); TFT_Write_dat(0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
TFT_Write_com(0x0012); TFT_Write_dat(0x0000); // VREG1OUT voltage
TFT_Write_com(0x0013); TFT_Write_dat(0x0000); // VDV[4:0] for VCOM amplitude
TFT_Write_com(0x0007); TFT_Write_dat(0x0001);
Delayms(50); // Dis-charge capacitor power voltage
TFT_Write_com(0x0010); TFT_Write_dat(0x1090); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB
TFT_Write_com(0x0011); TFT_Write_dat(0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
Delayms(50);
TFT_Write_com(0x0012); TFT_Write_dat(0x001F); //001C// Internal reference voltage= Vci;
Delayms(50);
TFT_Write_com(0x0013); TFT_Write_dat(0x1500); //0x1000//1400   Set VDV[4:0] for VCOM amplitude  1A00
TFT_Write_com(0x0029); TFT_Write_dat(0x0027); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034
TFT_Write_com(0x002B); TFT_Write_dat(0x000D); // Set Frame Rate   000C
Delayms(50);
TFT_Write_com(0x0020); TFT_Write_dat(0x0000); // GRAM horizontal Address
TFT_Write_com(0x0021); TFT_Write_dat(0x0000); // GRAM Vertical Address
// ----------- Adjust the Gamma Curve ----------//
TFT_Write_com(0x0030); TFT_Write_dat(0x0000);
TFT_Write_com(0x0031); TFT_Write_dat(0x0707);
TFT_Write_com(0x0032); TFT_Write_dat(0x0307);
TFT_Write_com(0x0035); TFT_Write_dat(0x0200);
TFT_Write_com(0x0036); TFT_Write_dat(0x0008);
TFT_Write_com(0x0037); TFT_Write_dat(0x0004);
TFT_Write_com(0x0038); TFT_Write_dat(0x0000);
TFT_Write_com(0x0039); TFT_Write_dat(0x0707);
TFT_Write_com(0x003C); TFT_Write_dat(0x0002);
TFT_Write_com(0x003D); TFT_Write_dat(0x1D04);

//------------------ Set GRAM area ---------------//
TFT_Write_com(0x0050); TFT_Write_dat(0x0000); // Horizontal GRAM Start Address
TFT_Write_com(0x0051); TFT_Write_dat(0x00EF); // Horizontal GRAM End Address
TFT_Write_com(0x0052); TFT_Write_dat(0x0000); // Vertical GRAM Start Address
TFT_Write_com(0x0053); TFT_Write_dat(0x013F); // Vertical GRAM Start Address
TFT_Write_com(0x0060); TFT_Write_dat(0xA700); // Gate Scan Line
TFT_Write_com(0x0061); TFT_Write_dat(0x0001); // NDL,VLE, REV
TFT_Write_com(0x006A); TFT_Write_dat(0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
TFT_Write_com(0x0080); TFT_Write_dat(0x0000);
TFT_Write_com(0x0081); TFT_Write_dat(0x0000);
TFT_Write_com(0x0082); TFT_Write_dat(0x0000);
TFT_Write_com(0x0083); TFT_Write_dat(0x0000);
TFT_Write_com(0x0084); TFT_Write_dat(0x0000);
TFT_Write_com(0x0085); TFT_Write_dat(0x0000);
//-------------- Panel Control -------------------//
TFT_Write_com(0x0090); TFT_Write_dat(0x0010);
TFT_Write_com(0x0092); TFT_Write_dat(0x0600);
TFT_Write_com(0x0007); TFT_Write_dat(0x0133); // 262K color and display ON

Set_CS;  //关闭片选使能
}

void TFT_Pant(u16 Color)
{
u32 i, j;
  
Clr_CS;
   TFT_SetAddr(0,0,240,320);
    for(i=0; i<320; i++)
{
  for (j=0; j<240; j++)
   TFT_Write_dat(Color);  
}  
Set_CS;
}
沙发
kinbing| | 2011-2-28 15:12 | 只看该作者
#include "8x16.h"
#include "GB3232.h"
#include "GB1616.h"         
#include "asc20x40E.h"

/*----------------------------------------------------------------
                           定义硬件端口
----------------------------------------------------------------*/
#define LCD_CS_High         GPIO_SetBits(GPIOB,GPIO_Pin_8)                 //片选        高
#define LCD_CS_Low                 GPIO_ResetBits(GPIOB,GPIO_Pin_8)        //片选 低

#define LCD_RES_High         GPIO_SetBits(GPIOB,GPIO_Pin_9)                 //复位        高
#define LCD_RES_Low         GPIO_ResetBits(GPIOB,GPIO_Pin_9)        //复位        低

#define LCD_RW_High         GPIO_SetBits(GPIOB,GPIO_Pin_10)                 //读写        高
#define LCD_RW_Low                 GPIO_ResetBits(GPIOB,GPIO_Pin_10)        //读写 低

#define LCD_RS_High         GPIO_SetBits(GPIOB,GPIO_Pin_11)                 //数据/命令选择           0为命令,1为数据        高
#define LCD_RS_Low                 GPIO_ResetBits(GPIOB,GPIO_Pin_11)        //数据/命令选择           0为命令,1为数据 低
#define LCD_H()         Write_Cmd_Data(0x0003,0x10A8)           //横屏写显示方式
#define LCD_V()         Write_Cmd_Data(0x0003,0x10B0)            //竖屏写显示方式
#define LCD_Write()                Write_Cmd (0x00,0x22)                           //指向LCD的数据RAM寄存器


void  delayms(uint32_t);
void Write_Data(uint8_t,uint8_t);
void Write_Cmd(uint8_t,uint8_t);
void Write_Data_U16(uint16_t);
void Write_Cmd_Data(uint8_t,uint32_t);
void ILI9325_Initial(void);
void LCD_Init()
{
        GPIO_InitTypeDef GPIO_InitStructure;         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;               
        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOB, &GPIO_InitStructure);                
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
        ILI9325_Initial();
}

//void LCD_SetPos(unsigned int x_min,unsigned int x_max,unsigned int y_min,unsigned int y_max)
//{
//  Write_Cmd_Data(0x50,x_min);
//  Write_Cmd_Data(0x51,x_max);
//  Write_Cmd_Data(0x52,y_min);
//  Write_Cmd_Data(0x53,y_max);
//  Write_Cmd_Data(0x20,x_max);
//  Write_Cmd_Data(0x21,y_min);
//  LCD_Write();
//}
/* 横屏定位  */
void LCD_SetPos(uint16_t x_min,uint16_t y_min,uint16_t x_max,uint16_t y_max)
{
  Write_Cmd_Data(0x50,240-y_max);
  Write_Cmd_Data(0x51,240-y_min);
  Write_Cmd_Data(0x52,x_min);
  Write_Cmd_Data(0x53,x_max);

  Write_Cmd_Data(0x20,x_max);
  Write_Cmd_Data(0x21,y_min);
  LCD_Write();
}
/*----------------------------------------------------------------
                           清屏函数
输入参数:bColor 清屏所使用的背景色
----------------------------------------------------------------*/
void CLR_Screen(uint32_t background)
{
        uint8_t DH=background>>8,DL=background;
        uint32_t count=240*320;
        Write_Cmd_Data(0x50,0);
        Write_Cmd_Data(0x51,239);
        Write_Cmd_Data(0x52,0);
        Write_Cmd_Data(0x53,319);
        Write_Cmd_Data(0x20,239);
        Write_Cmd_Data(0x21,0);
        Write_Cmd (0x00,0x22);
       
        while(count--)
        {                         
                Write_Data(DH,DL);
        }
}
/*----------------------------------------------------------------
                         写命令、写数据
输入参数:x 需要输入的命令 16位
          y 需要输入的数据 16位
----------------------------------------------------------------*/
void  Write_Cmd_Data (unsigned char x,unsigned int y)
{
        unsigned char m,n;
        m=y>>8;
        n=y;
        Write_Cmd(0x00,x);
        Write_Data(m,n);  
}

/*----------------------------------------------------------------
                         写16位数据
----------------------------------------------------------------*/
void  Write_Data_U16(uint16_t dat)
{
  uint8_t DH=dat>>8,DL=dat;
        GPIOB->BSRR=1<<8<<16                          //LCD_CS_Low;
        |1<<11                                                       //        LCD_RS_High;
        |DH        |((uint8_t) ~DH)<<16                 //        GPIOB->ODR=DH;
        |1<<10<<16;                                                 //        LCD_RW_High;
         
        GPIOB->BSRR=1<<10;                            // LCD_RW_High;         
        GPIOB->BSRR=1<<16<<10                    // LCD_RW_Low;
        |DL|((uint8_t) ~DL)<<16;            // GPIOB->ODR=DL;                
        GPIOB->BSRR=1<<10                                // LCD_RW_High;  
        |1<<8;                                                        // LCD_CS_High;

}
/*----------------------------------------------------------------
                           写命令
----------------------------------------------------------------*/

void Write_Cmd(unsigned char DH,unsigned char DL)
{
        GPIOB->BSRR=1<<8<<16  //LCD_CS_Low;
        |1<<11<<16//LCD_RS_Low;

        |DH
        |(uint8_t)~DH<<16

        |1<<10<<16;//LCD_RW_Low;       
        GPIOB->BSRR=1<<10;  //LCD_RW_High;
       
        GPIOB->BSRR=DL
        |(uint8_t)~DL<<16
        |1<<10<<16;                //LCD_RW_Low;       

        GPIOB->BSRR=1<<10          //LCD_RW_High;
        |1<<8;                                     //LCD_CS_High;
       
}

/*----------------------------------------------------------------
      320*240 LIL9325 液晶控制器 写数据 双8位
          8位数据线为                        GPIOB_Pin_0  到GPIOB_Pin_7
          LCD_CS 片选为                 GPIOB_Pin_8
          LCD_WR 读使能                         GPIOB_Pin_9
          LCD_RS 命令/数据    GPIOB_Pin_11           
----------------------------------------------------------------*/       
void Write_Data(unsigned char DH,unsigned char DL)
{

        GPIOB->BSRR=1<<8<<16                          //LCD_CS_Low;                   片选低  开始
        |1<<11                                                       //        LCD_RS_High;           写数据
        |DH        |((uint8_t) ~DH)<<16                 //        GPIOB->ODR=DH;           写8位数据
        |1<<10<<16;                                                 //        LCD_RW_Low;                      读为低
         
        GPIOB->BSRR=1<<10;                            // LCD_RW_High;             读为高,数据锁存
                                                                                                                  
        GPIOB->BSRR=1<<16<<10                    // LCD_RW_Low;                        读为低
        |DL|((uint8_t) ~DL)<<16;            // GPIOB->ODR=DL;                 写8位数据

        GPIOB->BSRR=1<<10                                // LCD_RW_High;            读为高,数据锁存
        |1<<8;                                                        //LCD_CS_High;                   片选高 结束
}
/*----------------------------------------------------------------
                        延时函数
----------------------------------------------------------------*/
void delayms(unsigned int count)
{
    int i,j;                                                                                
    for(i=0;i<count;i++)                                                                    
       {
             for(j=0;j<260;j++);
       }                                                                                    
}



/*----------------------------------------------------------------
                            液晶初始化
----------------------------------------------------------------*/
void ILI9325_Initial(void)
{
        LCD_CS_High;
        delayms(50);
        LCD_RES_Low;
        delayms(50);
        LCD_RES_High;
        delayms(500);
        Write_Cmd_Data(0x0001,0x0100);
        Write_Cmd_Data(0x0002,0x0700);
        Write_Cmd_Data(0x0003,0x10B0);  // Write_Cmd_Data(0x0003,0x1030);                 Write_Cmd_Data(0x0003,0x10A8)横屏
        Write_Cmd_Data(0x0004,0x0000);
        Write_Cmd_Data(0x0008,0x0207);  
        Write_Cmd_Data(0x0009,0x0000);
        Write_Cmd_Data(0x000A,0x0000);
        Write_Cmd_Data(0x000C,0x0000);
        Write_Cmd_Data(0x000D,0x0000);
        Write_Cmd_Data(0x000F,0x0000);
        //power on sequence VGHVGL
        Write_Cmd_Data(0x0010,0x0000);   
        Write_Cmd_Data(0x0011,0x0007);  
        Write_Cmd_Data(0x0012,0x0000);  
        Write_Cmd_Data(0x0013,0x0000);
        //vgh
        Write_Cmd_Data(0x0010,0x1290);   
        Write_Cmd_Data(0x0011,0x0227);
        //delayms(100);
        //vregiout
        Write_Cmd_Data(0x0012,0x001d); //0x001b
        //delayms(100);
        //vom amplitude
        Write_Cmd_Data(0x0013,0x1500);
        //delayms(100);
        //vom H
        Write_Cmd_Data(0x0029,0x0018);
        Write_Cmd_Data(0x002B,0x000D);
       
        //gamma
        Write_Cmd_Data(0x0030,0x0004);
        Write_Cmd_Data(0x0031,0x0307);
        Write_Cmd_Data(0x0032,0x0002);// 0006
        Write_Cmd_Data(0x0035,0x0206);
        Write_Cmd_Data(0x0036,0x0408);
        Write_Cmd_Data(0x0037,0x0507);
        Write_Cmd_Data(0x0038,0x0204);//0200
        Write_Cmd_Data(0x0039,0x0707);
        Write_Cmd_Data(0x003C,0x0405);// 0504
        Write_Cmd_Data(0x003D,0x0F02);
        //ram
        Write_Cmd_Data(0x0050,0x0000);
        Write_Cmd_Data(0x0051,0x00EF);
        Write_Cmd_Data(0x0052,0x0000);
        Write_Cmd_Data(0x0053,0x013F);  
        Write_Cmd_Data(0x0060,0xA700);
        Write_Cmd_Data(0x0061,0x0001);
        Write_Cmd_Data(0x006A,0x0000);
        //
        Write_Cmd_Data(0x0080,0x0000);
        Write_Cmd_Data(0x0081,0x0000);
        Write_Cmd_Data(0x0082,0x0000);
        Write_Cmd_Data(0x0083,0x0000);
        Write_Cmd_Data(0x0084,0x0000);
        Write_Cmd_Data(0x0085,0x0000);
        //
        Write_Cmd_Data(0x0090,0x0010);
        Write_Cmd_Data(0x0092,0x0600);
        Write_Cmd_Data(0x0093,0x0003);
        Write_Cmd_Data(0x0095,0x0110);
        Write_Cmd_Data(0x0097,0x0000);
        Write_Cmd_Data(0x0098,0x0000);
        Write_Cmd_Data(0x0007,0x0133);
        delayms(10000);
       
       
       
}



/********输出32X32中文字符*********/
void PutGB3232(uint16_t x_point,uint16_t y_point,uint8_t Char_Index[2],uint16_t Font_Color,uint16_t Back_Color)
{
        uint16_t Word_Byte_Index,j,Word_Index;

        LCD_SetPos(x_point, y_point,x_point+32-1,y_point+32-1);                   //定位

        for (Word_Index=0;Word_Index<100;Word_Index++)
        {
                if ((GB_32[Word_Index].Index[0]==Char_Index[0])&&(GB_32[Word_Index].Index[1]==Char_Index[1]))
                {
                        for(Word_Byte_Index=0;Word_Byte_Index<128;Word_Byte_Index++)
                        {
                                uint8_t m=GB_32[Word_Index].Msk[Word_Byte_Index];
                                for(j=0;j<8;j++)
                                {
                                if((m&0x80)==0x80)
                                {
                                        Write_Data_U16(Font_Color);
                                }
                                else
                                {
                                        Write_Data_U16(Back_Color);
                                }
                                m<<=1;
                                }
                        }
                        break;
                }
        }
}
/********输出16X16中文字符*********/
void PutGB1616(uint16_t x_point, uint16_t  y_point, uint8_t c[2],uint16_t fColor,uint16_t bColor)
{
        uint16_t i,j,k;

        LCD_SetPos(x_point, y_point,x_point+16-1,y_point+16-1);                                //定位

        for (k=0;k<100;k++)
        {
                if ((GB_16[k].Index[0]==c[0])&&(GB_16[k].Index[1]==c[1]))
                {
                        for(i=0;i<32;i++)
                        {
                                uint8_t m=GB_16[k].Msk[i];
                                for(j=0;j<8;j++)
                                {
                                        if((m&0x80)==0x80)
                                        {
                                                Write_Data_U16(fColor);
                                        }
                                        else
                                        {
                                                Write_Data_U16(bColor);
                                        }
                                        m<<=1;
                                }
                        }
                        break;
                }
        }
}       
/********输出16X16中文字符串*********/       
void PutGB1616_string(uint16_t x_point, uint16_t  y_point, uint8_t * c,uint16_t fColor,uint16_t bColor)
{
        uint8_t c2[2];                         
        while(*c)
        {
                c2[0]=*c;
                c2[1]=*(c+1);
                PutGB1616((x_point+=16)-16, y_point, c2, fColor, bColor);
                c+=2;
        }
}
/********输出8x16英文字符*********/
void LCD_PutChar8x16(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(x,y,x+8-1,y+16-1);
for(i=0; i<16;i++) {
                unsigned char m=Font8x16[c*16+i];
                for(j=0;j<8;j++) {
                        if((m&0x80)==0x80) {
                                Write_Data_U16(fColor);
                                }
                        else {
                                Write_Data_U16(bColor);
                                }
                        m<<=1;
                        }
                }
}
/********输出8x16英文字符串*********/
void LCD_Putstring8x16(unsigned short x, unsigned short y, char * c, unsigned int fColor, unsigned int bColor)
{
        while(*c)
        {
                LCD_PutChar8x16(x+=8,y, *c, fColor, bColor);
                c++;
        }
}
/********输出20x40数字字符*********/
void LCD_PutChar20x40number(unsigned short x, unsigned short y, char number, unsigned int fColor, unsigned int bColor)
{
        unsigned int i,j;
        LCD_SetPos(x,y,x+24-1,y+40-1);
        for(i=0; i<120;i++)
        {
                unsigned char m=ASCII20x40number[number*120+i];
                for(j=0;j<8;j++)
                {
                        if((m&0x80)==0x80)
                        {
                                Write_Data_U16(fColor);
                        }
                        else
                        {
                                Write_Data_U16(bColor);
                        }
                        m<<=1;
                }
        }
}
/**
  * @brief  画一个长方形
  * @param  x_point:                         长方形左上角的X坐标.
  * @param  y_point:                         长方形左上角的Y坐标.
  * @param  Square_length:                 长方形的长度,x方向增长.
  * @param  Square_high:                 长方形的高度,y方向增长.
  * @param  Color:                                 长主形的填充颜色.
  *   This parameter can be:
  * @retval None
  */                                       
void LCD_Draw_Square(uint16_t x_point, uint16_t y_point,uint16_t Square_length,uint16_t Square_high,uint16_t Color)
{
        uint8_t Color_High_Byte=Color>>8,Color_Low_Byte=Color;                  //把颜色分解成高位字节和低位字节
        uint16_t area=Square_length        * Square_high;                                           //面积=长  *  高. 表示长方形里的点数
        LCD_SetPos(x_point,y_point,x_point+Square_length-1,y_point+Square_high-1);
       
        while(area--)
        {
                Write_Data(Color_High_Byte,Color_Low_Byte);
        }

       
}

看我的程序,或许有帮助.

使用特权

评论回复
板凳
_crystal_|  楼主 | 2011-2-28 16:13 | 只看该作者
还是没有发现自己的问题所在

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

131

帖子

0

粉丝