Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4470124
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: 嵌入式

2011-08-07 14:48:47

附件代码:   1彩屏驱动28_ili9320原始版.rar  

2.8寸屏资料:  2.8寸液晶屏.rar  
              zilio2.rar  

  1. #ifndef __ILI9320_H
  2. #define __ILI9320_H

  3. #include "stm32f10x.h"
  4. #include "delay.h"

  5. #define ID_AM 110

  6. #define ILI932X_CTR_PORT         GPIOB     //FPGA_SPI 选择管脚

  7. #define ILI932X_CS         GPIO_Pin_5 //片选
  8. #define ILI932X_RS         GPIO_Pin_6 //寄存器选择
  9. #define ILI932X_WR              GPIO_Pin_7 //
  10. #define ILI932X_RD            GPIO_Pin_8 //
  11. #define ILI932X_RST GPIO_Pin_9 //复位

  12. #define ILI932X_DATA_PORT GPIOC //16根数据线

  13. #define Set_Cs                ILI932X_CTR_PORT->BSRR = ILI932X_CS;//数据 高
  14. #define Clr_Cs                ILI932X_CTR_PORT->BRR = ILI932X_CS;//数据 低

  15. #define Set_Rs                ILI932X_CTR_PORT->BSRR = ILI932X_RS;//数据 高
  16. #define Clr_Rs                ILI932X_CTR_PORT->BRR = ILI932X_RS;//数据 低

  17. #define Set_nWr                ILI932X_CTR_PORT->BSRR = ILI932X_WR;//数据 高
  18. #define Clr_nWr                ILI932X_CTR_PORT->BRR = ILI932X_WR;//数据 低

  19. #define Set_nRd                ILI932X_CTR_PORT->BSRR = ILI932X_RD;//数据 高
  20. #define Clr_nRd                ILI932X_CTR_PORT->BRR = ILI932X_RD;//数据 低

  21. #define Set_Rst                ILI932X_CTR_PORT->BSRR = ILI932X_RST;//数据 高
  22. #define Clr_Rst                ILI932X_CTR_PORT->BRR = ILI932X_RST;//数据 低



  23. /*定义常见颜色*/
  24. #define red 0x001f
  25. #define blue 0xf800
  26. #define green 0x07e0
  27. #define black 0x0000
  28. #define white 0xffff
  29. #define yellow 0x07ff
  30. #define orange 0x05bf
  31. #define Chocolate4 0x4451
  32. #define Grey 0xefbd//灰色


  33. void Lcd_Configuration(void);
  34. //Lcd初始化及其低级控制函数
  35. void Lcd_Initialize(void);
  36. void LCD_WR_REG(u16 Index,u16 CongfigTemp);
  37. void Lcd_WR_Start(void);

  38. //Lcd高级控制函数
  39. void Lcd_SetCursor(u8 x,u16 y);
  40. void Lcd_Clear(u16 Color);
  41. void Lcd_ClearCharBox(u8 x,u16 y,u16 Color);
  42. void Lcd_SetBox(u8 xStart,u16 yStart,u8 xLong,u16 yLong,u16 x_offset,u16 y_offset);
  43. void Lcd_ColorBox(u8 x,u16 y,u8 xLong,u16 yLong,u16 Color);
  44.        

  45. #endif

  1. #include "ili9320.h"

  2. /****************************************************************
  3. 函数名:Lcd配置函数
  4. 功能:配置所有和Lcd相关的GPIO和时钟
  5. 引脚分配为:
  6. PE——16Bit数据总线
  7. PB5——Lcd_cs
  8. PB6——Lcd_rs
  9. PB7——Lcd_wr
  10. PB8——Lcd_rd
  11. PB9——Lcd_rst

  12. //没有背光PB5——Lcd_blaklight 背光靠场效应管驱动背光模块
  13. *****************************************************************/
  14. void Lcd_Configuration(void)
  15. {
  16.      GPIO_InitTypeDef GPIO_InitStructure;
  17.     //开启响应时钟
  18.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); //时钟使能
  19.     //所有lcd引脚配置为推挽输出

  20.     //16位数据
  21.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  22.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  23.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  24.     GPIO_Init(ILI932X_DATA_PORT, &GPIO_InitStructure);

  25.     //控制脚
  26.     GPIO_InitStructure.GPIO_Pin = ILI932X_CS | ILI932X_RS | ILI932X_WR | ILI932X_RD | ILI932X_RST;
  27.     GPIO_Init(ILI932X_CTR_PORT, &GPIO_InitStructure);
  28.   
  29. //初始化所有管脚
  30.     Set_Cs;
  31.     Set_Rs;
  32.     Set_nWr;
  33.     Set_nRd;
  34.     Set_Rst;
  35.     GPIO_Write(ILI932X_DATA_PORT,0xffff);
  36. }


  37. /******************************************
  38. 函数名:Lcd写命令函数
  39. 功能:向Lcd指定位置写入应有命令或数据
  40. 入口参数:Index 要寻址的寄存器地址
  41.           ConfigTemp 写入的数据或命令值
  42. 返回值:无
  43. ******************************************/
  44. void LCD_WR_REG(u16 Index,u16 CongfigTemp)
  45. {
  46.     Clr_Cs;

  47.     Clr_Rs;
  48.     
  49.     //写命令
  50. //    DataToWrite(Index);
  51.     GPIO_Write(ILI932X_DATA_PORT,Index);
  52.     Clr_nWr;
  53.     //Delay_nus(1);
  54.     Set_nWr;
  55.     Set_Rs;

  56.     //写数据
  57. //    DataToWrite(CongfigTemp);
  58.     GPIO_Write(ILI932X_DATA_PORT,CongfigTemp);
  59.     Clr_nWr;
  60.     //Delay_nus(1);
  61.     Set_nWr;

  62.     Set_Cs;
  63. }

  64. /************************************************
  65. 函数名:Lcd写开始函数
  66. 功能:控制Lcd控制引脚 执行写操作
  67. 入口参数:无
  68. 返回值:无
  69. ************************************************/
  70. void Lcd_WR_Start(void)
  71. {
  72.     Clr_Cs;
  73.     Clr_Rs;
  74. //    DataToWrite(0x0022);
  75.     GPIO_Write(ILI932X_DATA_PORT,0x0022);
  76.     Clr_nWr;
  77.     //Delay_nus(1);
  78.     Set_nWr;
  79.     Set_Rs;
  80. }

  81. /**********************************************
  82. 函数名:Lcd初始化函数
  83. 功能:初始化Lcd
  84. 入口参数:无
  85. 返回值:无
  86. ***********************************************/
  87. void Lcd_Initialize(void)
  88. {
  89.     //配置管脚初始化
  90.     Lcd_Configuration();


  91. //    Lcd_Light_ON;
  92. //    DataToWrite(0xffff);//数据线全高
  93.     GPIO_Write(ILI932X_DATA_PORT,0xffff);
  94.     Set_nWr;
  95.     Set_Cs;
  96.     Set_Rs;
  97.     Set_nRd;
  98.     Set_Rst;
  99.     Set_Rst;

  100.     //复位 ILI9320
  101.     delay_ms(100);
  102.     Clr_Rst;
  103.     delay_ms(50);
  104.     Set_Rst;
  105.     delay_ms(100);
  106.         
  107.   
  108. //    LCD_WR_REG(0x00e5,0x8000);

  109.     LCD_WR_REG(0X0000,0X0001);
  110.     delay_ms(50);
  111.     LCD_WR_REG(0X0010,0X1628);
  112.     LCD_WR_REG(0X0012,0X000e);//0x0006
  113.     LCD_WR_REG(0X0013,0X0A39);
  114.     delay_ms(10);
  115.     LCD_WR_REG(0X0011,0X0040);
  116.     LCD_WR_REG(0X0015,0X0050);
  117.     delay_ms(40);
  118.     LCD_WR_REG(0X0012,0X001e);//16
  119.     delay_ms(40);
  120.     LCD_WR_REG(0X0010,0X1620);
  121.     LCD_WR_REG(0X0013,0X2A39);
  122.     delay_ms(10);
  123.     LCD_WR_REG(0X0001,0X0100);
  124.     LCD_WR_REG(0X0002,0X0300);
  125.     LCD_WR_REG(0X0003,0X0030);//Entry Mode
  126.     LCD_WR_REG(0X0008,0X0202);
  127.     LCD_WR_REG(0X000A,0X0008);
  128.     LCD_WR_REG(0X0030,0X0000);
  129.     LCD_WR_REG(0X0031,0X0402);
  130.     LCD_WR_REG(0X0032,0X0106);
  131.     LCD_WR_REG(0X0033,0X0503);
  132.     LCD_WR_REG(0X0034,0X0104);
  133.     LCD_WR_REG(0X0035,0X0301);
  134.     LCD_WR_REG(0X0036,0X0707);
  135.     LCD_WR_REG(0X0037,0X0305);
  136.     LCD_WR_REG(0X0038,0X0208);
  137.     LCD_WR_REG(0X0039,0X0F0B);
  138.     LCD_WR_REG(0X0041,0X0002);
  139.     LCD_WR_REG(0X0060,0X2700);
  140.     LCD_WR_REG(0X0061,0X0001);
  141.     LCD_WR_REG(0X0090,0X0210);
  142.     LCD_WR_REG(0X0092,0X010A);
  143.     LCD_WR_REG(0X0093,0X0004);
  144.     LCD_WR_REG(0X00A0,0X0100);
  145.     LCD_WR_REG(0X0007,0X0001);
  146.     LCD_WR_REG(0X0007,0X0021);
  147.     LCD_WR_REG(0X0007,0X0023);
  148.     LCD_WR_REG(0X0007,0X0033);
  149.     LCD_WR_REG(0X0007,0X0133);
  150.     LCD_WR_REG(0X00A0,0X0000);
  151. }

  152. /*************************************************
  153. 函数名:Lcd光标起点定位函数
  154. 功能:指定320240液晶上的一点作为写数据的起始点
  155. 入口参数:x 坐标 0~239
  156.           y 坐标 0~319
  157. 返回值:无
  158. *************************************************/
  159. void Lcd_SetCursor(u8 x,u16 y)
  160. {
  161.     LCD_WR_REG(0x20,x);
  162.     LCD_WR_REG(0x21,y);
  163. }


  164. /**********************************************
  165. 函数名:Lcd全屏擦除函数
  166. 功能:将Lcd整屏擦为指定颜色
  167. 入口参数:color 指定Lcd全屏颜色 RGB(5-6-5)
  168. 返回值:无
  169. ***********************************************/
  170. void Lcd_Clear(u16 Color)
  171. {
  172.     u32 temp;
  173.   
  174.     Lcd_SetCursor(0x00, 0x0000);
  175.     LCD_WR_REG(0x0050,0x00);//水平 GRAM起始位置
  176.     LCD_WR_REG(0x0051,239);//水平GRAM终止位置
  177.     LCD_WR_REG(0x0052,0x00);//垂直GRAM起始位置
  178.     LCD_WR_REG(0x0053,319);//垂直GRAM终止位置
  179.     Lcd_WR_Start();
  180.     Set_Rs;
  181.   
  182.     for (temp = 0; temp < 76800; temp++)
  183.     {
  184. //        DataToWrite(Color);
  185.         GPIO_Write(ILI932X_DATA_PORT,Color);
  186.         Clr_nWr;
  187.         Set_nWr;
  188.     }
  189.   
  190.     Set_Cs;
  191. }
  192. /**********************************************
  193. 函数名:Lcd块选函数
  194. 功能:选定Lcd上指定的矩形区域

  195. 注意:xStart和 yStart随着屏幕的旋转而改变,位置是矩形框的四个角

  196. 入口参数:xStart x方向的起始点
  197.           ySrart y方向的终止点
  198.           xLong 要选定矩形的x方向长度
  199.           yLong 要选定矩形的y方向长度
  200. 返回值:无
  201. ***********************************************/
  202. void Lcd_SetBox(u8 xStart,u16 yStart,u8 xLong,u16 yLong,u16 x_offset,u16 y_offset)
  203. {
  204.   
  205. #if ID_AM==000
  206.     Lcd_SetCursor(xStart+xLong-1+x_offset,yStart+yLong-1+y_offset);

  207. #elif ID_AM==001
  208.     Lcd_SetCursor(xStart+xLong-1+x_offset,yStart+yLong-1+y_offset);
  209.      
  210. #elif ID_AM==010
  211.     Lcd_SetCursor(xStart+x_offset,yStart+yLong-1+y_offset);
  212.      
  213. #elif ID_AM==011
  214.     Lcd_SetCursor(xStart+x_offset,yStart+yLong-1+y_offset);
  215.      
  216. #elif ID_AM==100
  217.     Lcd_SetCursor(xStart+xLong-1+x_offset,yStart+y_offset);
  218.      
  219. #elif ID_AM==101
  220.     Lcd_SetCursor(xStart+xLong-1+x_offset,yStart+y_offset);
  221.      
  222. #elif ID_AM==110
  223.     Lcd_SetCursor(xStart+x_offset,yStart+y_offset);
  224.      
  225. #elif ID_AM==111
  226.     Lcd_SetCursor(xStart+x_offset,yStart+y_offset);
  227.      
  228. #endif
  229.      
  230.     LCD_WR_REG(0x0050,xStart+x_offset);//水平 GRAM起始位置
  231.     LCD_WR_REG(0x0051,xStart+xLong-1+x_offset);//水平GRAM终止位置
  232.     LCD_WR_REG(0x0052,yStart+y_offset);//垂直GRAM起始位置
  233.     LCD_WR_REG(0x0053,yStart+yLong-1+y_offset);//垂直GRAM终止位置
  234. }




  235. void Lcd_ColorBox(u8 xStart,u16 yStart,u8 xLong,u16 yLong,u16 Color)
  236. {
  237.     u32 temp;
  238.   
  239.     Lcd_SetBox(xStart,yStart,xLong,yLong,0,0);
  240.     Lcd_WR_Start();
  241.     Set_Rs;
  242.   
  243.     for (temp=0; temp<xLong*yLong; temp++)
  244.     {
  245.     //    DataToWrite(Color);
  246.         GPIO_Write(ILI932X_DATA_PORT,Color);
  247.         Clr_nWr;
  248.         Set_nWr;
  249.     }

  250.     Set_Cs;
  251. }


阅读(4867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~