OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6832|回复: 4

ili9325 怎样初始化,因为硬件电路和原子的板子不同所以驱动的初始化程序不知道怎样写?

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-8-8
在线时间
0 小时
发表于 2014-8-15 20:15:42 | 显示全部楼层 |阅读模式
5金钱
下满是我写的程序硬件的连接时: B0-DB15B7-15&A0-7  
                                                  DB16,DB17分辨接的PA11和PA12
                                                  CSB0
                                                  RSB1
                                                  WRB2
                                                  RESTA8
                                                  RD:接的VCC,3.3v
                                               
#include "stm32f10x.h"
#include"LCD_driver.h"
#include"chinese.h"
#include"char.h"
#include "delay.h"

void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//启动GPIO模块时钟
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
//把调试设置普通IO口
  GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //所有GPIO为同一类型端口
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出的最大频率为50HZ
  GPIO_Init(GPIOA, &GPIO_InitStructure);   //初始化GPIOA端口
  GPIO_Init(GPIOB, &GPIO_InitStructure);   //初始化GPIOB端口

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ; // 选择PB3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //开漏输入
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出的最大频率为50HZ
  GPIO_Init(GPIOB, &GPIO_InitStructure);   //初始化GPIOB端口

  GPIO_Write(GPIOA,0xffff);  //将GPIOA 16个端口全部置为高电平
  GPIO_Write(GPIOB,0xffff);  //将GPIOB 16个端口全部置为高电平

   LCD_RST(1);
   delay_ms(5);
LCD_RST(0);
delay_ms(5);
LCD_RST(1);
delay_ms(5);

LCD_CS(0);  //打开片选使能
                                                                                                                                                                                                                                                      
      delay_ms(10);

        LCD_Write_COM(0x00,0x83);           
        LCD_Write_DATA(0x00,0x02); //TESTM=1 
             
        LCD_Write_COM(0x00,0x85);  
        LCD_Write_DATA(0x00,0x03);  //VDC_SEL=011
        LCD_Write_COM(0x00,0x8B);  
        LCD_Write_DATA(0x00,0x01); 
        LCD_Write_COM(0x00,0x8C);  
        LCD_Write_DATA(0x00,0x93);//STBA[7]=1,STBA[5:4]=01,STBA[1:0]=11
        
        LCD_Write_COM(0x00,0x91);  
        LCD_Write_DATA(0x00,0x01); //DCDC_SYNC=1
        
        LCD_Write_COM(0x00,0x83);  
        LCD_Write_DATA(0x00,0x00); //TESTM=0
         //Gamma Setting

        LCD_Write_COM(0x00,0x3E);  
        LCD_Write_DATA(0x00,0xB0);
        LCD_Write_COM(0x00,0x3F);  
        LCD_Write_DATA(0x00,0x03); 
        LCD_Write_COM(0x00,0x40);  
        LCD_Write_DATA(0x00,0x10); 
        LCD_Write_COM(0x00,0x41);  
        LCD_Write_DATA(0x00,0x56); 
        LCD_Write_COM(0x00,0x42);  
        LCD_Write_DATA(0x00,0x13); 
        LCD_Write_COM(0x00,0x43);  
        LCD_Write_DATA(0x00,0x46); 
        LCD_Write_COM(0x00,0x44);  
        LCD_Write_DATA(0x00,0x23);
        LCD_Write_COM(0x00,0x45);  
        LCD_Write_DATA(0x00,0x76); 
        LCD_Write_COM(0x00,0x46);  
        LCD_Write_DATA(0x00,0x00); 
        LCD_Write_COM(0x00,0x47);  
        LCD_Write_DATA(0x00,0x5E); 
        LCD_Write_COM(0x00,0x48);  
        LCD_Write_DATA(0x00,0x4F);
        LCD_Write_COM(0x00,0x49);  
        LCD_Write_DATA(0x00,0x40);
//**********Power On sequence************
        
        LCD_Write_COM(0x00,0x17);  
        LCD_Write_DATA(0x00,0x91); 
       
        LCD_Write_COM(0x00,0x2B);  
        LCD_Write_DATA(0x00,0xF9); 
        delay_ms(10);
        
        LCD_Write_COM(0x00,0x1B);  
        LCD_Write_DATA(0x00,0x14); 
        
        LCD_Write_COM(0x00,0x1A);  
        LCD_Write_DATA(0x00,0x11); 
              
        LCD_Write_COM(0x00,0x1C);  
        LCD_Write_DATA(0x00,0x06);  //0d
        
        LCD_Write_COM(0x00,0x1F);  
        LCD_Write_DATA(0x00,0x42);
        delay_ms(20);
        
        LCD_Write_COM(0x00,0x19);  
        LCD_Write_DATA(0x00,0x0A); 
     
        LCD_Write_COM(0x00,0x19);  
        LCD_Write_DATA(0x00,0x1A); 
        delay_ms(40);
        
        
        LCD_Write_COM(0x00,0x19);  
        LCD_Write_DATA(0x00,0x12); 
        delay_ms(40);
        
        LCD_Write_COM(0x00,0x1E);  
        LCD_Write_DATA(0x00,0x27);
        delay_ms(100);   
        
        
       //**********DISPLAY ON SETTING***********
        
        LCD_Write_COM(0x00,0x24);  
        LCD_Write_DATA(0x00,0x60);
        
        LCD_Write_COM(0x00,0x3D);  
        LCD_Write_DATA(0x00,0x40); 
        
        LCD_Write_COM(0x00,0x34);  
        LCD_Write_DATA(0x00,0x38);
        
        LCD_Write_COM(0x00,0x35);  
        LCD_Write_DATA(0x00,0x38);
        
        LCD_Write_COM(0x00,0x24);  
        LCD_Write_DATA(0x00,0x38);
        delay_ms(40);
        
        LCD_Write_COM(0x00,0x24);  
        LCD_Write_DATA(0x00,0x3C); 
        
        LCD_Write_COM(0x00,0x16);  
        LCD_Write_DATA(0x00,0x1C); 
        
        LCD_Write_COM(0x00,0x01);  
        LCD_Write_DATA(0x00,0x06);
        
        LCD_Write_COM(0x00,0x55);  
        LCD_Write_DATA(0x00,0x00); 


LCD_Write_COM(0x00,0x02);           
LCD_Write_DATA(0x00,0x00);
LCD_Write_COM(0x00,0x03);           
LCD_Write_DATA(0x00,0x00);
LCD_Write_COM(0x00,0x04);           
LCD_Write_DATA(0x00,0x00);
LCD_Write_COM(0x00,0x05);           
LCD_Write_DATA(0x00,0xef); 

LCD_Write_COM(0x00,0x06);           
LCD_Write_DATA(0x00,0x00);
LCD_Write_COM(0x00,0x07);           
LCD_Write_DATA(0x00,0x00);
LCD_Write_COM(0x00,0x08);           
LCD_Write_DATA(0x00,0x01);
LCD_Write_COM(0x00,0x09);           
   LCD_Write_DATA(0x00,0x8f); 

   LCD_Write_COM(0x00,0x22);  


    LCD_CS(1); 
}  



void LCD_Writ_Bus(char VH,char VL)   //并行数据写入函数
{
    GPIOA->BSRR = VH & 0x00ff;   //高位P1口
    GPIOA->BRR  = (~VH) & 0x00ff;
    GPIOB->BSRR = (VL<<8) & 0xff00;   //低位P0口
    GPIOB->BRR  = (~(VL)<<8) & 0xff00;
LCD_WR(0);
LCD_WR(1); 
}



void LCD_Write_COM(char VH,char VL) //发送命令
{
    LCD_RS(0);
LCD_Writ_Bus(VH,VL);
}


void LCD_Write_DATA(char VH,char VL) //发送数据
{
    LCD_RS(1);
LCD_Writ_Bus(VH,VL);
}





 void LCD_Write_COLOR(char V1,char V2,char V3) //发送数据
{
LCD_RS(1);  
LCD_DB17((V1 >> 5) & 0x01);   
LCD_DB16((V1 >> 4) & 0X01);
LCD_Writ_Bus(((V2 >> 2) & 0x0f)+((V1 << 4)& 0xf0),((V2 << 6)& 0xc0) + (V3 & 0x3f));  //rgb 666 转 288
   
}   


void Pant(char V1,char V2,char V3)
{
int i,j;
LCD_CS(0);  //打开片选使能
Address_set(0,0,239,399);
    for(i=0;i<400;i++)
{
 for (j=0;j<240;j++)
  {
        LCD_Write_COLOR(V1,V2,V3);
   }

 }
     LCD_CS(1);  //关闭片选使能
}


void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{  

    LCD_Write_COM(0x00,0x02);LCD_Write_DATA(x1,x1>>8);   //开始X
LCD_Write_COM(0x00,0x03);LCD_Write_DATA(x1>>8,x1);

LCD_Write_COM(0x00,0x06);LCD_Write_DATA(y1,y1>>8);  //开始Y
LCD_Write_COM(0x00,0x07);LCD_Write_DATA(y1>>8,y1);

    LCD_Write_COM(0x00,0x04);LCD_Write_DATA(x2,x2>>8);   //结束X
LCD_Write_COM(0x00,0x05);LCD_Write_DATA(x2>>8,x2);

LCD_Write_COM(0x00,0x08);LCD_Write_DATA(y2,y2>>8);   //结束Y
LCD_Write_COM(0x00,0x09);LCD_Write_DATA(y2>>8,y2);

LCD_Write_COM(0x00,0x22);  
}


/**********************************************************

  写汉字子函数

**********************************************************/
void ChineseChar(uint x,uint y,int size,uint For_color,uint Bk_color ,char c)
{
   int e=0,i,j;
   int  ed;
   
   unsigned int  ncols;
   unsigned int  nrows;
   unsigned int  nbytes;

   unsigned char *pfont;
   unsigned char *pchar;
   unsigned char *fonttable[]={(unsigned char *)hz12,(unsigned char *)hz16,(unsigned char *)hz24};
   
   pfont=(unsigned char *)fonttable[size];

   if(size==0)
   {
     ncols =12-1;
     nrows =12-1;
     nbytes =24; //(12*12)/72
   }
   else
   if(size==1)
   {
     ncols =16-1;
     nrows =16-1;
     nbytes =32;  //(16*16)/72
   }
   else
   if(size==2)
   {
     ncols =24-1;
     nrows =24-1;
     nbytes =72;   //(24*24)/72
   }
   
   pchar=pfont + (nbytes*(c-1));

   Address_set(x, y, x+nrows, y+ncols);
   
   for(i=0;i<nbytes;i++)
   {
     ed=*pchar++;
if(size==0)
{
       if(i%2==0)
       e=8;
       else
       e=4;
}
else
e=8;
     
     for(j=0;j<e;j++)
     if((ed>>j)&0x01)
     {
       LCD_Write_DATA(For_color>>8,For_color );  //textcolor
}
     else
     {
       LCD_Write_DATA(Bk_color>>8,Bk_color);  //backcolor
}
  }
}

/*********************************************************/

/**********************************************************

  字符显示子函数

**********************************************************/
void LCD_ShowChar(uint x,uint y,uint For_color,uint Bk_color, char ch)
{       
   unsigned char temp;
   unsigned char pos,t;
   unsigned char  CHAR_W,CHAR_H;
   
   CHAR_W = 8;         //8*16
   CHAR_H = 16;

   if(x>(LCD_SIZE_X-CHAR_W)||y>(LCD_SIZE_Y-CHAR_H))
   return;
   
   Address_set(x, y, x+CHAR_W-1, y+CHAR_H-1);
   ch = ch-32;                       //按照ASCII编码顺序的到相应字母的编码

   for(pos=0;pos<CHAR_H;pos++)  
   {
      temp= Font8x16[ch][pos];
      
      for(t=0;t<CHAR_W;t++)
      {                 
   if(temp&0x80)
   LCD_Write_DATA(For_color>>8 , For_color  );  //textcolor
   else 
   LCD_Write_DATA(Bk_color>>8 , Bk_color );  //backcolor
        temp<<=1; 
      }
 
   }
}  

/**********************************************************
 显示字符串子函数

 x,y:起点坐标  
 *p:字符串起始地址

**********************************************************/

void LCD_ShowString(uint x,uint y,uint For_color,uint Bk_color,char *p)
{         
   while(*p!='\0')
   {       
     LCD_ShowChar(x,y,For_color,Bk_color,*p);
    // x+=8;
x+=8;
     p++;
   } }




*******************************************************
LCD_driver
*******************************************************
#define LCD_RST_PIN    GPIO_Pin_8 //RST 对应单片机引脚定义 P3^2 / 对应STM32的 PA8

#define LCD_WR_PIN     GPIO_Pin_2 //WR  对应单片机引脚定义 P2^5 / 对应STM32的 PB2
#define LCD_RS_PIN     GPIO_Pin_1 //RD  对应单片机引脚定义 P2^6 / 对应STM32的 PB1
#define LCD_CS_PIN     GPIO_Pin_0 //CS  对应单片机引脚定义 P2^7 / 对应STM32的 PB0

#define LCD_DB17_PIN   GPIO_Pin_12   //DB17 对应单片机引脚定义 P3^4 / 对应STM32的 PA12
#define LCD_DB16_PIN   GPIO_Pin_11   //DB16 对应单片机引脚定义 P3^3 / 对应STM32的 PA11

#define    LCD_RST(x)  x ? GPIO_SetBits(GPIOA, LCD_RST_PIN):   GPIO_ResetBits(GPIOA, LCD_RST_PIN) //自己定义位操作函数

#define    LCD_WR(x)   x ? GPIO_SetBits(GPIOB, LCD_WR_PIN) :   GPIO_ResetBits(GPIOB, LCD_WR_PIN)//三目运算,需经过判断
#define    LCD_RS(x)   x ? GPIO_SetBits(GPIOB, LCD_RS_PIN) :   GPIO_ResetBits(GPIOB, LCD_RS_PIN)
#define    LCD_CS(x)   x ? GPIO_SetBits(GPIOB, LCD_CS_PIN) :   GPIO_ResetBits(GPIOB, LCD_CS_PIN)

#define    LCD_DB17(x)   x ? GPIO_SetBits(GPIOA, LCD_DB17_PIN) :   GPIO_ResetBits(GPIOA, LCD_DB17_PIN)
#define    LCD_DB16(x)   x ? GPIO_SetBits(GPIOA, LCD_DB16_PIN) :   GPIO_ResetBits(GPIOA, LCD_DB16_PIN)
#define  LCD_SIZE_X 240
#define  LCD_SIZE_Y 400    //设置分辨率


//颜色设置
#define WHITE         0xFFFF
#define BLACK         0x0000  
#define BLUE         0x001F  
#define BRED             0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED           0xF800
#define MAGENTA       0xF81F
#define GREEN         0x07E0
#define CYAN           0x7FFF
#define YELLOW         0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY   0X8430 //灰色

//GUI颜色

#define DARKBLUE       0X01CF //深蓝色
#define LIGHTBLUE       0X7D7C //浅蓝色  
#define GRAYBLUE       0X5458 //灰蓝色
//以上三色为PANEL的颜色 
 
#define LIGHTGREEN     0X841F //浅绿色 
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)
   

void LCD_Init(void);
void LCD_ShowString(uint x,uint y,uint For_color,uint Bk_color,char *p);
void LCD_ShowChar(uint x,uint y,uint For_color,uint Bk_color, char ch);
void ChineseChar(uint x,uint y,int size,uint For_color,uint Bk_color ,char c);
void delayms(int count) ;
void LCD_Write_DATA18(char x,char y ,char VH,char VL);
void LCD_Writ_Bus(char VH,char VL);
void LCD_Writ_Bus(char VH,char VL);
void LCD_Write_COM(char VH,char VL);
void LCD_Write_DATA(char VH,char VL);
void LCD_Write_COLOR(char V1,char V2,char V3);
void Pant(char V1,char V2,char V3);
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2);
void display_pic(void);
****************************************************************************
main函数表 
****************************************************************************
 /*********************************************************************
*                                                                     *
*          STM32- 3.2寸TFT液晶屏字符和汉字显示程序                               *
*              (  普中科技  )                                       *
        
***********************************************************************/
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "LCD_driver.h"
#include "math.h"

/******************************** 变量定义 ---------------------------------------------------------*/

int main(void)
{  

   LCD_Init();
   LED_Init();
   delay_init();
   
      Pant(0x00,0x3f,0x00); //绿色 
 //  ant18(0,0,0x0f,0xc0);
   LCD_CS(0);  //打开片选使能
   ChineseChar(14+46,10,2,BLACK,WHITE,1); //普
   ChineseChar(46+46,10,2,BLACK,WHITE,2); //中
   ChineseChar(78+46,10,2,BLACK,WHITE,3); //科
   ChineseChar(110+46,10,2,BLACK,WHITE,4); //技

 LCD_CS(1);    //关闭片选使能


while(1);

}


这是我的部分程序,其它部分用的是原子的,现在不知道程序哪里有问题,找了一天了,求大神帮忙,我的液晶屏是240*400的,26万色




最佳答案

查看完整内容[请看2#楼]

液晶从哪买的? 直接问卖家要初始化代码,然后就复制黏贴就是了.
玩也是一种学习.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-15 20:15:43 | 显示全部楼层
液晶从哪买的?
直接问卖家要初始化代码,然后就复制黏贴就是了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-8-8
在线时间
0 小时
 楼主| 发表于 2014-8-15 20:15:43 | 显示全部楼层
回复【3楼】正点原子:
---------------------------谢谢,问题已经解决了,液晶的驱动型号被我弄错,他的型号是HX8352,改了几个函数,这个程序就能用了-----
玩也是一种学习.
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-8-8
在线时间
0 小时
 楼主| 发表于 2014-8-17 10:38:24 | 显示全部楼层
没人???????????????????????????????????????????????????????????
玩也是一种学习.
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2015-1-22
在线时间
1 小时
发表于 2015-1-30 14:31:59 | 显示全部楼层
你好,可以分享一下"chinese.h","char.h"这两个文件吗?
人傻,话少,死得早
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-26 07:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表