1、移植UCGUI操作系统到LY-STM32开发板上

1、

2、程序例程:

  1 /*************************************************************************************************************************************
  2 *
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7
  8 #include "pbdata.h"//调用自定义公共函数库
  9
 10
 11 /*********************************************************************************
 12 *
 13 * 初始化操作
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系统时钟初始化函数声明
 17 void GPIO_Configuration(void);//GPIO初始化函数声明
 18 void NVIC_Configuration(void);//中断优先级配置函数声明
 19 void USART_Configuration(void);//串口配置函数声明
 20
 21
 22
 23
 24 /********************************************************************************
 25 *
 26 *  函数名称:main(void)
 27 *  函数功能:主函数
 28 *  函数说明:不能用void定义主函数
 29 *
 30 ********************************************************************************/
 31 int main(void)//void不能void定义主函数
 32 {
 33
 34     RCC_Configuration();    //系统时钟初始化
 35
 36     GPIO_Configuration();//端口初始化
 37
 38     USART_Configuration();//串口配置
 39
 40     NVIC_Configuration();//中断优先级配置
 41
 42     FSMC_Configuration();//FSMC配置
 43
 44     ILI9325_Init();//LCD配置
 45
 46
 47     GUI_Init();//GUI初始化
 48   GUI_SetBkColor(GUI_BLUE);//设置背景颜色为蓝色
 49   GUI_Clear();//清屏
 50     GUI_DispStringAt("liubo",40,150);//显示字符
 51
 52
 53
 54     /*主程序,每次隔1s显示不同的颜色*/
 55       while(1);
 56
 57 }
 58
 59
 60
 61
 62 /********************************************************************************
 63 *
 64 *  函数名称:RCC_Configuration(void)
 65 *  函数功能:系统时钟高初始化函数
 66 *
 67 ********************************************************************************/
 68     void RCC_Configuration(void)//系统时钟高初始化函数
 69   {
 70
 71     SystemInit();//系统初始化
 72     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//串口对应GPIO时钟使能
 73         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口时钟使能
 74         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//引脚复用
 75
 76         /*LCD使用的引脚配置时钟*/
 77         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
 78       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
 79       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
 80
 81         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE);//FSMC时钟配置
 82
 83
 84     }
 85
 86
 87
 88 /*******************************************************************************
 89 *
 90 * 函数名称:GPIO_Configuration(void)
 91 * 函数功能:GPIO初始化函数
 92 *
 93 ********************************************************************************/
 94
 95     void GPIO_Configuration(void)//GPIO初始化函数
 96   {
 97
 98
 99 /*串口引脚配置*/
100         GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
101
102 /*输出引脚配置*/
103         /*结构体变量赋值*/
104       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;////引脚配置TX
105       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
106         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//发送要配置成复用推挽输出
107         /*对应的GPIO初始化*/
108       GPIO_Init(GPIOA,&GPIO_InitStructure);
109
110
111 /*输入引脚配置*/
112         /*结构体变量赋值*/
113       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;////引脚配置RX
114         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//接收引脚配置成浮空输入
115         /*对应的GPIO初始化*/
116       GPIO_Init(GPIOA,&GPIO_InitStructure);
117
118
119
120 /*FSMC管脚初始化*/
121   /*结构体变量赋值*/
122     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//引脚配置
123     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//频率配置
124     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//输出
125     /*对应的GPIO初始化*/
126     GPIO_Init(GPIOD,&GPIO_InitStructure);//完成初始化
127
128     GPIO_SetBits(GPIOD,GPIO_Pin_13);//打开背光
129     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//复位
130     GPIO_Init(GPIOE,&GPIO_InitStructure);
131
132 /*启用fsmc复用功能,复用上拉模式*/
133     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_14 //D0
134                                 |GPIO_Pin_15 //D1
135                                 |GPIO_Pin_0     //D2
136                                 |GPIO_Pin_1     //D3
137                                 |GPIO_Pin_8     //D13
138                                 |GPIO_Pin_9     //D14
139                                 |GPIO_Pin_10;//D15
140     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
141     GPIO_Init(GPIOD,&GPIO_InitStructure);
142
143     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7     //D4
144                                 |GPIO_Pin_8     //D5
145                                 |GPIO_Pin_9     //D6
146                                 |GPIO_Pin_10 //D7
147                                 |GPIO_Pin_11 //D8
148                                 |GPIO_Pin_12 //D9
149                                 |GPIO_Pin_13 //D10
150                                 |GPIO_Pin_14 //D11
151                                 |GPIO_Pin_15;//D12
152     GPIO_Init(GPIOE,&GPIO_InitStructure);
153
154
155     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11 //RS
156                                 |GPIO_Pin_4     //nOE
157                                 |GPIO_Pin_5; //nWE
158     GPIO_Init(GPIOD,&GPIO_InitStructure);
159
160     GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7; //NE1
161     GPIO_Init(GPIOD,&GPIO_InitStructure);
162
163
164
165
166 }
167
168
169
170
171
172 /****************************************************************************
173 *
174 *  函数名称:NVIC_Configuration(void)
175 *  函数功能:配置中断优先级
176 *
177 ****************************************************************************/
178
179 void NVIC_Configuration(void)
180 {
181   NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量
182
183   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组
184
185   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
186   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
187   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级
188   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
189
190   NVIC_Init(&NVIC_InitStructure);//初始化
191 }
192
193
194 /*********************************************************************************
195 *
196 *  函数名称:USART_Configuration(void)
197 *  函数功能:串口配置函数
198 *
199 *********************************************************************************/
200 void USART_Configuration(void)
201 {
202 /*定义串口配置结构体变量*/
203         USART_InitTypeDef USART_InitStructure;//定义一个串口配置结构体变量
204
205
206 /*结构体变量赋值*/
207     USART_InitStructure.USART_BaudRate = 9600;//波特率9600
208     USART_InitStructure.USART_WordLength = USART_WordLength_8b;//位宽,8位
209     USART_InitStructure.USART_StopBits = USART_StopBits_1;//停止位1
210     USART_InitStructure.USART_Parity = USART_Parity_No;//不奇偶校验
211     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//流控禁止
212     USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;//发送使能
213
214
215 /*发送串口配置初始化*/
216     USART_Init(USART1, &USART_InitStructure);
217
218
219 /*打开串口接收中断*/
220       USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//当接收到数据时,会产生中断
221
222
223 /*打开串口*/
224     USART_Cmd(USART1,ENABLE);//串口使能,打开
225
226 /*清空中断标志位*/
227     USART_ClearFlag(USART1,USART_FLAG_TC);
228 }
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264     

/****************************************************************************************************************
*
* 文件名称:pbdata.c
* 文件功能:自定义函数或者全局变量的初始化
*
****************************************************************************************************************/

/*头文件声明*/
#include "pbdata.h"

/********************************************************************************************
*
* 自定义全局变量
*
********************************************************************************************/
u8 dt=0;

/******************************************************************************************
*
* 自定义函数
*
******************************************************************************************/

/*************************************
*
*  时钟配置
*  HSE作为PLL时钟
*  PLL作为SYSCLK
*
**************************************/
void RCC_HSE_Configuration(void)
{
   RCC_DeInit(); //将外设RCC寄存器重设为缺省值
   RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振HSE,HSE晶振打开ON

   if(RCC_WaitForHSEStartUp() == SUCCESS)//等待HSE起震,SUCCESS:HSE晶振稳定且就绪
    { 

   RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟
   RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟
   RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟    

   RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);///设置PLL时钟源及倍频系数
   RCC_PLLCmd(ENABLE); //使能PLL
   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; ///检查指定的RCC标志位(PLL准备好标志)设置是否

   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);  //设置系统时钟
   while(RCC_GetSYSCLKSource() != 0x08);     //0x08:PLL作为系统时钟

 }
} 

/**************************************************
*
*  普通延时函数
*
***************************************************/
void delay(u32 nCount)
{
    for(;nCount!=0;nCount--);
}

/**************************************************
*
*  函数名称:delay_us(u32 nus)
*  函数功能:微秒延时函数
*  输入参数:输入值为延时us
*
***************************************************/
void delay_us(u32 nus)
{
    u32 temp;
    SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次
    SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
    SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟

    do
    {
          temp=SysTick->CTRL;//标志位,等到一直减到0
         }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达

    SysTick->CTRL=0x00; //关闭计数器
    SysTick->VAL =0X00; //清空计数器
}

/***************************************************
*
* 函数名称:delay_ms(u16 nms)
* 函数功能:毫秒级延时
* 输入参数:输入值位延时ms
*
****************************************************/
void delay_ms(u16 nms)
{
    u32 temp;
    SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次
    SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
    SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟

    do
    {
          temp=SysTick->CTRL;//标志位,等到一直减到0
         }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达

    SysTick->CTRL=0x00; //关闭计数器
    SysTick->VAL =0X00; //清空计数器
}

/****************************************************
*
* 重定义printf函数部分
*
****************************************************/
int fputc(int ch,FILE *F)
{

    USART_SendData(USART1,(u8)ch);

    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待发送完成,判断标志位

    return ch;
}

 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名称:pbdata.h
 5 * 文件功能:自定义的函数和全局变量的声明头文件
 6 *
 7 ***************************************************************************************************/
 8
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11
12
13
14
15
16 /********************************************************************
17 *
18 *  调用的头文件放在这里
19 *
20 ********************************************************************/
21 #include "stm32f10x.h"
22
23
24 #include "stm32f10x_rcc.h"
25 #include "stm32f10x_gpio.h"
26 #include "misc.h"
27 #include "stm32f10x_adc.h"
28 #include "stm32f10x_bkp.h"
29 #include "stm32f10x_can.h"
30 #include "stm32f10x_cec.h"
31 #include "stm32f10x_dac.h"
32 #include "stm32f10x_dbgmcu.h"
33 #include "stm32f10x_dma.h"
34 #include "stm32f10x_exti.h"
35 #include "stm32f10x_flash.h"
36 #include "stm32f10x_fsmc.h"
37 #include "stm32f10x_i2c.h"
38 #include "stm32f10x_iwdg.h"
39 #include "stm32f10x_pwr.h"
40 #include "stm32f10x_rtc.h"
41 #include "stm32f10x_sdio.h"
42 #include "stm32f10x_spi.h"
43 #include "stm32f10x_tim.h"
44 #include "stm32f10x_usart.h"
45 #include "stm32f10x_wwdg.h"
46
47
48 #include "lcd_ILI9325.h"//lcd配置
49 #include "stm32_fsmc.h"//fsmc通信
50
51 #include "stdio.h"
52
53 #include "GUI.h"
54
55
56 /********************************************************************
57 *
58 *  自定义全局变量声明
59 *
60 ********************************************************************/
61 extern u8 dt;
62
63
64
65
66
67 /********************************************************************
68 *
69 *  自定义全函数声明
70 *
71 ********************************************************************/
72 void delay(u32 nCount);
73 void delay_us(u32 nus);
74 void delay_ms(u16 nms);
75 int fputc(int ch,FILE *F);
76
77
78
79 #endif

 1 /*************************************************************************************************************************************
 2 *
 3 *  文件名称:LCDConf.h
 4 *  文件功能:LCD配置文件
 5 *
 6 ***************************************************************************************************************************************/
 7
 8 #ifndef LCDCONF_H
 9 #define LCDCONF_H
10
11
12
13
14
15
16
17
18 /*********************************************************************
19 *
20 *  LCD基本配置
21 *
22 **********************************************************************/
23
24 /*触摸屏大小设置,3.2寸:240*320*/
25 #define LCD_XSIZE      (320)
26 #define LCD_YSIZE      (240)
27
28 #define LCD_BITSPERPIXEL (16)//像素
29 #define LCD_SWAP_RB   (1) //红蓝转换
30 #define LCD_CONTROLLER  9325//驱动
31
32
33 #endif /* LCDCONF_H */

 1 /*************************************************************************************************************************************
 2 *
 3 *  文件名称:GUIConf.h
 4 *  文件功能:GUI配置文件
 5 *
 6 ***************************************************************************************************************************************/
 7
 8 /*********************************************************************************
 9 *
10 * 宏定义部分
11 *
12 *********************************************************************************/
13
14 #ifndef GUICONF_H
15 #define GUICONF_H
16
17 #define GUI_OS                    (0)  //UCOS操作系统支持定义,1打开,0关闭
18 #define GUI_SUPPORT_TOUCH         (0)  //触摸屏支持定义,1打开,0关闭
19 #define GUI_SUPPORT_MOUSE         (0)  //鼠标支持,1打开,0关闭
20 #define GUI_SUPPORT_UNICODE       (0)  //字符显示支持,1打开,0关闭
21
22
23
24 #define GUI_DEFAULT_FONT          &GUI_Font6x8   //字体设置
25 #define GUI_ALLOC_SIZE            12500  //动态内存管理
26
27
28
29 #define GUI_WINSUPPORT            1  //视窗管理,1打开,0关闭
30 #define GUI_SUPPORT_MEMDEV        1  //内存管理,1打开,0关闭
31 #define GUI_SUPPORT_AA            1  //抗锯齿,1打开,0关闭
32
33
34
35
36 #undef GUIDEMO_EN
37 #undef APPLICATION_EN
38 #define GUIDEMO_EN                   1 /* DemoTask */
39 #define APPLICATION_EN   !(GUIDEMO_EN) /* AppTask */
40
41
42
43 #endif  /* Avoid multiple inclusion */
44
45
46                                                                                                                                                                                                                                                                                                                                                                                                                                                              

  1 /*************************************************************************************************************************************
  2 *
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7
  8
  9
 10
 11
 12 #include <stddef.h>
 13 #include "LCD_Private.h"      /* private modul definitions & config */
 14 #include "GUI_Private.h"
 15 #include "GUIDebug.h"
 16 #include "pbdata.h"
 17
 18
 19
 20
 21
 22 /*********************************************************************************
 23 *
 24 *  函数名称:LCD_L0_SetPixelIndex(int x,int y,int PixelIndex)
 25 *  函数功能:设置点的颜色
 26 *
 27 *********************************************************************************/
 28
 29 void LCD_L0_SetPixelIndex(int x,int y,int PixelIndex)
 30 {
 31     LCD_SetPoint(x,y,PixelIndex);
 32 }
 33
 34
 35
 36
 37
 38
 39
 40
 41 /*********************************************************************************
 42 *
 43 *  函数名称:LCD_L0_GetPixelIndex(int x,int y)
 44 *  函数功能:获得一个点
 45 *
 46 *********************************************************************************/
 47 unsigned int LCD_L0_GetPixelIndex(int x,int y)
 48 {
 49     return LCD_GetPoint(x,y);
 50 }
 51
 52
 53
 54
 55
 56
 57
 58
 59 /*********************************************************************************
 60 *
 61 *  函数名称:LCD_L0_Init(void)
 62 *  函数功能:LCD初始化驱动
 63 *
 64 *********************************************************************************/
 65 int LCD_L0_Init(void)
 66 {
 67     ILI9325_Init();
 68     return 0;
 69 }
 70
 71
 72
 73
 74
 75
 76
 77 /*********************************************************************************
 78 *
 79 *  函数名称:LCD_L0_XorPixel(int x,int y)
 80 *  函数功能:
 81 *
 82 *********************************************************************************/
 83 void LCD_L0_XorPixel(int x,int y)
 84 {
 85     LCD_PIXELINDEX Index = LCD_GetPoint(x,y);
 86     LCD_SetPoint(x,y,LCD_NUM_COLORS-1-Index);
 87 }
 88
 89
 90
 91
 92
 93
 94
 95 /*********************************************************************************
 96 *
 97 *  函数名称:LCD_L0_DrawHLine(int x0,int y,int x1)
 98 *  函数功能:画横线
 99 *
100 *********************************************************************************/
101 void LCD_L0_DrawHLine(int x0,int y,int x1)
102 {
103     GUI_Line(x0,y,x1,y,LCD_COLORINDEX);
104 }
105
106
107
108
109
110
111
112 /*********************************************************************************
113 *
114 *  函数名称:LCD_L0_DrawVLine(int x,int y0,int y1)
115 *  函数功能:画竖线
116 *
117 *********************************************************************************/
118 void LCD_L0_DrawVLine(int x,int y0,int y1)
119 {
120     GUI_Line(x,y0,x,y1,LCD_COLORINDEX);
121 }
122
123
124
125
126
127
128 /*********************************************************************************
129 *
130 *  函数名称:LCD_L0_FillRect(int x0, int y0, int x1, int y1)
131 *  函数功能:画矩形
132 *
133 *********************************************************************************/
134
135 void LCD_L0_FillRect(int x0, int y0, int x1, int y1)
136 {
137 #if !LCD_SWAP_XY
138   for (; y0 <= y1; y0++) {
139     LCD_L0_DrawHLine(x0,y0, x1);
140   }
141 #else
142   for (; x0 <= x1; x0++) {
143     LCD_L0_DrawVLine(x0,y0, y1);
144   }
145 #endif
146 }
147
148
149
150
151
152
153
154 /*********************************************************************************
155 *
156 *  函数名称:DrawBitLine1BPP
157 *  函数功能:位图
158 *
159 *********************************************************************************/
160 void DrawBitLine1BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans)
161 {
162   LCD_PIXELINDEX pixels;
163   LCD_PIXELINDEX Index0 = *(pTrans+0);
164   LCD_PIXELINDEX Index1 = *(pTrans+1);
165 /*
166 // Jump to right entry point
167 */
168   pixels = *p;
169   switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)) {
170   case 0:
171     #if defined (SETNEXTPIXEL)   /* Optimization ! */
172       x+=Diff;
173       LCD_SetCursor(x,y);
174     #endif
175     switch (Diff&7) {
176     case 0:
177       goto WriteBit0;
178     case 1:
179       goto WriteBit1;
180     case 2:
181       goto WriteBit2;
182     case 3:
183       goto WriteBit3;
184     case 4:
185       goto WriteBit4;
186     case 5:
187       goto WriteBit5;
188     case 6:
189       goto WriteBit6;
190     case 7:
191       goto WriteBit7;
192     }
193     break;
194   case LCD_DRAWMODE_TRANS:
195     switch (Diff&7) {
196     case 0:
197       goto WriteTBit0;
198     case 1:
199       goto WriteTBit1;
200     case 2:
201       goto WriteTBit2;
202     case 3:
203       goto WriteTBit3;
204     case 4:
205       goto WriteTBit4;
206     case 5:
207       goto WriteTBit5;
208     case 6:
209       goto WriteTBit6;
210     case 7:
211       goto WriteTBit7;
212     }
213     break;
214   case LCD_DRAWMODE_XOR:
215     switch (Diff&7) {
216     case 0:
217       goto WriteXBit0;
218     case 1:
219       goto WriteXBit1;
220     case 2:
221       goto WriteXBit2;
222     case 3:
223       goto WriteXBit3;
224     case 4:
225       goto WriteXBit4;
226     case 5:
227       goto WriteXBit5;
228     case 6:
229       goto WriteXBit6;
230     case 7:
231       goto WriteXBit7;
232     }
233   }
234 /*
235         Write with transparency
236 */
237   WriteTBit0:
238     if (pixels&(1<<7)) LCD_SetPoint(x+0, y, Index1);
239     if (!--xsize)
240       return;
241   WriteTBit1:
242     if (pixels&(1<<6)) LCD_SetPoint(x+1, y, Index1);
243     if (!--xsize)
244       return;
245   WriteTBit2:
246     if (pixels&(1<<5)) LCD_SetPoint(x+2, y, Index1);
247     if (!--xsize)
248       return;
249   WriteTBit3:
250     if (pixels&(1<<4)) LCD_SetPoint(x+3, y, Index1);
251     if (!--xsize)
252       return;
253   WriteTBit4:
254     if (pixels&(1<<3)) LCD_SetPoint(x+4, y, Index1);
255     if (!--xsize)
256       return;
257   WriteTBit5:
258     if (pixels&(1<<2)) LCD_SetPoint(x+5, y, Index1);
259     if (!--xsize)
260       return;
261   WriteTBit6:
262     if (pixels&(1<<1)) LCD_SetPoint(x+6, y, Index1);
263     if (!--xsize)
264       return;
265   WriteTBit7:
266     if (pixels&(1<<0)) LCD_SetPoint(x+7, y, Index1);
267     if (!--xsize)
268       return;
269     x+=8;
270     pixels = *(++p);
271     goto WriteTBit0;
272
273 /*
274         Write without transparency
275 */
276
277   WriteBit0:
278     LCD_SetPoint(x+0, y, (pixels&(1<<7)) ? Index1 : Index0);
279     if (!--xsize)
280       return;
281   WriteBit1:
282     LCD_SetPoint(x+1, y, (pixels&(1<<6)) ? Index1 : Index0);
283     if (!--xsize)
284       return;
285   WriteBit2:
286     LCD_SetPoint(x+2, y, (pixels&(1<<5)) ? Index1 : Index0);
287     if (!--xsize)
288       return;
289   WriteBit3:
290     LCD_SetPoint(x+3, y, (pixels&(1<<4)) ? Index1 : Index0);
291     if (!--xsize)
292       return;
293   WriteBit4:
294     LCD_SetPoint(x+4, y, (pixels&(1<<3)) ? Index1 : Index0);
295     if (!--xsize)
296       return;
297   WriteBit5:
298     LCD_SetPoint(x+5, y, (pixels&(1<<2)) ? Index1 : Index0);
299     if (!--xsize)
300       return;
301   WriteBit6:
302     LCD_SetPoint(x+6, y, (pixels&(1<<1)) ? Index1 : Index0);
303     if (!--xsize)
304       return;
305   WriteBit7:
306     LCD_SetPoint(x+7, y, (pixels&(1<<0)) ? Index1 : Index0);
307     if (!--xsize)
308       return;
309     x+=8;
310     pixels = *(++p);
311     goto WriteBit0;
312
313 /*
314         Write XOR mode
315 */
316   WriteXBit0:
317     if (pixels&(1<<7))
318       LCD_L0_XorPixel(x+0, y);
319     if (!--xsize)
320       return;
321   WriteXBit1:
322     if (pixels&(1<<6))
323       LCD_L0_XorPixel(x+1, y);
324     if (!--xsize)
325       return;
326   WriteXBit2:
327     if (pixels&(1<<5))
328       LCD_L0_XorPixel(x+2, y);
329     if (!--xsize)
330       return;
331   WriteXBit3:
332     if (pixels&(1<<4))
333       LCD_L0_XorPixel(x+3, y);
334     if (!--xsize)
335       return;
336   WriteXBit4:
337     if (pixels&(1<<3))
338       LCD_L0_XorPixel(x+4, y);
339     if (!--xsize)
340       return;
341   WriteXBit5:
342     if (pixels&(1<<2))
343       LCD_L0_XorPixel(x+5, y);
344     if (!--xsize)
345       return;
346   WriteXBit6:
347     if (pixels&(1<<1))
348       LCD_L0_XorPixel(x+6, y);
349     if (!--xsize)
350       return;
351   WriteXBit7:
352     if (pixels&(1<<0))
353       LCD_L0_XorPixel(x+7, y);
354     if (!--xsize)
355       return;
356     x+=8;
357     pixels = *(++p);
358     goto WriteXBit0;
359 }
360
361
362
363
364
365
366
367
368
369
370
371
372 /*********************************************************************************
373 *
374 *  函数名称:DrawBitLine2BPP
375 *  函数功能:
376 *
377 *********************************************************************************/
378 static void  DrawBitLine2BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans)
379 {
380   LCD_PIXELINDEX pixels;
381 /*
382 // Jump to right entry point
383 */
384   pixels = *p;
385   if (pTrans) {
386     /*
387       with palette
388     */
389     if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) switch (Diff&3) {
390     case 0:
391       goto WriteTBit0;
392     case 1:
393       goto WriteTBit1;
394     case 2:
395       goto WriteTBit2;
396     default:
397       goto WriteTBit3;
398     } else switch (Diff&3) {
399     case 0:
400       goto WriteBit0;
401     case 1:
402       goto WriteBit1;
403     case 2:
404       goto WriteBit2;
405     default:
406       goto WriteBit3;
407     }
408   /*
409           Write without transparency
410   */
411   WriteBit0:
412     LCD_SetPoint(x+0, y, *(pTrans+(pixels>>6)));
413     if (!--xsize)
414       return;
415   WriteBit1:
416     LCD_SetPoint(x+1, y, *(pTrans+(3&(pixels>>4))));
417     if (!--xsize)
418       return;
419   WriteBit2:
420     LCD_SetPoint(x+2, y, *(pTrans+(3&(pixels>>2))));
421     if (!--xsize)
422       return;
423   WriteBit3:
424     LCD_SetPoint(x+3, y, *(pTrans+(3&(pixels))));
425     if (!--xsize)
426       return;
427     pixels = *(++p);
428     x+=4;
429     goto WriteBit0;
430   /*
431           Write with transparency
432   */
433   WriteTBit0:
434     if (pixels&(3<<6))
435       LCD_SetPoint(x+0, y, *(pTrans+(pixels>>6)));
436     if (!--xsize)
437       return;
438   WriteTBit1:
439     if (pixels&(3<<4))
440       LCD_SetPoint(x+1, y, *(pTrans+(3&(pixels>>4))));
441     if (!--xsize)
442       return;
443   WriteTBit2:
444     if (pixels&(3<<2))
445       LCD_SetPoint(x+2, y, *(pTrans+(3&(pixels>>2))));
446     if (!--xsize)
447       return;
448   WriteTBit3:
449     if (pixels&(3<<0))
450       LCD_SetPoint(x+3, y, *(pTrans+(3&(pixels))));
451     if (!--xsize)
452       return;
453     pixels = *(++p);
454     x+=4;
455     goto WriteTBit0;
456   } else {
457     /*
458       without palette
459     */
460     if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) switch (Diff&3) {
461     case 0:
462       goto WriteDDPTBit0;
463     case 1:
464       goto WriteDDPTBit1;
465     case 2:
466       goto WriteDDPTBit2;
467     default:
468       goto WriteDDPTBit3;
469     } else switch (Diff&3) {
470     case 0:
471       goto WriteDDPBit0;
472     case 1:
473       goto WriteDDPBit1;
474     case 2:
475       goto WriteDDPBit2;
476     default:
477       goto WriteDDPBit3;
478     }
479   /*
480           Write without transparency
481   */
482   WriteDDPBit0:
483     LCD_SetPoint(x+0, y, (pixels>>6));
484     if (!--xsize)
485       return;
486   WriteDDPBit1:
487     LCD_SetPoint(x+1, y, (3&(pixels>>4)));
488     if (!--xsize)
489       return;
490   WriteDDPBit2:
491     LCD_SetPoint(x+2, y, (3&(pixels>>2)));
492     if (!--xsize)
493       return;
494   WriteDDPBit3:
495     LCD_SetPoint(x+3, y, (3&(pixels)));
496     if (!--xsize)
497       return;
498     pixels = *(++p);
499     x+=4;
500     goto WriteDDPBit0;
501   /*
502           Write with transparency
503   */
504   WriteDDPTBit0:
505     if (pixels&(3<<6))
506       LCD_SetPoint(x+0, y, (pixels>>6));
507     if (!--xsize)
508       return;
509   WriteDDPTBit1:
510     if (pixels&(3<<4))
511       LCD_SetPoint(x+1, y, (3&(pixels>>4)));
512     if (!--xsize)
513       return;
514   WriteDDPTBit2:
515     if (pixels&(3<<2))
516       LCD_SetPoint(x+2, y, (3&(pixels>>2)));
517     if (!--xsize)
518       return;
519   WriteDDPTBit3:
520     if (pixels&(3<<0))
521       LCD_SetPoint(x+3, y, (3&(pixels)));
522     if (!--xsize)
523       return;
524     pixels = *(++p);
525     x+=4;
526     goto WriteDDPTBit0;
527   }
528 }
529
530
531
532
533
534
535
536
537 /*********************************************************************************
538 *
539 *  函数名称:DrawBitLine4BPP
540 *  函数功能:
541 *
542 *********************************************************************************/
543 static void  DrawBitLine4BPP(int x, int y, U8 const*p, int Diff, int xsize, const LCD_PIXELINDEX*pTrans)
544 {
545   LCD_PIXELINDEX pixels;
546
547   pixels = *p;
548   if (pTrans)
549   {
550     if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)
551     {
552       if ((Diff&1) ==0)
553         goto WriteTBit0;
554         goto WriteTBit1;
555     }
556     else
557     {
558       if ((Diff&1) ==0)
559         goto WriteBit0;
560         goto WriteBit1;
561     }
562
563   WriteBit0:
564     LCD_SetPoint(x+0, y, *(pTrans+(pixels>>4)));
565     if (!--xsize)
566       return;
567   WriteBit1:
568     LCD_SetPoint(x+1, y, *(pTrans+(pixels&0xf)));
569     if (!--xsize)
570       return;
571     x+=2;
572     pixels = *(++p);
573     goto WriteBit0;
574   /*
575           Write with transparency
576   */
577   WriteTBit0:
578     if (pixels>>4)
579       LCD_SetPoint(x+0, y, *(pTrans+(pixels>>4)));
580     if (!--xsize)
581       return;
582   WriteTBit1:
583     if (pixels&0xf)
584       LCD_SetPoint(x+1, y, *(pTrans+(pixels&0xf)));
585     if (!--xsize)
586       return;
587     x+=2;
588     pixels = *(++p);
589     goto WriteTBit0;
590   } else {
591     /*
592       without palette
593     */
594     if (GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) {
595       if ((Diff&1) ==0)
596         goto WriteDDPTBit0;
597       goto WriteDDPTBit1;
598     } else {
599       if ((Diff&1) ==0)
600         goto WriteDDPBit0;
601       goto WriteDDPBit1;
602     }
603   /*
604           Write without transparency
605   */
606   WriteDDPBit0:
607     LCD_SetPoint(x+0, y, (pixels>>4));
608     if (!--xsize)
609       return;
610   WriteDDPBit1:
611     LCD_SetPoint(x+1, y, (pixels&0xf));
612     if (!--xsize)
613       return;
614     x+=2;
615     pixels = *(++p);
616     goto WriteDDPBit0;
617   /*
618           Write with transparency
619   */
620   WriteDDPTBit0:
621     if (pixels>>4)
622       LCD_SetPoint(x+0, y, (pixels>>4));
623     if (!--xsize)
624       return;
625   WriteDDPTBit1:
626     if (pixels&0xf)
627       LCD_SetPoint(x+1, y, (pixels&0xf));
628     if (!--xsize)
629       return;
630     x+=2;
631     pixels = *(++p);
632     goto WriteDDPTBit0;
633   }
634 }
635
636
637
638
639
640
641
642 /*********************************************************************************
643 *
644 *  函数名称:DrawBitLine8BPP
645 *  函数功能:
646 *
647 *********************************************************************************/
648 void DrawBitLine8BPP(int x, int y, U8 const*p, int xsize, const LCD_PIXELINDEX*pTrans)
649 {
650   LCD_PIXELINDEX pixel;
651   if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0) {
652     if (pTrans) {
653       for (;xsize > 0; xsize--,x++,p++) {
654         pixel = *p;
655         LCD_SetPoint(x, y, *(pTrans+pixel));
656       }
657     } else {
658       for (;xsize > 0; xsize--,x++,p++) {
659         LCD_SetPoint(x, y, *p);
660       }
661     }
662   } else {   /* Handle transparent bitmap */
663     if (pTrans) {
664       for (; xsize > 0; xsize--, x++, p++) {
665         pixel = *p;
666         if (pixel) {
667           LCD_SetPoint(x+0, y, *(pTrans+pixel));
668         }
669       }
670     } else {
671       for (; xsize > 0; xsize--, x++, p++) {
672         pixel = *p;
673         if (pixel) {
674           LCD_SetPoint(x+0, y, pixel);
675         }
676       }
677     }
678   }
679 }
680
681
682
683
684
685
686
687
688
689 /*********************************************************************************
690 *
691 *  函数名称:DrawBitLine16BPP
692 *  函数功能:
693 *
694 *********************************************************************************/
695 void DrawBitLine16BPP(int x, int y, U16 const*p, int xsize)
696 {
697   LCD_PIXELINDEX Index;
698   if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)==0)
699   {
700
701
702         *(__IO uint16_t *) (Bank1_LCD_C)= 32;
703         *(__IO uint16_t *) (Bank1_LCD_D)= x;
704
705         *(__IO uint16_t *) (Bank1_LCD_C)= 33;
706         *(__IO uint16_t *) (Bank1_LCD_D)= y;
707
708         *(__IO uint16_t *) (Bank1_LCD_C)= 34;
709
710     for (;xsize > 0; xsize--,x++,p++)
711     {
712       *(__IO uint16_t *) (Bank1_LCD_D)= *p;
713     }
714   }
715   else
716   {   /* Handle transparent bitmap */
717     for (; xsize > 0; xsize--, x++, p++)
718     {
719       Index = *p;
720       if (Index)
721       {
722         LCD_SetPoint(x+0, y, Index);
723       }
724     }
725   }
726 }
727
728
729
730
731
732
733
734
735
736 /*********************************************************************************
737 *
738 *  函数名称:LCD_L0_DrawBitmap
739 *  函数功能:
740 *
741 *********************************************************************************/
742 void LCD_L0_DrawBitmap   (int x0, int y0,
743                        int xsize, int ysize,
744                        int BitsPerPixel,
745                        int BytesPerLine,
746                        const U8* pData, int Diff,
747                        const LCD_PIXELINDEX* pTrans)
748 {
749   int i;
750   switch (BitsPerPixel)
751   {
752   case 1:
753     for (i=0; i<ysize; i++)
754     {
755       DrawBitLine1BPP(x0, i+y0, pData, Diff, xsize, pTrans);
756       pData += BytesPerLine;
757     }
758     break;
759   case 2:
760     for (i=0; i<ysize; i++)
761     {
762       DrawBitLine2BPP(x0, i+y0, pData, Diff, xsize, pTrans);
763       pData += BytesPerLine;
764     }
765     break;
766   case 4:
767     for (i=0; i<ysize; i++)
768     {
769       DrawBitLine4BPP(x0, i+y0, pData, Diff, xsize, pTrans);
770       pData += BytesPerLine;
771     }
772     break;
773   case 8:
774     for (i=0; i<ysize; i++)
775     {
776       DrawBitLine8BPP(x0, i+y0, pData, xsize, pTrans);
777       pData += BytesPerLine;
778     }
779     break;
780   case 16:
781     for (i=0; i<ysize; i++)
782     {
783       DrawBitLine16BPP(x0, i+y0, (U16*)pData, xsize);
784       pData += BytesPerLine;
785     }
786     break;
787   }
788 }
789
790
791
792
793
794
795
796
797
798
799
800
801 /*********************************************************************************
802 *
803 *  函数名称:LCD_L0_SetOrg
804 *  函数功能:
805 *
806 *********************************************************************************/
807 void LCD_L0_SetOrg(int x, int y)
808 {
809   GUI_USE_PARA(x);
810   GUI_USE_PARA(y);
811 }
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827 /*********************************************************************************
828 *
829 *  函数名称:LCD_L0_XorPixel(int x,int y)
830 *  函数功能:
831 *
832 *********************************************************************************/
833 void LCD_On (void) {}
834 void LCD_Off(void) {}
835
836
837
838
839
840
841
842
843 /*********************************************************************************
844 *
845 *  函数名称:LCD_L0_XorPixel(int x,int y)
846 *  函数功能:
847 *
848 *********************************************************************************/
849 void LCD_L0_SetLUTEntry(U8 Pos, LCD_COLOR Color)
850 {
851   GUI_USE_PARA(Pos);
852   GUI_USE_PARA(Color);
853 }
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869 /*********************************************************************************
870 *
871 *  函数名称:LCD_L0_XorPixel(int x,int y)
872 *  函数功能:
873 *
874 *********************************************************************************/
875 void * LCD_L0_GetDevFunc(int Index)
876 {
877   GUI_USE_PARA(Index);
878   return NULL;
879 }

 1 /*************************************************************************************************************************************
 2 *
 3 *  文件名称:stm32_fsmc.c
 4 *  文件功能:fsmc配置函数文件
 5 *
 6 ***************************************************************************************************************************************/
 7
 8
 9 #include "pbdata.h"
10
11 void FSMC_Configuration(void)
12 {
13
14   FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
15   FSMC_NORSRAMTimingInitTypeDef  p;
16
17   p.FSMC_AddressSetupTime = 0x02;//地址建立时间
18   p.FSMC_AddressHoldTime = 0x00;//地址保持时间
19   p.FSMC_DataSetupTime = 0x05;//数据建立时间
20   p.FSMC_BusTurnAroundDuration = 0x00;//总线恢复时间
21   p.FSMC_CLKDivision = 0x00;//时钟分频
22   p.FSMC_DataLatency = 0x00;//数据保持时间
23   p.FSMC_AccessMode = FSMC_AccessMode_B;
24
25
26   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;//NOR FLASH的 BANK1
27
28   FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;//数据线与地址线不复用
29
30   FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;//存储类型NOR FLASH
31
32   FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//数据宽度为16位
33
34   FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;//使用异步写模式,禁止突发模式
35
36   FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;//本成员的配置只在突发模式下有效,等效型号极性为低
37
38   FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;//禁止非对其突发模式
39
40   FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;//本成员配置仅在突发模式下有效,NWAIT信号在什么时期
41
42   FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;//禁止突发写操作
43
44   FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;//禁止突发写操作
45
46   FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;//写使能
47
48   FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;//禁止扩展模式,扩展模式可以使用独立的读、写模式
49
50   FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;//配置读写时序
51
52   FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;//配置写时序
53
54
55   FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); //初始化FSMC
56
57   FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  //使能FSMC  BANK1_SRAM
58
59 }

  1 /*************************************************************************************************************************************
  2 *
  3 *  文件名称:lcd_ILI9325.h
  4 *  文件功能:LCD初始化头文件
  5 *
  6 ***************************************************************************************************************************************/
  7
  8
  9 #include "pbdata.h"
 10
 11
 12
 13
 14
 15 /*********************************************
 16 *
 17 *  写命令子函数
 18 *
 19 **********************************************/
 20 void LCD_WR_REG(u16 index)
 21 {
 22     *(__IO u16 *)(Bank1_LCD_C)=index;//把我们定义的数据读写首地址转化为指针,指向LCD真实的扩展地址
 23 }
 24
 25
 26
 27
 28 /*********************************************
 29 *
 30 *  写数据子函数
 31 *
 32 **********************************************/
 33 void LCD_WR_Data(u16 val)
 34 {
 35    *(__IO u16 *)(Bank1_LCD_D)=val;//把我们定义的命令读写首地址转换为指针,指向LCD真实扩展地址
 36 }
 37
 38
 39
 40
 41 /*********************************************
 42 *
 43 *  同时写命令和数据
 44 *
 45 **********************************************/
 46
 47 void LCD_WR_CMD(u16 index,u16 val)
 48 {
 49    *(__IO u16 *)(Bank1_LCD_C)=index;
 50    *(__IO u16 *)(Bank1_LCD_D)=val;
 51 }
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61 /*********************************************
 62 *
 63 *  LCD初始化函数,出厂配置好
 64 *
 65 **********************************************/
 66 void ILI9325_Init(void)
 67 {
 68     GPIO_SetBits(GPIOE, GPIO_Pin_1 );         //V7
 69     delay_ms(1);
 70     GPIO_ResetBits(GPIOE, GPIO_Pin_1);
 71     delay_ms(10);
 72     GPIO_SetBits(GPIOE, GPIO_Pin_1 );         //V7
 73     delay_ms(50);
 74
 75     //************* Start Initial Sequence **********//
 76     LCD_WR_CMD(0x0001, 0x0100);     // set SS and SM bit
 77     LCD_WR_CMD(0x0002, 0x0700);     // set 1 line inversion
 78     LCD_WR_CMD(0x0003, 0x1030);     // set GRAM write direction and BGR=1.
 79     LCD_WR_CMD(0x0004, 0x0000);     // Resize register
 80     LCD_WR_CMD(0x0008, 0x0202);        // set the back porch and front porch
 81     LCD_WR_CMD(0x0009, 0x0000);     // set non-display area refresh cycle ISC[3:0]
 82     LCD_WR_CMD(0x000A, 0x0000);     // FMARK function
 83     LCD_WR_CMD(0x000C, 0x0000);        // RGB interface setting
 84     LCD_WR_CMD(0x000D, 0x0000);     // Frame marker Position
 85     LCD_WR_CMD(0x000F, 0x0000);         // RGB interface polarity
 86     //*************Power On sequence ****************//
 87     LCD_WR_CMD(0x0010, 0x0000);      // SAP, BT[3:0], AP, DSTB, SLP, STB
 88     LCD_WR_CMD(0x0011, 0x0007);      // DC1[2:0], DC0[2:0], VC[2:0]
 89     LCD_WR_CMD(0x0012, 0x0000);      // VREG1OUT voltage
 90     LCD_WR_CMD(0x0013, 0x0000);      // VDV[4:0] for VCOM amplitude
 91     LCD_WR_CMD(0x0007, 0x0001);
 92     delay_ms(500);
 93     delay_ms(500);
 94     delay_ms(500);
 95
 96     LCD_WR_CMD(0x0010, 0x1690);      // SAP, BT[3:0], AP, DSTB, SLP, STB
 97     LCD_WR_CMD(0x0011, 0x0227);      // DC1[2:0], DC0[2:0], VC[2:0]
 98     delay_ms(50);
 99
100     LCD_WR_CMD(0x0012, 0x009D);      // Internal reference voltage= Vci;
101     delay_ms(50);
102
103     LCD_WR_CMD(0x0013, 0x1900);      // Set VDV[4:0] for VCOM amplitude
104     LCD_WR_CMD(0x0029, 0x0025);      // Set VCM[5:0] for VCOMH
105     LCD_WR_CMD(0x002B, 0x000D);      // Set Frame Rate
106     delay_ms(50);
107
108     LCD_WR_CMD(0x0020, 0x0000);      // GRAM horizontal Address
109     LCD_WR_CMD(0x0021, 0x0000);      // GRAM Vertical Address
110     // ----------- Adjust the Gamma    Curve ----------//
111     LCD_WR_CMD(0x0030, 0x0007);
112     LCD_WR_CMD(0x0031, 0x0303);
113     LCD_WR_CMD(0x0032, 0x0003);
114     LCD_WR_CMD(0x0035, 0x0206);
115     LCD_WR_CMD(0x0036, 0x0008);
116     LCD_WR_CMD(0x0037, 0x0406);
117     LCD_WR_CMD(0x0038, 0x0304);
118     LCD_WR_CMD(0x0039, 0x0007);
119     LCD_WR_CMD(0x003C, 0x0602);
120     LCD_WR_CMD(0x003D, 0x0008);
121     //------------------ Set GRAM area ---------------//
122     LCD_WR_CMD(0x0050, 0x0000);      // Horizontal GRAM Start Address
123     LCD_WR_CMD(0x0051, 0x00EF);      // Horizontal GRAM End Address
124     LCD_WR_CMD(0x0052, 0x0000);      // Vertical GRAM Start Address
125     LCD_WR_CMD(0x0053, 0x013F);      // Vertical GRAM Start Address
126     LCD_WR_CMD(0x0060, 0xA700);      // Gate Scan Line
127     LCD_WR_CMD(0x0061, 0x0001);      // NDL,VLE, REV
128     LCD_WR_CMD(0x006A, 0x0000);      // set scrolling line
129     //-------------- Partial Display Control ---------//
130     LCD_WR_CMD(0x0080, 0x0000);
131     LCD_WR_CMD(0x0081, 0x0000);
132     LCD_WR_CMD(0x0082, 0x0000);
133     LCD_WR_CMD(0x0083, 0x0000);
134     LCD_WR_CMD(0x0084, 0x0000);
135     LCD_WR_CMD(0x0085, 0x0000);
136     //-------------- Panel Control -------------------//
137     LCD_WR_CMD(0x0090, 0x0010);
138     LCD_WR_CMD(0x0092, 0x0600);
139     LCD_WR_CMD(0x0007, 0x0133);      // 262K color and display ON
140 }
141
142
143
144
145
146
147
148 /*********************************************
149 *
150 *  204*320,向触摸屏送数据,一个点一个点都要扫描到
151 *
152 **********************************************/
153 void ILI_9325_Draw_Point(u8 x,u16 y,u16 color)
154 {
155     LCD_WR_CMD(0x50,x);    //x起始
156     LCD_WR_CMD(0x51,x);    //x结束
157     LCD_WR_CMD(0x52,y);    //y起始
158     LCD_WR_CMD(0x53,y);    //y结束
159
160     LCD_WR_CMD(0x20,x);
161     LCD_WR_CMD(0x21,y);
162     LCD_WR_REG(0x22);
163     LCD_WR_Data(color);
164 }
165
166
167
168
169
170 /*********************************************
171 *
172 *  同时写命令和数据
173 *
174 **********************************************/
175
176 void ILI_9325_CLEAR(u16 color)
177 {
178     u16 i=0,j=0;
179
180     for(i=0;i<240;i++)
181     {
182         for(j=0;j<320;j++)
183         {
184             ILI_9325_Draw_Point(i,j,color);
185         }
186     }
187 }
188
189
190
191
192
193
194
195
196 /*********************************************
197 *
198 *  读数据
199 *
200 **********************************************/
201 u16 LCD_RD_data(void)
202 {
203     u16 a=0;
204     a=*(__IO uint16_t *) (Bank1_LCD_D);   //空操作
205     a=*(__IO uint16_t *) (Bank1_LCD_D);   //读出的实际16位像素数据
206     return(a);
207 }
208
209
210
211
212
213
214
215
216 /*********************************************
217 *
218 *  设置一个点
219 *
220 **********************************************/
221 void LCD_SetPoint(u16 x,u16 y,u16 color)
222 {
223     *(__IO uint16_t *) (Bank1_LCD_C)= 32;
224     *(__IO uint16_t *) (Bank1_LCD_D)= y;
225
226     *(__IO uint16_t *) (Bank1_LCD_C)= 33;
227     *(__IO uint16_t *) (Bank1_LCD_D)= 319-x;
228
229     *(__IO uint16_t *) (Bank1_LCD_C)= 34;
230     *(__IO uint16_t *) (Bank1_LCD_D)= color;
231 }
232
233
234
235
236
237
238
239 /*********************************************
240 *
241 *  设置点的位置
242 *
243 **********************************************/
244
245 void LCD_SetCursor(u16 x,u16 y)
246 {
247   *(__IO uint16_t *) (Bank1_LCD_C)= 32;          //设置X坐标
248   *(__IO uint16_t *) (Bank1_LCD_D)= y;
249
250   *(__IO uint16_t *) (Bank1_LCD_C)= 33;          //设置Y坐标
251   *(__IO uint16_t *) (Bank1_LCD_D)= 319-x;
252 }
253
254
255
256
257
258
259
260
261 /*********************************************
262 *
263 *  获取一个点
264 *
265 **********************************************/
266 u16 LCD_GetPoint(u16 x,u16 y)
267 {
268     LCD_SetCursor(x,y);
269     *(__IO uint16_t *) (Bank1_LCD_C)= 34;
270
271
272     //花屏处理方法--如果花屏请先屏蔽掉现在的模式改另一种模式
273     //return (LCD_BGR2RGB(LCD_RD_data())); //模式1
274     return (LCD_RD_data());                  //模式2
275 }
276
277
278
279
280
281
282 /*********************************************
283 *
284 *  颜色配置
285 *
286 **********************************************/
287 u16 LCD_BGR2RGB(u16 c)
288 {
289   u16  r, g, b;
290
291   b = (c>>0)  & 0x1f;
292   g = (c>>5)  & 0x3f;
293   r = (c>>11) & 0x1f;
294
295   return( (b<<11) + (g<<5) + (r<<0) );
296 }
297
298
299
300
301
302
303
304
305
306
307
308 /*********************************************
309 *
310 *  GUI画线
311 *
312 **********************************************/
313 void GUI_Line(u16 x0, u16 y0, u16 x1, u16 y1,u16 color)
314 {
315      u16 x,y;
316      u16 dx;// = abs(x1 - x0);
317      u16 dy;// = abs(y1 - y0);
318
319     if(y0==y1)
320     {
321         if(x0<=x1)
322         {
323             x=x0;
324         }
325         else
326         {
327             x=x1;
328             x1=x0;
329         }
330           while(x <= x1)
331           {
332                LCD_SetPoint(x,y0,color);
333                x++;
334           }
335           return;
336     }
337     else if(y0>y1)
338     {
339         dy=y0-y1;
340     }
341     else
342     {
343         dy=y1-y0;
344     }
345
346      if(x0==x1)
347     {
348         if(y0<=y1)
349         {
350             y=y0;
351         }
352         else
353         {
354             y=y1;
355             y1=y0;
356         }
357           while(y <= y1)
358           {
359                LCD_SetPoint(x0,y,color);
360                y++;
361           }
362           return;
363     }
364     else if(x0 > x1)
365      {
366         dx=x0-x1;
367           x = x1;
368           x1 = x0;
369           y = y1;
370           y1 = y0;
371      }
372      else
373      {
374         dx=x1-x0;
375           x = x0;
376           y = y0;
377      }
378
379      if(dx == dy)
380      {
381           while(x <= x1)
382           {
383
384                x++;
385             if(y>y1)
386             {
387                 y--;
388             }
389             else
390             {
391                    y++;
392             }
393                LCD_SetPoint(x,y,color);
394           }
395      }
396      else
397      {
398          LCD_SetPoint(x, y, color);
399           if(y < y1)
400           {
401                if(dx > dy)
402                {
403                 s16 p = dy * 2 - dx;
404                 s16 twoDy = 2 * dy;
405                 s16 twoDyMinusDx = 2 * (dy - dx);
406                 while(x < x1)
407                 {
408                      x++;
409                      if(p < 0)
410                      {
411                           p += twoDy;
412                      }
413                      else
414                      {
415                           y++;
416                           p += twoDyMinusDx;
417                      }
418                      LCD_SetPoint(x, y,color);
419                 }
420                }
421                else
422                {
423                 s16 p = dx * 2 - dy;
424                 s16 twoDx = 2 * dx;
425                 s16 twoDxMinusDy = 2 * (dx - dy);
426                 while(y < y1)
427                 {
428                      y++;
429                      if(p < 0)
430                      {
431                           p += twoDx;
432                      }
433                      else
434                      {
435                           x++;
436                           p+= twoDxMinusDy;
437                      }
438                      LCD_SetPoint(x, y, color);
439                 }
440                }
441           }
442           else
443           {
444                if(dx > dy)
445                {
446                 s16 p = dy * 2 - dx;
447                 s16 twoDy = 2 * dy;
448                 s16 twoDyMinusDx = 2 * (dy - dx);
449                 while(x < x1)
450                 {
451                      x++;
452                      if(p < 0)
453                      {
454                           p += twoDy;
455                      }
456                      else
457                      {
458                           y--;
459                           p += twoDyMinusDx;
460                      }
461                      LCD_SetPoint(x, y,color);
462                 }
463                }
464                else
465                {
466                 s16 p = dx * 2 - dy;
467                 s16 twoDx = 2 * dx;
468                 s16 twoDxMinusDy = 2 * (dx - dy);
469                 while(y1 < y)
470                 {
471                      y--;
472                      if(p < 0)
473                      {
474                           p += twoDx;
475                      }
476                      else
477                      {
478                           x++;
479                           p+= twoDxMinusDy;
480                      }
481                      LCD_SetPoint(x, y,color);
482                 }
483                }
484           }
485      }
486 }

 1 /*************************************************************************************************************************************
 2 *
 3 *  文件名称:lcd_ILI9325.h
 4 *  文件功能:LCD初始化头文件
 5 *
 6 ***************************************************************************************************************************************/
 7
 8
 9 #ifndef _LCD_ILI9325_H
10 #define _LCD_ILI9325_H
11 #include "pbdata.h"
12
13
14 //6000 0000
15 //A16  16位通讯
16
17 #define Bank1_LCD_D (u32)0x60020000   //命令位是1,所以在16位通讯命令格式时地址为2000
18 #define Bank1_LCD_C (u32)0x60000000   //数据位是0,所以在16位通讯数据格式时地址为0
19
20 #define RGB565(r, g, b) ((r >> 3) << 11 | (g >> 2) << 5 | (b >> 3))   //三色转换
21
22 #define RED   RGB565(255,0,0)        //红色
23 #define GREEN RGB565(0,255,0)        //绿色
24 #define BLUE  RGB565(0,0,255)        //蓝色
25 #define BLACK RGB565(0,0,0)            //黑色
26 #define WHITE RGB565(255,255,255)    //白色
27
28
29
30
31 void ILI9325_Init(void);//LCD初始化函数
32 void  LCD_WR_REG(u16  index);//写命令函数
33 void  LCD_WR_Data(u16  val);//写数据函数
34 void  LCD_WR_CMD(u16  index,u16  val);//同时写命令和数据函数
35 void  ILI_9325_Draw_Point(u8 x,u16 y,u16 color);//一个点写入颜色
36 void ILI_9325_CLEAR(u16 color);//清屏
37
38 u16 LCD_RD_data(void);//读数据
39 void LCD_SetPoint(u16 x,u16 y,u16 color);//设置一个点的颜色
40 u16 LCD_GetPoint(u16 x,u16 y);//获取一个点
41 u16 LCD_BGR2RGB(u16 c);//颜色配置
42 void GUI_Line(u16 x0, u16 y0, u16 x1, u16 y1,u16 color);//GUI画线
43
44
45
46
47 #endif

3、GUI下载:

http://yunpan.cn/cQbD5YZi5mKTH (提取码:61f1)

4、例程工程下载:

http://yunpan.cn/cQba77LEzVycu (提取码:70ad)

时间: 2024-10-19 08:15:48

1、移植UCGUI操作系统到LY-STM32开发板上的相关文章

在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用

当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作.在上述提到的中间件组件中,其中一个是非常受欢迎的FreeRTOS实时操作系统,Nabto正在努力建立一个强大的FreeRTOS + Nabto组合的解决方案. 我们最新推出AppMyProduct应用平台可帮助您快速开发远程控制设备的高质量应用程序.本文介绍了在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵

物联网操作系统HelloX已成功移植到MinnowBoard MAX开发板上

在HelloX开发团队的努力下,以及Winzent Tech公司(总部在瑞典斯德哥尔摩)的支持下,HelloX最新版本V1.78已成功移植到MinnowBoard MAX开发板上.相关源代码已经发布到github上(github.com/hellox-project/HelloX_OS),欢迎感兴趣的朋友下载测试. MinnowBoardMAX是在Intel的支持下,由Circuit公司开发的一款基于Intel ATOM处理器的卡片式电脑,具备超高的性能,丰富的扩展性,以及相对较低的功耗和成本.

转载:百为STM32开发板教程之十一——NOR FLASH

转载:http://bbs.21ic.com/icview-586199-1-1.html 百为STM32开发板教程之十一——NOR FLASH 参考文档:百为stm32开发板光盘\st官方参考资料\Application notes\AN2784 Using the high-density STM32F10xxx FSMC peripheral to drive external memories.pdf百为stm32开发板光盘\芯片数据手册\M29W128G.pdf百为stm32开发板光盘

移植Qt与Tslib到X210开发板的体会

1.将QT移植到X210上,让X210开发板可以运行QT东西,需要几个东西.tslib QT源码编译后的lib库等 (1)tslib移植: @1:下载tslib,官方上下就可以. @2:解压.比如解压到了/root/xin_210/下 @3:选择固定的交叉编译工具连,内核,tslib,QT源码都要用这一个编译,我用的是arm-2009q3.这个工具链中的arm-none-linux-gnueabi/libc/usr/include/linux/input.h中的EV_VERSION宏的的值要和内

在fl2440开发板上移植第三方程序lrzsz,tree

移植第三方程序有几种情况 一 .如果源码包有Makefile文件,直接改Makefile,修改CC, AS, LD, CFLAGS,INST_PATH.. 二.源码包没有Makefile文件,但有configure/config文件: 1.设置 CC, LD ,AS, LDFLAGS ,AR,RANLIB等环境变量,如下面的lrzsz命令移植中的 CC=/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-gcc AR=/opt/buildroot-2

针对TQ2440开发板上linux2.6.30.4内核的交叉编译和驱动程序的移植

最近由于要做TQ2440(ARM9)开发板上的驱动实验,所以要在主机(ubuntu13.10)上针对前面的目标板上的系统内核进行交叉编译. 一,内核的交叉编译: 1.准备2.6.30.4版本的内核源码包,这个我使用的是天嵌公司提供的内核源码包linux-2.6.30.4_20121214.tar.bz2. 2.打开终端输入指令:tar vxjf linux-2.6.30.4_20121214.tar.bz2 解压内核源码包得到一个名字为opt的文件夹,然后输入指令:sudo mv opt /us

TPYBoard V102:能跑Python的stm32开发板

近来micropython语言做硬件编程很火,随之而来的就开始带动着支持micropython语言编程的开发板也开始火的发烫,今天小编就来和大家介绍一款很经典的micropython开发板-TPYBoardV102开发板. 一.板载硬件资源介绍 按照惯例先来介绍一个这块开发板的硬件组成,个人感觉这个开发板的性能还是属于相当不错的,下面详细介绍一下. TPYBoardV102是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一款MicroPython开发板,它基于

驱动控制开发板上的四个LED小灯

在上一章了解了开发linux驱动程序的步骤,在本章会完成一个真正意义上的linux驱动,该驱动用来控制开发板上的四个LED小灯,通过向驱动发送数据可以控制LED小灯的开关. 首先介绍了LED驱动的实现原理,虽然linux驱动直接与硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的I/O内存进行交互.Linux内核的内存管理模块负责同步I/O内存与硬件中的数据.每一个连接linux的硬件在I/O内存中都会有映射首地址. 其次是编写LED驱动.以下创建一个设备文件,第一步:使用

8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现

很早以前就把圆点博士的程序从STM32F103移植到STM32F4-Discovery(STM32F407),battery,陀螺仪和PWM电机控制的程序都已经测试完毕,运行有一段时间,正常.下面展示几张图片,都是用杜邦线连接起来的,陀螺仪,串口等外设,此外还有nRF24L01,不过nRF24L01的程序读写寄存器可以了,没有尝试过与别的nRF24L01通信.下面一张是正面照片: 下面这张是背面的连接线: 下面这张来个更清晰一些的: 下面这张是圆点博士的上位机软件: 同时我也录制了一些视频,上传

【Android 系统开发】 编译 Android 系统 u-boot 内核 源码 并烧写到 OK-6410A 开发板上

博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 Android 光盘 下载地址 : http://pan.baidu.com/share/link?shareid=3662728609&uk=2754759285 ; -- 光盘所含内容 : Android 引导 u-boot 源码, Android 内核 源码, Android 系统源码, 交叉编