stm32驱动1.44寸LCD屏幕显示中文字符

之前的0.96寸的OLED屏幕坏掉了,现在重新买了一块1.44寸的LCD屏幕,感觉这次的质量比较好,还可以显示彩色的
用的stm32是stm32f103vet6,我看某宝卖家给的例程里面好像还有触摸功能,我之后研究下

百度网盘keil5工程链接:https://pan.baidu.com/s/1Ty28B-w1FdTzy4mJhypjSw
提取码:c80z 

实物图

接线方法:
供电要5V的,3.3V只会白屏
SCL---PB13
SDA---PB15
RES---PB12(复位来的,和stm32接同一个复位就行)
DC---PB10
那个CS片选完全可以不接就默认浮空吧
BL接GND的话是关闭屏幕,浮空或者接3.3V就是开启屏幕,那就不接默认浮空吧

放一个例子显示的效果图

还行挺清楚的,128*128分辨率还能放彩图上去,美滋滋

 下面贴一下lcd的代码和main中使用,会移植的小伙伴自行移植

  1 #include "lcd.h"
  2 #include "stdlib.h"
  3 #include "usart.h"
  4 #include "delay.h"     
  5 /****************************************************************************************************
  6 //=======================================液晶屏数据线接线==========================================//
  7 //CS        接PB11    //片选信号
  8 //CLK        接PB13    //SPI时钟信号
  9 //SDI(DIN)    接PB15    //SPI总线数据信号
 10 //=======================================液晶屏控制线接线==========================================//
 11 //LED        接PB9    //背光控制信号,高电平点亮
 12 //RS(D/C)   接PB10    //寄存器/数据选择信号(RS=0数据总线发送的是指令;RS=1数据总线发送的是像素数据)
 13 //RST        接PB12    //液晶屏复位信号,低电平复位
 14 /////////////////////////////////////////////////////////////////////////////////////////////////
 15 //==================================如何精简到只需要3个IO=======================================//
 16 //1.CS信号可以精简,不作SPI复用片选可将CS接地常低,节省1个IO
 17 //2.LED背光控制信号可以接高电平3.3V背光常亮,节省1个IO
 18 //3.RST复位信号可以接到单片机的复位端,利用系统上电复位,节省1个IO
 19 //==================================如何切换横竖屏显示=======================================//
 20 //打开lcd.h头文件,修改宏#define USE_HORIZONTAL 值为0使用竖屏模式.1,使用横屏模式
 21 //===========================如何切换模拟SPI总线驱动和硬件SPI总线驱动=========================//
 22 //打开lcd.h头文件,修改宏#define USE_HARDWARE_SPI  值为0使用模拟SPI总线.1,使用硬件SPI总线
 23 **************************************************************************************************/    
 24 
 25        
 26 //管理LCD重要参数
 27 //默认为竖屏
 28 _lcd_dev lcddev;
 29 
 30 //画笔颜色,背景颜色
 31 u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;  
 32 u16 DeviceCode;     
 33 
 34 /****************************************************************************
 35 * 名    称:void  SPIv_WriteData(u8 Data)
 36 * 功    能:STM32_模拟SPI写一个字节数据底层函数
 37 * 入口参数:Data
 38 * 出口参数:无
 39 * 说    明:STM32_模拟SPI读写一个字节数据底层函数
 40 ****************************************************************************/
 41 void  SPIv_WriteData(u8 Data)
 42 {
 43     unsigned char i=0;
 44     for(i=8;i>0;i--)
 45     {
 46         if(Data&0x80)    
 47       LCD_SDA_SET; //输出数据
 48       else LCD_SDA_CLR;
 49        
 50       LCD_SCL_CLR;       
 51       LCD_SCL_SET;
 52       Data<<=1; 
 53     }
 54 }
 55 
 56 /****************************************************************************
 57 * 名    称:u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
 58 * 功    能:STM32_硬件SPI读写一个字节数据底层函数
 59 * 入口参数:SPIx,Byte
 60 * 出口参数:返回总线收到的数据
 61 * 说    明:STM32_硬件SPI读写一个字节数据底层函数
 62 ****************************************************************************/
 63 u8 SPI_WriteByte(SPI_TypeDef* SPIx,u8 Byte)
 64 {
 65     while((SPIx->SR&SPI_I2S_FLAG_TXE)==RESET);        //等待发送区空      
 66     SPIx->DR=Byte;         //发送一个byte   
 67     while((SPIx->SR&SPI_I2S_FLAG_RXNE)==RESET);//等待接收完一个byte  
 68     return SPIx->DR;                   //返回收到的数据            
 69 } 
 70 
 71 /****************************************************************************
 72 * 名    称:void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)
 73 * 功    能:设置SPI的速度
 74 * 入口参数:SPIx,SpeedSet
 75 * 出口参数:无
 76 * 说    明:SpeedSet:1,高速;0,低速;
 77 ****************************************************************************/
 78 void SPI_SetSpeed(SPI_TypeDef* SPIx,u8 SpeedSet)
 79 {
 80     SPIx->CR1&=0XFFC7;
 81     if(SpeedSet==1)//高速
 82     {
 83         SPIx->CR1|=SPI_BaudRatePrescaler_2;//Fsck=Fpclk/2    
 84     }
 85     else//低速
 86     {
 87         SPIx->CR1|=SPI_BaudRatePrescaler_32; //Fsck=Fpclk/32
 88     }
 89     SPIx->CR1|=1<<6; //SPI设备使能
 90 } 
 91 
 92 /****************************************************************************
 93 * 名    称:SPI2_Init(void)
 94 * 功    能:STM32_SPI2硬件配置初始化
 95 * 入口参数:无
 96 * 出口参数:无
 97 * 说    明:STM32_SPI2硬件配置初始化
 98 ****************************************************************************/
 99 void SPI2_Init(void)    
100 {
101     SPI_InitTypeDef  SPI_InitStructure;
102     GPIO_InitTypeDef GPIO_InitStructure;
103      
104     //配置SPI2管脚
105     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);
106     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
107     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
108     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
109     GPIO_Init(GPIOB, &GPIO_InitStructure);
110 
111     GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;    
112     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
113     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
114     GPIO_Init(GPIOB, &GPIO_InitStructure);  
115 
116     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12;
117     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
118     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
119     GPIO_Init(GPIOB, &GPIO_InitStructure);
120     
121     //SPI2配置选项
122     RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2 ,ENABLE);
123        
124     SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
125     SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
126     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
127     SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
128     SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
129     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
130     SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
131     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
132     SPI_InitStructure.SPI_CRCPolynomial = 7;
133     SPI_Init(SPI2, &SPI_InitStructure);
134 
135     //使能SPI2
136     SPI_Cmd(SPI2, ENABLE);   
137 }
138 
139 //******************************************************************
140 //函数名:  LCD_WR_REG
141 //功能:    向液晶屏总线写入写16位指令
142 //输入参数:Reg:待写入的指令值
143 //返回值:  无
144 //修改记录:无
145 //******************************************************************
146 void LCD_WR_REG(u16 data)
147 { 
148    LCD_CS_CLR;
149    LCD_RS_CLR;
150 #if USE_HARDWARE_SPI   
151    SPI_WriteByte(SPI2,data);
152 #else
153    SPIv_WriteData(data);
154 #endif 
155    LCD_CS_SET;
156 }
157 
158 //******************************************************************
159 //函数名:  LCD_WR_DATA
160 //功能:    向液晶屏总线写入写8位数据
161 //输入参数:Data:待写入的数据
162 //返回值:  无
163 //修改记录:无
164 //******************************************************************
165 void LCD_WR_DATA(u8 data)
166 {
167     
168    LCD_CS_CLR;
169    LCD_RS_SET;
170 #if USE_HARDWARE_SPI   
171    SPI_WriteByte(SPI2,data);
172 #else
173    SPIv_WriteData(data);
174 #endif 
175    LCD_CS_SET;
176 
177 }
178 //******************************************************************
179 //函数名:  LCD_DrawPoint_16Bit
180 //功能:    8位总线下如何写入一个16位数据
181 //输入参数:(x,y):光标坐标
182 //返回值:  无
183 //修改记录:无
184 //******************************************************************
185 void LCD_WR_DATA_16Bit(u16 data)
186 {    
187    LCD_CS_CLR;
188    LCD_RS_SET;
189 #if USE_HARDWARE_SPI   
190    SPI_WriteByte(SPI2,data>>8);
191    SPI_WriteByte(SPI2,data);
192 #else
193    SPIv_WriteData(data>>8);
194    SPIv_WriteData(data);
195 #endif 
196    LCD_CS_SET;
197 }
198 
199 //******************************************************************
200 //函数名:  LCD_WriteReg
201 //功能:    写寄存器数据
202 //输入参数:LCD_Reg:寄存器地址
203 //            LCD_RegValue:要写入的数据
204 //返回值:  无
205 //修改记录:无
206 //******************************************************************
207 void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue)
208 {    
209     LCD_WR_REG(LCD_Reg);  
210     LCD_WR_DATA(LCD_RegValue);                 
211 }       
212      
213 //******************************************************************
214 //函数名:  LCD_WriteRAM_Prepare
215 //功能:    开始写GRAM
216 //            在给液晶屏传送RGB数据前,应该发送写GRAM指令
217 //输入参数:无
218 //返回值:  无
219 //修改记录:无
220 //******************************************************************
221 void LCD_WriteRAM_Prepare(void)
222 {
223     LCD_WR_REG(lcddev.wramcmd);
224 }     
225 
226 //******************************************************************
227 //函数名:  LCD_DrawPoint
228 //功能:    在指定位置写入一个像素点数据
229 //输入参数:(x,y):光标坐标
230 //返回值:  无
231 //修改记录:无
232 //******************************************************************
233 void LCD_DrawPoint(u16 x,u16 y)
234 {
235     LCD_SetCursor(x,y);//设置光标位置 
236     LCD_WR_DATA_16Bit(POINT_COLOR);
237 }
238 
239 //******************************************************************
240 //函数名:  LCD_GPIOInit
241 //功能:    液晶屏IO初始化,液晶初始化前要调用此函数
242 //输入参数:无
243 //返回值:  无
244 //修改记录:无
245 //******************************************************************
246 void LCD_GPIOInit(void)
247 {
248     GPIO_InitTypeDef  GPIO_InitStructure;
249           
250     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB ,ENABLE);
251     
252     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
253     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
254     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
255     GPIO_Init(GPIOB, &GPIO_InitStructure);      
256 }
257 
258 //******************************************************************
259 //函数名:  LCD_Reset
260 //功能:    LCD复位函数,液晶初始化前要调用此函数
261 //输入参数:无
262 //返回值:  无
263 //修改记录:无
264 //******************************************************************
265 void LCD_RESET(void)
266 {
267     LCD_RST_CLR;
268     delay_ms(100);    
269     LCD_RST_SET;
270     delay_ms(50);
271 }
272       
273 //******************************************************************
274 //函数名:  LCD_Init
275 //功能:    LCD初始化
276 //输入参数:无
277 //返回值:  无
278 //修改记录:无
279 //******************************************************************
280 void LCD_Init(void)
281 {  
282 #if USE_HARDWARE_SPI //使用硬件SPI
283     SPI2_Init();
284 #else    
285     LCD_GPIOInit();//使用模拟SPI
286 #endif                                           
287 
288      LCD_RESET(); //液晶屏复位
289 
290     //************* Start Initial Sequence **********//        
291     //开始初始化液晶屏
292     LCD_WR_REG(0x11);//Sleep exit 
293     delay_ms (120);        
294     //ST7735R Frame Rate
295     LCD_WR_REG(0xB1); 
296     LCD_WR_DATA(0x01); 
297     LCD_WR_DATA(0x2C); 
298     LCD_WR_DATA(0x2D); 
299 
300     LCD_WR_REG(0xB2); 
301     LCD_WR_DATA(0x01); 
302     LCD_WR_DATA(0x2C); 
303     LCD_WR_DATA(0x2D); 
304 
305     LCD_WR_REG(0xB3); 
306     LCD_WR_DATA(0x01); 
307     LCD_WR_DATA(0x2C); 
308     LCD_WR_DATA(0x2D); 
309     LCD_WR_DATA(0x01); 
310     LCD_WR_DATA(0x2C); 
311     LCD_WR_DATA(0x2D); 
312     
313     LCD_WR_REG(0xB4); //Column inversion 
314     LCD_WR_DATA(0x07); 
315     
316     //ST7735R Power Sequence
317     LCD_WR_REG(0xC0); 
318     LCD_WR_DATA(0xA2); 
319     LCD_WR_DATA(0x02); 
320     LCD_WR_DATA(0x84); 
321     LCD_WR_REG(0xC1); 
322     LCD_WR_DATA(0xC5); 
323 
324     LCD_WR_REG(0xC2); 
325     LCD_WR_DATA(0x0A); 
326     LCD_WR_DATA(0x00); 
327 
328     LCD_WR_REG(0xC3); 
329     LCD_WR_DATA(0x8A); 
330     LCD_WR_DATA(0x2A); 
331     LCD_WR_REG(0xC4); 
332     LCD_WR_DATA(0x8A); 
333     LCD_WR_DATA(0xEE); 
334     
335     LCD_WR_REG(0xC5); //VCOM 
336     LCD_WR_DATA(0x0E); 
337     
338     LCD_WR_REG(0x36); //MX, MY, RGB mode                  
339     LCD_WR_DATA(0xC8); 
340     
341     //ST7735R Gamma Sequence
342     LCD_WR_REG(0xe0); 
343     LCD_WR_DATA(0x0f); 
344     LCD_WR_DATA(0x1a); 
345     LCD_WR_DATA(0x0f); 
346     LCD_WR_DATA(0x18); 
347     LCD_WR_DATA(0x2f); 
348     LCD_WR_DATA(0x28); 
349     LCD_WR_DATA(0x20); 
350     LCD_WR_DATA(0x22); 
351     LCD_WR_DATA(0x1f); 
352     LCD_WR_DATA(0x1b); 
353     LCD_WR_DATA(0x23); 
354     LCD_WR_DATA(0x37); 
355     LCD_WR_DATA(0x00);     
356     LCD_WR_DATA(0x07); 
357     LCD_WR_DATA(0x02); 
358     LCD_WR_DATA(0x10); 
359 
360     LCD_WR_REG(0xe1); 
361     LCD_WR_DATA(0x0f); 
362     LCD_WR_DATA(0x1b); 
363     LCD_WR_DATA(0x0f); 
364     LCD_WR_DATA(0x17); 
365     LCD_WR_DATA(0x33); 
366     LCD_WR_DATA(0x2c); 
367     LCD_WR_DATA(0x29); 
368     LCD_WR_DATA(0x2e); 
369     LCD_WR_DATA(0x30); 
370     LCD_WR_DATA(0x30); 
371     LCD_WR_DATA(0x39); 
372     LCD_WR_DATA(0x3f); 
373     LCD_WR_DATA(0x00); 
374     LCD_WR_DATA(0x07); 
375     LCD_WR_DATA(0x03); 
376     LCD_WR_DATA(0x10);  
377     
378     LCD_WR_REG(0x2a);
379     LCD_WR_DATA(0x00);
380     LCD_WR_DATA(0x00);
381     LCD_WR_DATA(0x00);
382     LCD_WR_DATA(0x7f);
383 
384     LCD_WR_REG(0x2b);
385     LCD_WR_DATA(0x00);
386     LCD_WR_DATA(0x00);
387     LCD_WR_DATA(0x00);
388     LCD_WR_DATA(0x9f);
389     
390     LCD_WR_REG(0xF0); //Enable test command  
391     LCD_WR_DATA(0x01); 
392     LCD_WR_REG(0xF6); //Disable ram power save mode 
393     LCD_WR_DATA(0x00); 
394     
395     LCD_WR_REG(0x3A); //65k mode 
396     LCD_WR_DATA(0x05);     
397     LCD_WR_REG(0x29);//Display on    
398 
399     LCD_SetParam();//设置LCD参数     
400     LCD_LED_SET;//点亮背光     
401     //LCD_Clear(WHITE);
402 }
403 //******************************************************************
404 //函数名:  LCD_Clear
405 //功能:    LCD全屏填充清屏函数
406 //输入参数:Color:要清屏的填充色
407 //返回值:  无
408 //修改记录:无
409 //******************************************************************
410 void LCD_Clear(u16 Color)
411 {
412     u16 i,j;      
413     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);      
414     for(i=0;i<lcddev.width;i++)
415     {
416         for(j=0;j<lcddev.height;j++)
417         LCD_WR_DATA_16Bit(Color);    //写入数据      
418     }
419 }             
420 /*************************************************
421 函数名:LCD_SetWindows
422 功能:设置lcd显示窗口,在此区域写点数据自动换行
423 入口参数:xy起点和终点
424 返回值:无
425 *************************************************/
426 void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
427 {
428 #if USE_HORIZONTAL==1    //使用横屏
429     LCD_WR_REG(lcddev.setxcmd);    
430     LCD_WR_DATA(xStar>>8);
431     LCD_WR_DATA(0x00FF&xStar+3);        
432     LCD_WR_DATA(xEnd>>8);
433     LCD_WR_DATA(0x00FF&xEnd+3);
434 
435     LCD_WR_REG(lcddev.setycmd);    
436     LCD_WR_DATA(yStar>>8);
437     LCD_WR_DATA(0x00FF&yStar+2);        
438     LCD_WR_DATA(yEnd>>8);
439     LCD_WR_DATA(0x00FF&yEnd+2);    
440 
441 #else
442     
443     LCD_WR_REG(lcddev.setxcmd);    
444     LCD_WR_DATA(xStar>>8);
445     LCD_WR_DATA(0x00FF&xStar+2);        
446     LCD_WR_DATA(xEnd>>8);
447     LCD_WR_DATA(0x00FF&xEnd+2);
448 
449     LCD_WR_REG(lcddev.setycmd);    
450     LCD_WR_DATA(yStar>>8);
451     LCD_WR_DATA(0x00FF&yStar+3);        
452     LCD_WR_DATA(yEnd>>8);
453     LCD_WR_DATA(0x00FF&yEnd+3);    
454 #endif
455 
456     LCD_WriteRAM_Prepare();    //开始写入GRAM                
457 }   
458 
459 /*************************************************
460 函数名:LCD_SetCursor
461 功能:设置光标位置
462 入口参数:xy坐标
463 返回值:无
464 *************************************************/
465 void LCD_SetCursor(u16 Xpos, u16 Ypos)
466 {                          
467     LCD_SetWindows(Xpos,Ypos,Xpos,Ypos);
468 } 
469 
470 //设置LCD参数
471 //方便进行横竖屏模式切换
472 void LCD_SetParam(void)
473 {     
474     lcddev.wramcmd=0x2C;
475 #if USE_HORIZONTAL==1    //使用横屏      
476     lcddev.dir=1;//横屏
477     lcddev.width=128;
478     lcddev.height=128;
479     lcddev.setxcmd=0x2A;
480     lcddev.setycmd=0x2B;            
481     LCD_WriteReg(0x36,0xA8);
482 
483 #else//竖屏
484     lcddev.dir=0;//竖屏                              
485     lcddev.width=128;
486     lcddev.height=128;
487     lcddev.setxcmd=0x2A;
488     lcddev.setycmd=0x2B;    
489     LCD_WriteReg(0x36,0xC8);
490 #endif
491 }    
lcd.c
  1 #ifndef __LCD_H
  2 #define __LCD_H        
  3 #include "sys.h"     
  4 #include "stdlib.h"
  5 
  6 //////////////////////////////////////////////////////////////////////////////////    
  7 /****************************************************************************************************
  8 //=======================================液晶屏数据线接线==========================================//
  9 //CS        接PB11    //片选信号
 10 //CLK        接PB13    //SPI时钟信号
 11 //SDI(DIN)    接PB15    //SPI总线数据信号
 12 //=======================================液晶屏控制线接线==========================================//
 13 //LED        接PB9    //背光控制信号,高电平点亮
 14 //RS(D/C)   接PB10    //寄存器/数据选择信号(RS=0数据总线发送的是指令;RS=1数据总线发送的是像素数据)
 15 //RST        接PB12    //液晶屏复位信号,低电平复位
 16 /////////////////////////////////////////////////////////////////////////////////////////////////
 17 //==================================如何精简到只需要3个IO=======================================//
 18 //1.CS信号可以精简,不作SPI复用片选可将CS接地常低,节省1个IO
 19 //2.LED背光控制信号可以接高电平3.3V背光常亮,节省1个IO
 20 //3.RST复位信号可以接到单片机的复位端,利用系统上电复位,节省1个IO
 21 //==================================如何切换横竖屏显示=======================================//
 22 //打开lcd.h头文件,修改宏#define USE_HORIZONTAL 值为0使用竖屏模式.1,使用横屏模式
 23 //===========================如何切换模拟SPI总线驱动和硬件SPI总线驱动=========================//
 24 //打开lcd.h头文件,修改宏#define USE_HARDWARE_SPI  值为0使用模拟SPI总线.1,使用硬件SPI总线
 25 **************************************************************************************************/    
 26 
 27 //LCD重要参数集
 28 typedef struct  
 29 {                                            
 30     u16 width;            //LCD 宽度
 31     u16 height;            //LCD 高度
 32     u16 id;                //LCD ID
 33     u8  dir;            //横屏还是竖屏控制:0,竖屏;1,横屏。    
 34     u16     wramcmd;        //开始写gram指令
 35     u16  setxcmd;        //设置x坐标指令
 36     u16  setycmd;        //设置y坐标指令     
 37 }_lcd_dev;     
 38 
 39 //LCD参数
 40 extern _lcd_dev lcddev;    //管理LCD重要参数
 41 /////////////////////////////////////用户配置区///////////////////////////////////     
 42 //支持横竖屏快速定义切换,支持8/16位模式切换
 43 #define USE_HORIZONTAL      0    //定义是否使用横屏         0,不使用.1,使用.
 44 //使用硬件SPI 还是模拟SPI作为测试
 45 #define USE_HARDWARE_SPI    1  //1:Enable Hardware SPI;0:USE Soft SPI
 46 //////////////////////////////////////////////////////////////////////////////////      
 47 //定义LCD的尺寸
 48 #if USE_HORIZONTAL==1    //使用横屏
 49 #define LCD_W 320
 50 #define LCD_H 240
 51 #else
 52 #define LCD_W 240
 53 #define LCD_H 320
 54 #endif
 55 
 56 //TFTLCD部分外要调用的函数           
 57 extern u16  POINT_COLOR;//默认红色    
 58 extern u16  BACK_COLOR; //背景颜色.默认为白色
 59 
 60 ////////////////////////////////////////////////////////////////////
 61 //-----------------LCD端口定义---------------- 
 62 //QDtech全系列模块采用了三极管控制背光亮灭,用户也可以接PWM调节背光亮度
 63 #define LCD_LED            GPIO_Pin_9  //PB9 连接至TFT -LED
 64 //接口定义在Lcd_Driver.h内定义,请根据接线修改并修改相应IO初始化LCD_GPIO_Init()
 65 #define LCD_CTRL             GPIOB        //定义TFT数据端口
 66 #define LCD_RS             GPIO_Pin_10    //PB10连接至TFT --RS
 67 #define LCD_CS            GPIO_Pin_11 //PB11 连接至TFT --CS
 68 #define LCD_RST         GPIO_Pin_12    //PB12连接至TFT --RST
 69 #define LCD_SCL            GPIO_Pin_13    //PB13连接至TFT -- CLK
 70 #define LCD_SDA            GPIO_Pin_15    //PB15连接至TFT - SDI
 71                                 
 72 //////////////////////////////////////////////////////////////////////
 73 //液晶控制口置1操作语句宏定义
 74 #define    LCD_CS_SET      LCD_CTRL->BSRR=LCD_CS    
 75 #define    LCD_RS_SET      LCD_CTRL->BSRR=LCD_RS    
 76 #define    LCD_SDA_SET      LCD_CTRL->BSRR=LCD_SDA    
 77 #define    LCD_SCL_SET      LCD_CTRL->BSRR=LCD_SCL    
 78 #define    LCD_RST_SET      LCD_CTRL->BSRR=LCD_RST    
 79 #define    LCD_LED_SET      LCD_CTRL->BSRR=LCD_LED   
 80 
 81 //液晶控制口置0操作语句宏定义
 82 #define    LCD_CS_CLR      LCD_CTRL->BRR=LCD_CS    
 83 #define    LCD_RS_CLR      LCD_CTRL->BRR=LCD_RS    
 84 #define    LCD_SDA_CLR      LCD_CTRL->BRR=LCD_SDA    
 85 #define    LCD_SCL_CLR      LCD_CTRL->BRR=LCD_SCL    
 86 #define    LCD_RST_CLR      LCD_CTRL->BRR=LCD_RST    
 87 #define    LCD_LED_CLR      LCD_CTRL->BRR=LCD_LED 
 88 
 89 //画笔颜色
 90 #define WHITE       0xFFFF
 91 #define BLACK          0x0000      
 92 #define BLUE           0x001F  
 93 #define BRED        0XF81F
 94 #define GRED                  0XFFE0
 95 #define GBLUE                 0X07FF
 96 #define RED         0xF800
 97 #define MAGENTA     0xF81F
 98 #define GREEN       0x07E0
 99 #define CYAN        0x7FFF
100 #define YELLOW      0xFFE0
101 #define BROWN             0XBC40 //棕色
102 #define BRRED             0XFC07 //棕红色
103 #define GRAY              0X8430 //灰色
104 //GUI颜色
105 
106 #define DARKBLUE           0X01CF    //深蓝色
107 #define LIGHTBLUE           0X7D7C    //浅蓝色  
108 #define GRAYBLUE            0X5458 //灰蓝色
109 //以上三色为PANEL的颜色 
110  
111 #define LIGHTGREEN         0X841F //浅绿色
112 //#define LIGHTGRAY     0XEF5B //浅灰色(PANNEL)
113 #define LGRAY                      0XC618 //浅灰色(PANNEL),窗体背景色
114 
115 #define LGRAYBLUE          0XA651 //浅灰蓝色(中间层颜色)
116 #define LBBLUE          0X2B12 //浅棕蓝色(选择条目的反色)
117                                                                       
118 extern u16 BACK_COLOR, POINT_COLOR ;  
119 
120 void LCD_Init(void);
121 void LCD_DisplayOn(void);
122 void LCD_DisplayOff(void);
123 void LCD_Clear(u16 Color);     
124 void LCD_SetCursor(u16 Xpos, u16 Ypos);
125 void LCD_DrawPoint(u16 x,u16 y);//画点
126 u16  LCD_ReadPoint(u16 x,u16 y); //读点
127 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);
128 void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);           
129 void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd);
130 void LCD_DrawPoint_16Bit(u16 color);
131 u16 LCD_RD_DATA(void);//读取LCD数据                                        
132 void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
133 void LCD_WR_DATA(u8 data);
134 void LCD_WR_DATA_16Bit(u16 data);
135 u16 LCD_ReadReg(u8 LCD_Reg);
136 void LCD_WriteRAM_Prepare(void);
137 void LCD_WriteRAM(u16 RGB_Code);
138 u16 LCD_ReadRAM(void);           
139 u16 LCD_BGR2RGB(u16 c);
140 void LCD_SetParam(void);
141 
142                                    
143 #endif  
144      
145      
lcd.h
  1 #include "lcd.h"
  2 #include "string.h"
  3 #include "font.h" 
  4 #include "delay.h"
  5 #include "gui.h"
  6 
  7 //******************************************************************
  8 //函数名:  GUI_DrawPoint
  9 //功能:    GUI描绘一个点
 10 //输入参数:x:光标位置x坐标
 11 //            y:光标位置y坐标
 12 //            color:要填充的颜色
 13 //返回值:  无
 14 //修改记录:无
 15 //******************************************************************
 16 void GUI_DrawPoint(u16 x,u16 y,u16 color)
 17 {
 18     LCD_SetCursor(x,y);//设置光标位置 
 19     LCD_WR_DATA_16Bit(color); 
 20 }
 21 
 22 //******************************************************************
 23 //函数名:  LCD_Fill
 24 //功能:    在指定区域内填充颜色
 25 //输入参数:sx:指定区域开始点x坐标
 26 //            sy:指定区域开始点y坐标
 27 //            ex:指定区域结束点x坐标
 28 //            ey:指定区域结束点y坐标
 29 //            color:要填充的颜色
 30 //返回值:  无
 31 //修改记录:无
 32 //******************************************************************
 33 void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
 34 {      
 35 
 36     u16 i,j;            
 37     u16 width=ex-sx+1;         //得到填充的宽度
 38     u16 height=ey-sy+1;        //高度
 39     LCD_SetWindows(sx,sy,ex-1,ey-1);//设置显示窗口
 40     for(i=0;i<height;i++)
 41     {
 42         for(j=0;j<width;j++)
 43         LCD_WR_DATA_16Bit(color);    //写入数据      
 44     }
 45 
 46     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口设置为全屏
 47 }
 48 
 49 //******************************************************************
 50 //函数名:  LCD_DrawLine
 51 //功能:    GUI画线
 52 //输入参数:x1,y1:起点坐标
 53 //            x2,y2:终点坐标 
 54 //返回值:  无
 55 //修改记录:无
 56 //****************************************************************** 
 57 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
 58 {
 59     u16 t; 
 60     int xerr=0,yerr=0,delta_x,delta_y,distance; 
 61     int incx,incy,uRow,uCol; 
 62 
 63     delta_x=x2-x1; //计算坐标增量 
 64     delta_y=y2-y1; 
 65     uRow=x1; 
 66     uCol=y1; 
 67     if(delta_x>0)incx=1; //设置单步方向 
 68     else if(delta_x==0)incx=0;//垂直线 
 69     else {incx=-1;delta_x=-delta_x;} 
 70     if(delta_y>0)incy=1; 
 71     else if(delta_y==0)incy=0;//水平线 
 72     else{incy=-1;delta_y=-delta_y;} 
 73     if( delta_x>delta_y)distance=delta_x; //选取基本增量坐标轴 
 74     else distance=delta_y; 
 75     for(t=0;t<=distance+1;t++ )//画线输出 
 76     {  
 77         LCD_DrawPoint(uRow,uCol);//画点 
 78         xerr+=delta_x ; 
 79         yerr+=delta_y ; 
 80         if(xerr>distance) 
 81         { 
 82             xerr-=distance; 
 83             uRow+=incx; 
 84         } 
 85         if(yerr>distance) 
 86         { 
 87             yerr-=distance; 
 88             uCol+=incy; 
 89         } 
 90     }  
 91 } 
 92 
 93 //******************************************************************
 94 //函数名:  LCD_DrawRectangle
 95 //功能:    GUI画矩形(非填充)
 96 //输入参数:(x1,y1),(x2,y2):矩形的对角坐标
 97 //返回值:  无
 98 //修改记录:无
 99 //******************************************************************  
100 void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
101 {
102     LCD_DrawLine(x1,y1,x2,y1);
103     LCD_DrawLine(x1,y1,x1,y2);
104     LCD_DrawLine(x1,y2,x2,y2);
105     LCD_DrawLine(x2,y1,x2,y2);
106 }  
107 
108 //******************************************************************
109 //函数名:  LCD_DrawFillRectangle
110 //功能:    GUI画矩形(填充)
111 //输入参数:(x1,y1),(x2,y2):矩形的对角坐标
112 //返回值:  无
113 //修改记录:无
114 //******************************************************************   
115 void LCD_DrawFillRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
116 {
117     LCD_Fill(x1,y1,x2,y2,POINT_COLOR);
118 
119 }
120  
121 //******************************************************************
122 //函数名:  _draw_circle_8
123 //功能:    8对称性画圆算法(内部调用)
124 //输入参数:(xc,yc) :圆中心坐标
125 //             (x,y):光标相对于圆心的坐标
126 //             c:填充的颜色
127 //返回值:  无
128 //修改记录:无
129 //******************************************************************  
130 void _draw_circle_8(int xc, int yc, int x, int y, u16 c)
131 {
132     GUI_DrawPoint(xc + x, yc + y, c);
133 
134     GUI_DrawPoint(xc - x, yc + y, c);
135 
136     GUI_DrawPoint(xc + x, yc - y, c);
137 
138     GUI_DrawPoint(xc - x, yc - y, c);
139 
140     GUI_DrawPoint(xc + y, yc + x, c);
141 
142     GUI_DrawPoint(xc - y, yc + x, c);
143 
144     GUI_DrawPoint(xc + y, yc - x, c);
145 
146     GUI_DrawPoint(xc - y, yc - x, c);
147 }
148 
149 //******************************************************************
150 //函数名:  gui_circle
151 //功能:    在指定位置画一个指定大小的圆(填充)
152 //输入参数:(xc,yc) :圆中心坐标
153 //             c:填充的颜色
154 //             r:圆半径
155 //             fill:填充判断标志,1-填充,0-不填充
156 //返回值:  无
157 //修改记录:无
158 //******************************************************************  
159 void gui_circle(int xc, int yc,u16 c,int r, int fill)
160 {
161     int x = 0, y = r, yi, d;
162 
163     d = 3 - 2 * r;
164 
165 
166     if (fill) 
167     {
168         // 如果填充(画实心圆)
169         while (x <= y) {
170             for (yi = x; yi <= y; yi++)
171                 _draw_circle_8(xc, yc, x, yi, c);
172 
173             if (d < 0) {
174                 d = d + 4 * x + 6;
175             } else {
176                 d = d + 4 * (x - y) + 10;
177                 y--;
178             }
179             x++;
180         }
181     } else 
182     {
183         // 如果不填充(画空心圆)
184         while (x <= y) {
185             _draw_circle_8(xc, yc, x, y, c);
186             if (d < 0) {
187                 d = d + 4 * x + 6;
188             } else {
189                 d = d + 4 * (x - y) + 10;
190                 y--;
191             }
192             x++;
193         }
194     }
195 }
196 
197 //******************************************************************
198 //函数名:  LCD_ShowChar
199 //功能:    显示单个英文字符
200 //输入参数:(x,y):字符显示位置起始坐标
201 //            fc:前置画笔颜色
202 //            bc:背景颜色
203 //            num:数值(0-94)
204 //            size:字体大小
205 //            mode:模式  0,填充模式;1,叠加模式
206 //返回值:  无
207 //修改记录:无
208 //******************************************************************  
209 void LCD_ShowChar(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 size,u8 mode)
210 {  
211     u8 temp;
212     u8 pos,t;
213     u16 colortemp=POINT_COLOR;      
214            
215     num=num-' ';//得到偏移后的值
216     LCD_SetWindows(x,y,x+size/2-1,y+size-1);//设置单个文字显示窗口
217     if(!mode) //非叠加方式
218     {
219         
220         for(pos=0;pos<size;pos++)
221         {
222             if(size==12)temp=asc2_1206[num][pos];//调用1206字体
223             else temp=asc2_1608[num][pos];         //调用1608字体
224             for(t=0;t<size/2;t++)
225             {                 
226                 if(temp&0x01)LCD_WR_DATA(fc); 
227                 else LCD_WR_DATA(bc); 
228                 temp>>=1; 
229                 
230             }
231             
232         }    
233     }else//叠加方式
234     {
235         for(pos=0;pos<size;pos++)
236         {
237             if(size==12)temp=asc2_1206[num][pos];//调用1206字体
238             else temp=asc2_1608[num][pos];         //调用1608字体
239             for(t=0;t<size/2;t++)
240             {   
241                 POINT_COLOR=fc;              
242                 if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点    
243                 temp>>=1; 
244             }
245         }
246     }
247     POINT_COLOR=colortemp;    
248     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏                      
249 } 
250 
251 //******************************************************************
252 //函数名:  LCD_ShowChar
253 //功能:    显示单个英文字符
254 //输入参数:(x,y):字符显示位置起始坐标
255 //            fc:前置画笔颜色
256 //            bc:背景颜色
257 //            num:数值(0-94)
258 //            size:字体大小
259 //            mode:模式  0,填充模式;1,叠加模式
260 //返回值:  无
261 //修改记录:无
262 //******************************************************************  
263 void LCD_ShowNum2412(u16 x,u16 y,u16 fc, u16 bc,u8 *p ,u8 size,u8 mode)
264 {  
265     u16 temp;
266     u8 pos,t;
267     u16 colortemp=POINT_COLOR;      
268     u16 x0=x;
269     u16 y0=y; 
270     u8 num=0;
271     
272 
273     while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
274     {   
275 
276         if(x>(lcddev.width-1)||y>(lcddev.height-1)) 
277         return;   
278         num=*p;
279         if(':'==num) //特殊字符":"
280         num=10;    
281         else if('.'==num)//特殊字符"."
282         num=11;    
283         else  //纯数字       
284         num=num-'0';   
285         x0=x;
286             
287         for(pos=0;pos<48;pos++)
288         {
289             temp=asc2_2412[num][pos];
290             for(t=0;t<8;t++)
291             {   
292                 POINT_COLOR=fc;              
293                 if(temp&0x80)LCD_DrawPoint(x,y);//画一个点  
294                 //else LCD_WR_DATA_16Bit(bc);   
295                 temp<<=1; 
296                 x++;
297                 if((x-x0)==12)
298                 {
299                     x=x0;
300                     y++;
301                     break;
302                 }
303             }
304         }
305     if(num<10)
306     x+=16;    //人为控制字距,使得排版更好看,原值为12
307     else
308     x+=8; //人为控制字距,使得排版更好看,原值为12
309 
310     y=y0;
311     p++;
312     }  
313     POINT_COLOR=colortemp;                
314 } 
315 
316 
317 //******************************************************************
318 //函数名:  LCD_ShowString
319 //功能:    显示英文字符串
320 //输入参数:x,y :起点坐标     
321 //            size:字体大小
322 //            *p:字符串起始地址
323 //            mode:模式    0,填充模式;1,叠加模式
324 //返回值:  无
325 //修改记录:无
326 //******************************************************************        
327 void LCD_ShowString(u16 x,u16 y,u8 size,u8 *p,u8 mode)
328 {         
329     while((*p<='~')&&(*p>=' '))//判断是不是非法字符!
330     {   
331         if(x>(lcddev.width-1)||y>(lcddev.height-1)) 
332         return;     
333         LCD_ShowChar(x,y,POINT_COLOR,BACK_COLOR,*p,size,mode);
334         x+=size/2;
335         p++;
336     }  
337 } 
338 
339 //******************************************************************
340 //函数名:  mypow
341 //功能:    求m的n次方(gui内部调用)
342 //输入参数:m:乘数
343 //            n:幂
344 //返回值:  m的n次方
345 //修改记录:无
346 //******************************************************************  
347 u32 mypow(u8 m,u8 n)
348 {
349     u32 result=1;     
350     while(n--)result*=m;    
351     return result;
352 }
353 
354 //******************************************************************
355 //函数名:  LCD_ShowNum
356 //功能:    显示单个数字变量值
357 //输入参数:x,y :起点坐标     
358 //            len :指定显示数字的位数
359 //            size:字体大小(12,16)
360 //            color:颜色
361 //            num:数值(0~4294967295)
362 //返回值:  无
363 //修改记录:无
364 //******************************************************************               
365 void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
366 {             
367     u8 t,temp;
368     u8 enshow=0;                           
369     for(t=0;t<len;t++)
370     {
371         temp=(num/mypow(10,len-t-1))%10;
372         if(enshow==0&&t<(len-1))
373         {
374             if(temp==0)
375             {
376                 LCD_ShowChar(x+(size/2)*t,y,POINT_COLOR,BACK_COLOR,' ',size,1);
377                 continue;
378             }else enshow=1; 
379               
380         }
381          LCD_ShowChar(x+(size/2)*t,y,POINT_COLOR,BACK_COLOR,temp+'0',size,1); 
382     }
383 } 
384 
385 //******************************************************************
386 //函数名:  GUI_DrawFont16
387 //功能:    显示单个16X16中文字体
388 //输入参数:x,y :起点坐标
389 //            fc:前置画笔颜色
390 //            bc:背景颜色     
391 //            s:字符串地址
392 //            mode:模式    0,填充模式;1,叠加模式
393 //返回值:  无
394 //修改记录:无
395 //******************************************************************
396 void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
397 {
398     u8 i,j;
399     u16 k;
400     u16 HZnum;
401     u16 x0=x;
402     HZnum=sizeof(tfont16)/sizeof(typFNT_GB16);    //自动统计汉字数目
403     
404             
405     for (k=0;k<HZnum;k++) 
406     {
407       if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
408       {     LCD_SetWindows(x,y,x+16-1,y+16-1);
409             for(i=0;i<16*2;i++)
410             {
411                 for(j=0;j<8;j++)
412                 {    
413                     if(!mode) //非叠加方式
414                     {
415                         if(tfont16[k].Msk[i]&(0x80>>j))    LCD_WR_DATA_16Bit(fc);
416                         else LCD_WR_DATA_16Bit(bc);
417                     }
418                     else
419                     {
420                         POINT_COLOR=fc;
421                         if(tfont16[k].Msk[i]&(0x80>>j))    LCD_DrawPoint(x,y);//画一个点
422                         x++;
423                         if((x-x0)==16)
424                         {
425                             x=x0;
426                             y++;
427                             break;
428                         }
429                     }
430 
431                 }
432                 
433             }
434             
435             
436         }                      
437         continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
438     }
439 
440     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏  
441 } 
442 
443 //******************************************************************
444 //函数名:  GUI_DrawFont24
445 //功能:    显示单个24X24中文字体
446 //输入参数:x,y :起点坐标
447 //            fc:前置画笔颜色
448 //            bc:背景颜色     
449 //            s:字符串地址
450 //            mode:模式    0,填充模式;1,叠加模式
451 //返回值:  无
452 //修改记录:无
453 //******************************************************************
454 void GUI_DrawFont24(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
455 {
456     u8 i,j;
457     u16 k;
458     u16 HZnum;
459     u16 x0=x;
460     HZnum=sizeof(tfont24)/sizeof(typFNT_GB24);    //自动统计汉字数目
461         
462             for (k=0;k<HZnum;k++) 
463             {
464               if ((tfont24[k].Index[0]==*(s))&&(tfont24[k].Index[1]==*(s+1)))
465               {     LCD_SetWindows(x,y,x+24-1,y+24-1);
466                     for(i=0;i<24*3;i++)
467                     {
468                             for(j=0;j<8;j++)
469                             {
470                                 if(!mode) //非叠加方式
471                                 {
472                                     if(tfont24[k].Msk[i]&(0x80>>j))    LCD_WR_DATA_16Bit(fc);
473                                     else LCD_WR_DATA_16Bit(bc);
474                                 }
475                             else
476                             {
477                                 POINT_COLOR=fc;
478                                 if(tfont24[k].Msk[i]&(0x80>>j))    LCD_DrawPoint(x,y);//画一个点
479                                 x++;
480                                 if((x-x0)==24)
481                                 {
482                                     x=x0;
483                                     y++;
484                                     break;
485                                 }
486                             }
487                         }
488                     }
489                     
490                     
491                 }                      
492                 continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
493             }
494 
495     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏  
496 }
497 
498 //******************************************************************
499 //函数名:  GUI_DrawFont32
500 //功能:    显示单个32X32中文字体
501 //输入参数:x,y :起点坐标
502 //            fc:前置画笔颜色
503 //            bc:背景颜色     
504 //            s:字符串地址
505 //            mode:模式    0,填充模式;1,叠加模式
506 //返回值:  无
507 //修改记录:无
508 //****************************************************************** 
509 void GUI_DrawFont32(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode)
510 {
511     u8 i,j;
512     u16 k;
513     u16 HZnum;
514     u16 x0=x;
515     HZnum=sizeof(tfont32)/sizeof(typFNT_GB32);    //自动统计汉字数目
516     for (k=0;k<HZnum;k++) 
517             {
518               if ((tfont32[k].Index[0]==*(s))&&(tfont32[k].Index[1]==*(s+1)))
519               {     LCD_SetWindows(x,y,x+32-1,y+32-1);
520                     for(i=0;i<32*4;i++)
521                     {
522                         for(j=0;j<8;j++)
523                         {
524                             if(!mode) //非叠加方式
525                             {
526                                 if(tfont32[k].Msk[i]&(0x80>>j))    LCD_WR_DATA_16Bit(fc);
527                                 else LCD_WR_DATA_16Bit(bc);
528                             }
529                             else
530                             {
531                                 POINT_COLOR=fc;
532                                 if(tfont32[k].Msk[i]&(0x80>>j))    LCD_DrawPoint(x,y);//画一个点
533                                 x++;
534                                 if((x-x0)==32)
535                                 {
536                                     x=x0;
537                                     y++;
538                                     break;
539                                 }
540                             }
541                         }
542                     }
543                     
544                     
545                 }                      
546                 continue;  //查找到对应点阵字库立即退出,防止多个汉字重复取模带来影响
547             }
548     
549     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复窗口为全屏  
550 } 
551 
552 //******************************************************************
553 //函数名:  Show_Str
554 //功能:    显示一个字符串,包含中英文显示
555 //输入参数:x,y :起点坐标
556 //             fc:前置画笔颜色
557 //            bc:背景颜色
558 //            str :字符串     
559 //            size:字体大小
560 //            mode:模式    0,填充模式;1,叠加模式
561 //返回值:  无
562 //修改记录:无
563 //******************************************************************                      
564 void Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode)
565 {                    
566     u16 x0=x;                                    
567       u8 bHz=0;     //字符或者中文 
568     while(*str!=0)//数据未结束
569     { 
570         if(!bHz)
571         {
572             if(x>(lcddev.width-size/2)||y>(lcddev.height-size)) 
573             return; 
574             if(*str>0x80)bHz=1;//中文 
575             else              //字符
576             {          
577                 if(*str==0x0D)//换行符号
578                 {         
579                     y+=size;
580                     x=x0;
581                     str++; 
582                 }  
583                 else
584                 {
585                     if(size==12||size==16)
586                     {  
587                     LCD_ShowChar(x,y,fc,bc,*str,size,mode);
588                     x+=size/2; //字符,为全字的一半 
589                     }
590                     else//字库中没有集成16X32的英文字体,用8X16代替
591                     {
592                          LCD_ShowChar(x,y,fc,bc,*str,16,mode);
593                         x+=8; //字符,为全字的一半 
594                     }
595                 } 
596                 str++; 
597                 
598             }
599         }else//中文 
600         {   
601             if(x>(lcddev.width-size)||y>(lcddev.height-size)) 
602             return;  
603             bHz=0;//有汉字库    
604             if(size==32)
605             GUI_DrawFont32(x,y,fc,bc,str,mode);         
606             else if(size==24)
607             GUI_DrawFont24(x,y,fc,bc,str,mode);    
608             else
609             GUI_DrawFont16(x,y,fc,bc,str,mode);
610                 
611             str+=2; 
612             x+=size;//下一个汉字偏移        
613         }                         
614     }   
615 }
616 
617 //******************************************************************
618 //函数名:  Gui_StrCenter
619 //功能:    居中显示一个字符串,包含中英文显示
620 //输入参数:x,y :起点坐标
621 //             fc:前置画笔颜色
622 //            bc:背景颜色
623 //            str :字符串     
624 //            size:字体大小
625 //            mode:模式    0,填充模式;1,叠加模式
626 //返回值:  无
627 //修改记录:无
628 //******************************************************************   
629 void Gui_StrCenter(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode)
630 {
631     u16 len=strlen((const char *)str);
632     u16 x1=(lcddev.width-len*8)/2;
633     Show_Str(x+x1,y,fc,bc,str,size,mode);
634 } 
635  
636 //******************************************************************
637 //函数名:  Gui_Drawbmp16
638 //功能:    显示一副16位BMP图像
639 //输入参数:x,y :起点坐标
640 //             *p :图像数组起始地址
641 //返回值:  无
642 //修改记录:无
643 //******************************************************************  
644 void Gui_Drawbmp16(u16 x,u16 y,const unsigned char *p) //显示40*40 QQ图片
645 {
646       int i; 
647     unsigned char picH,picL; 
648     LCD_SetWindows(x,y,x+40-1,y+40-1);//窗口设置
649     for(i=0;i<40*40;i++)
650     {    
651          picL=*(p+i*2);    //数据低位在前
652         picH=*(p+i*2+1);                
653         LCD_WR_DATA_16Bit(picH<<8|picL);                          
654     }    
655     LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//恢复显示窗口为全屏    
656 
657 }
gui.c
 1 #ifndef __GUI_H__
 2 #define __GUI_H__
 3 
 4 void GUI_DrawPoint(u16 x,u16 y,u16 color);
 5 void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);
 6 void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2);
 7 void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);
 8 void Draw_Circle(u16 x0,u16 y0,u16 fc,u8 r);
 9 void LCD_ShowChar(u16 x,u16 y,u16 fc, u16 bc, u8 num,u8 size,u8 mode);
10 void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);
11 void LCD_Show2Num(u16 x,u16 y,u16 num,u8 len,u8 size,u8 mode);
12 void LCD_ShowString(u16 x,u16 y,u8 size,u8 *p,u8 mode);
13 void GUI_DrawFont16(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode);
14 void GUI_DrawFont24(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode);
15 void GUI_DrawFont32(u16 x, u16 y, u16 fc, u16 bc, u8 *s,u8 mode);
16 void Show_Str(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode);
17 void Gui_Drawbmp16(u16 x,u16 y,const unsigned char *p); //显示40*40 QQ图片
18 void gui_circle(int xc, int yc,u16 c,int r, int fill);
19 void Gui_StrCenter(u16 x, u16 y, u16 fc, u16 bc, u8 *str,u8 size,u8 mode);
20 void LCD_DrawFillRectangle(u16 x1, u16 y1, u16 x2, u16 y2);
21 void LCD_ShowNum2412(u16 x,u16 y,u16 fc, u16 bc,u8 *p ,u8 size,u8 mode);
22 #endif
gui.h
  1 #ifndef __FONT_H
  2 #define __FONT_H        
  3 //常用ASCII表
  4 //偏移量32
  5 //ASCII字符集
  6 //偏移量32
  7 //大小:12*6
  8 const unsigned char asc2_1206[95][12]={
  9 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
 10 {0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x04,0x00,0x00},/*"!",1*/
 11 {0x00,0x14,0x0A,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
 12 {0x00,0x00,0x14,0x14,0x3F,0x14,0x0A,0x3F,0x0A,0x0A,0x00,0x00},/*"#",3*/
 13 {0x00,0x04,0x1E,0x15,0x05,0x06,0x0C,0x14,0x15,0x0F,0x04,0x00},/*"$",4*/
 14 {0x00,0x00,0x12,0x15,0x0D,0x0A,0x14,0x2C,0x2A,0x12,0x00,0x00},/*"%",5*/
 15 {0x00,0x00,0x04,0x0A,0x0A,0x1E,0x15,0x15,0x09,0x36,0x00,0x00},/*"&",6*/
 16 {0x00,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
 17 {0x00,0x20,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x20,0x00},/*"(",8*/
 18 {0x00,0x02,0x04,0x08,0x08,0x08,0x08,0x08,0x08,0x04,0x02,0x00},/*")",9*/
 19 {0x00,0x00,0x00,0x04,0x15,0x0E,0x0E,0x15,0x04,0x00,0x00,0x00},/*"*",10*/
 20 {0x00,0x00,0x04,0x04,0x04,0x1F,0x04,0x04,0x04,0x00,0x00,0x00},/*"+",11*/
 21 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01},/*",",12*/
 22 {0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
 23 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00},/*".",14*/
 24 {0x00,0x10,0x08,0x08,0x08,0x04,0x04,0x02,0x02,0x02,0x01,0x00},/*"/",15*/
 25 {0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"0",16*/
 26 {0x00,0x00,0x04,0x06,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"1",17*/
 27 {0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x02,0x01,0x1F,0x00,0x00},/*"2",18*/
 28 {0x00,0x00,0x0E,0x11,0x10,0x0C,0x10,0x10,0x11,0x0E,0x00,0x00},/*"3",19*/
 29 {0x00,0x00,0x08,0x0C,0x0A,0x0A,0x09,0x1E,0x08,0x18,0x00,0x00},/*"4",20*/
 30 {0x00,0x00,0x1F,0x01,0x01,0x0F,0x10,0x10,0x11,0x0E,0x00,0x00},/*"5",21*/
 31 {0x00,0x00,0x0E,0x09,0x01,0x0F,0x11,0x11,0x11,0x0E,0x00,0x00},/*"6",22*/
 32 {0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x04,0x04,0x04,0x00,0x00},/*"7",23*/
 33 {0x00,0x00,0x0E,0x11,0x11,0x0E,0x11,0x11,0x11,0x0E,0x00,0x00},/*"8",24*/
 34 {0x00,0x00,0x0E,0x11,0x11,0x11,0x1E,0x10,0x12,0x0E,0x00,0x00},/*"9",25*/
 35 {0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x00},/*":",26*/
 36 {0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x04,0x00},/*";",27*/
 37 {0x00,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x00,0x00},/*"<",28*/
 38 {0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x1F,0x00,0x00,0x00,0x00},/*"=",29*/
 39 {0x00,0x02,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
 40 {0x00,0x00,0x0E,0x11,0x11,0x08,0x04,0x04,0x00,0x04,0x00,0x00},/*"?",31*/
 41 {0x00,0x00,0x0E,0x11,0x19,0x15,0x15,0x1D,0x01,0x1E,0x00,0x00},/*"@",32*/
 42 {0x00,0x00,0x04,0x04,0x0C,0x0A,0x0A,0x1E,0x12,0x33,0x00,0x00},/*"A",33*/
 43 {0x00,0x00,0x0F,0x12,0x12,0x0E,0x12,0x12,0x12,0x0F,0x00,0x00},/*"B",34*/
 44 {0x00,0x00,0x1E,0x11,0x01,0x01,0x01,0x01,0x11,0x0E,0x00,0x00},/*"C",35*/
 45 {0x00,0x00,0x0F,0x12,0x12,0x12,0x12,0x12,0x12,0x0F,0x00,0x00},/*"D",36*/
 46 {0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x12,0x1F,0x00,0x00},/*"E",37*/
 47 {0x00,0x00,0x1F,0x12,0x0A,0x0E,0x0A,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
 48 {0x00,0x00,0x1C,0x12,0x01,0x01,0x39,0x11,0x12,0x0C,0x00,0x00},/*"G",39*/
 49 {0x00,0x00,0x33,0x12,0x12,0x1E,0x12,0x12,0x12,0x33,0x00,0x00},/*"H",40*/
 50 {0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"I",41*/
 51 {0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x07,0x00},/*"J",42*/
 52 {0x00,0x00,0x37,0x12,0x0A,0x06,0x0A,0x0A,0x12,0x37,0x00,0x00},/*"K",43*/
 53 {0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x22,0x3F,0x00,0x00},/*"L",44*/
 54 {0x00,0x00,0x1B,0x1B,0x1B,0x1B,0x15,0x15,0x15,0x15,0x00,0x00},/*"M",45*/
 55 {0x00,0x00,0x3B,0x12,0x16,0x16,0x1A,0x1A,0x12,0x17,0x00,0x00},/*"N",46*/
 56 {0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x11,0x11,0x0E,0x00,0x00},/*"O",47*/
 57 {0x00,0x00,0x0F,0x12,0x12,0x0E,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
 58 {0x00,0x00,0x0E,0x11,0x11,0x11,0x11,0x17,0x19,0x0E,0x18,0x00},/*"Q",49*/
 59 {0x00,0x00,0x0F,0x12,0x12,0x0E,0x0A,0x12,0x12,0x37,0x00,0x00},/*"R",50*/
 60 {0x00,0x00,0x1E,0x11,0x01,0x06,0x08,0x10,0x11,0x0F,0x00,0x00},/*"S",51*/
 61 {0x00,0x00,0x1F,0x15,0x04,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"T",52*/
 62 {0x00,0x00,0x33,0x12,0x12,0x12,0x12,0x12,0x12,0x0C,0x00,0x00},/*"U",53*/
 63 {0x00,0x00,0x33,0x12,0x12,0x0A,0x0A,0x0C,0x04,0x04,0x00,0x00},/*"V",54*/
 64 {0x00,0x00,0x15,0x15,0x15,0x0E,0x0A,0x0A,0x0A,0x0A,0x00,0x00},/*"W",55*/
 65 {0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x0A,0x0A,0x1B,0x00,0x00},/*"X",56*/
 66 {0x00,0x00,0x1B,0x0A,0x0A,0x04,0x04,0x04,0x04,0x0E,0x00,0x00},/*"Y",57*/
 67 {0x00,0x00,0x1F,0x09,0x08,0x04,0x04,0x02,0x12,0x1F,0x00,0x00},/*"Z",58*/
 68 {0x00,0x1C,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1C,0x00},/*"[",59*/
 69 {0x00,0x02,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x00,0x00},/*"\",60*/
 70 {0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x00},/*"]",61*/
 71 {0x00,0x04,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
 72 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F},/*"_",63*/
 73 {0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
 74 {0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1C,0x12,0x3C,0x00,0x00},/*"a",65*/
 75 {0x00,0x00,0x03,0x02,0x02,0x0E,0x12,0x12,0x12,0x0E,0x00,0x00},/*"b",66*/
 76 {0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x02,0x02,0x1C,0x00,0x00},/*"c",67*/
 77 {0x00,0x00,0x18,0x10,0x10,0x1C,0x12,0x12,0x12,0x3C,0x00,0x00},/*"d",68*/
 78 {0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x1E,0x02,0x1C,0x00,0x00},/*"e",69*/
 79 {0x00,0x00,0x38,0x04,0x04,0x1E,0x04,0x04,0x04,0x1E,0x00,0x00},/*"f",70*/
 80 {0x00,0x00,0x00,0x00,0x00,0x3C,0x12,0x0C,0x02,0x1E,0x22,0x1C},/*"g",71*/
 81 {0x00,0x00,0x03,0x02,0x02,0x0E,0x12,0x12,0x12,0x37,0x00,0x00},/*"h",72*/
 82 {0x00,0x00,0x04,0x00,0x00,0x06,0x04,0x04,0x04,0x0E,0x00,0x00},/*"i",73*/
 83 {0x00,0x00,0x08,0x00,0x00,0x0C,0x08,0x08,0x08,0x08,0x08,0x07},/*"j",74*/
 84 {0x00,0x00,0x03,0x02,0x02,0x3A,0x0A,0x0E,0x12,0x37,0x00,0x00},/*"k",75*/
 85 {0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"l",76*/
 86 {0x00,0x00,0x00,0x00,0x00,0x0F,0x15,0x15,0x15,0x15,0x00,0x00},/*"m",77*/
 87 {0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x37,0x00,0x00},/*"n",78*/
 88 {0x00,0x00,0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0C,0x00,0x00},/*"o",79*/
 89 {0x00,0x00,0x00,0x00,0x00,0x0F,0x12,0x12,0x12,0x0E,0x02,0x07},/*"p",80*/
 90 {0x00,0x00,0x00,0x00,0x00,0x1C,0x12,0x12,0x12,0x1C,0x10,0x38},/*"q",81*/
 91 {0x00,0x00,0x00,0x00,0x00,0x1B,0x06,0x02,0x02,0x07,0x00,0x00},/*"r",82*/
 92 {0x00,0x00,0x00,0x00,0x00,0x1E,0x02,0x0C,0x10,0x1E,0x00,0x00},/*"s",83*/
 93 {0x00,0x00,0x00,0x04,0x04,0x0E,0x04,0x04,0x04,0x18,0x00,0x00},/*"t",84*/
 94 {0x00,0x00,0x00,0x00,0x00,0x1B,0x12,0x12,0x12,0x3C,0x00,0x00},/*"u",85*/
 95 {0x00,0x00,0x00,0x00,0x00,0x37,0x12,0x0A,0x0C,0x04,0x00,0x00},/*"v",86*/
 96 {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x0E,0x0A,0x0A,0x00,0x00},/*"w",87*/
 97 {0x00,0x00,0x00,0x00,0x00,0x1B,0x0A,0x04,0x0A,0x1B,0x00,0x00},/*"x",88*/
 98 {0x00,0x00,0x00,0x00,0x00,0x37,0x12,0x0A,0x0C,0x04,0x04,0x03},/*"y",89*/
 99 {0x00,0x00,0x00,0x00,0x00,0x1E,0x08,0x04,0x04,0x1E,0x00,0x00},/*"z",90*/
100 {0x00,0x18,0x08,0x08,0x08,0x04,0x08,0x08,0x08,0x08,0x18,0x00},/*"{",91*/
101 {0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},/*"|",92*/
102 {0x00,0x06,0x04,0x04,0x04,0x08,0x04,0x04,0x04,0x04,0x06,0x00},/*"}",93*/
103 {0x02,0x25,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} /*"~",94*/
104 }; 
105 const unsigned char asc2_1608[95][16]={
106 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
107 {0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x18,0x18,0x00,0x00},/*"!",1*/
108 {0x00,0x48,0x6C,0x24,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
109 {0x00,0x00,0x00,0x24,0x24,0x24,0x7F,0x12,0x12,0x12,0x7F,0x12,0x12,0x12,0x00,0x00},/*"#",3*/
110 {0x00,0x00,0x08,0x1C,0x2A,0x2A,0x0A,0x0C,0x18,0x28,0x28,0x2A,0x2A,0x1C,0x08,0x08},/*"$",4*/
111 {0x00,0x00,0x00,0x22,0x25,0x15,0x15,0x15,0x2A,0x58,0x54,0x54,0x54,0x22,0x00,0x00},/*"%",5*/
112 {0x00,0x00,0x00,0x0C,0x12,0x12,0x12,0x0A,0x76,0x25,0x29,0x11,0x91,0x6E,0x00,0x00},/*"&",6*/
113 {0x00,0x06,0x06,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
114 {0x00,0x40,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,0x00},/*"(",8*/
115 {0x00,0x02,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x02,0x00},/*")",9*/
116 {0x00,0x00,0x00,0x00,0x08,0x08,0x6B,0x1C,0x1C,0x6B,0x08,0x08,0x00,0x00,0x00,0x00},/*"*",10*/
117 {0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x08,0x00,0x00,0x00},/*"+",11*/
118 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x04,0x03},/*",",12*/
119 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"-",13*/
120 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00},/*".",14*/
121 {0x00,0x00,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00},/*"/",15*/
122 {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"0",16*/
123 {0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"1",17*/
124 {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00},/*"2",18*/
125 {0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*"3",19*/
126 {0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00},/*"4",20*/
127 {0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*"5",21*/
128 {0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"6",22*/
129 {0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00},/*"7",23*/     
130 {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},/*"8",24*/
131 {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00},/*"9",25*/
132 {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00},/*":",26*/
133 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x04},/*";",27*/
134 {0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x40,0x00,0x00},/*"<",28*/
135 {0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00},/*"=",29*/
136 {0x00,0x00,0x00,0x02,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x02,0x00,0x00},/*">",30*/
137 {0x00,0x00,0x00,0x3C,0x42,0x42,0x46,0x40,0x20,0x10,0x10,0x00,0x18,0x18,0x00,0x00},/*"?",31*/
138 {0x00,0x00,0x00,0x1C,0x22,0x5A,0x55,0x55,0x55,0x55,0x2D,0x42,0x22,0x1C,0x00,0x00},/*"@",32*/
139 {0x00,0x00,0x00,0x08,0x08,0x18,0x14,0x14,0x24,0x3C,0x22,0x42,0x42,0xE7,0x00,0x00},/*"A",33*/
140 {0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x1E,0x22,0x42,0x42,0x42,0x22,0x1F,0x00,0x00},/*"B",34*/
141 {0x00,0x00,0x00,0x7C,0x42,0x42,0x01,0x01,0x01,0x01,0x01,0x42,0x22,0x1C,0x00,0x00},/*"C",35*/
142 {0x00,0x00,0x00,0x1F,0x22,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1F,0x00,0x00},/*"D",36*/
143 {0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x42,0x42,0x3F,0x00,0x00},/*"E",37*/
144 {0x00,0x00,0x00,0x3F,0x42,0x12,0x12,0x1E,0x12,0x12,0x02,0x02,0x02,0x07,0x00,0x00},/*"F",38*/
145 {0x00,0x00,0x00,0x3C,0x22,0x22,0x01,0x01,0x01,0x71,0x21,0x22,0x22,0x1C,0x00,0x00},/*"G",39*/
146 {0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"H",40*/
147 {0x00,0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"I",41*/
148 {0x00,0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x0F},/*"J",42*/
149 {0x00,0x00,0x00,0x77,0x22,0x12,0x0A,0x0E,0x0A,0x12,0x12,0x22,0x22,0x77,0x00,0x00},/*"K",43*/
150 {0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x7F,0x00,0x00},/*"L",44*/
151 {0x00,0x00,0x00,0x77,0x36,0x36,0x36,0x36,0x2A,0x2A,0x2A,0x2A,0x2A,0x6B,0x00,0x00},/*"M",45*/
152 {0x00,0x00,0x00,0xE3,0x46,0x46,0x4A,0x4A,0x52,0x52,0x52,0x62,0x62,0x47,0x00,0x00},/*"N",46*/
153 {0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00},/*"O",47*/
154 {0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x42,0x3E,0x02,0x02,0x02,0x02,0x07,0x00,0x00},/*"P",48*/
155 {0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x4D,0x53,0x32,0x1C,0x60,0x00},/*"Q",49*/
156 {0x00,0x00,0x00,0x3F,0x42,0x42,0x42,0x3E,0x12,0x12,0x22,0x22,0x42,0xC7,0x00,0x00},/*"R",50*/
157 {0x00,0x00,0x00,0x7C,0x42,0x42,0x02,0x04,0x18,0x20,0x40,0x42,0x42,0x3E,0x00,0x00},/*"S",51*/
158 {0x00,0x00,0x00,0x7F,0x49,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00},/*"T",52*/
159 {0x00,0x00,0x00,0xE7,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00},/*"U",53*/
160 {0x00,0x00,0x00,0xE7,0x42,0x42,0x22,0x24,0x24,0x14,0x14,0x18,0x08,0x08,0x00,0x00},/*"V",54*/
161 {0x00,0x00,0x00,0x6B,0x49,0x49,0x49,0x49,0x55,0x55,0x36,0x22,0x22,0x22,0x00,0x00},/*"W",55*/
162 {0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x18,0x18,0x18,0x24,0x24,0x42,0xE7,0x00,0x00},/*"X",56*/
163 {0x00,0x00,0x00,0x77,0x22,0x22,0x14,0x14,0x08,0x08,0x08,0x08,0x08,0x1C,0x00,0x00},/*"Y",57*/
164 {0x00,0x00,0x00,0x7E,0x21,0x20,0x10,0x10,0x08,0x04,0x04,0x42,0x42,0x3F,0x00,0x00},/*"Z",58*/
165 {0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00},/*"[",59*/
166 {0x00,0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x40,0x40},/*"\",60*/
167 {0x00,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1E,0x00},/*"]",61*/
168 {0x00,0x38,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
169 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF},/*"_",63*/
170 {0x00,0x06,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
171 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x78,0x44,0x42,0x42,0xFC,0x00,0x00},/*"a",65*/
172 {0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x26,0x1A,0x00,0x00},/*"b",66*/
173 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x44,0x02,0x02,0x02,0x44,0x38,0x00,0x00},/*"c",67*/
174 {0x00,0x00,0x00,0x60,0x40,0x40,0x40,0x78,0x44,0x42,0x42,0x42,0x64,0xD8,0x00,0x00},/*"d",68*/
175 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x7E,0x02,0x02,0x42,0x3C,0x00,0x00},/*"e",69*/
176 {0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x7E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"f",70*/
177 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C},/*"g",71*/
178 {0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"h",72*/
179 {0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"i",73*/
180 {0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x1E},/*"j",74*/
181 {0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x72,0x12,0x0A,0x16,0x12,0x22,0x77,0x00,0x00},/*"k",75*/
182 {0x00,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"l",76*/
183 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x92,0x92,0x92,0x92,0x92,0xB7,0x00,0x00},/*"m",77*/
184 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00},/*"n",78*/
185 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00},/*"o",79*/
186 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x26,0x42,0x42,0x42,0x22,0x1E,0x02,0x07},/*"p",80*/
187 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x44,0x78,0x40,0xE0},/*"q",81*/
188 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x4C,0x04,0x04,0x04,0x04,0x1F,0x00,0x00},/*"r",82*/
189 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00},/*"s",83*/
190 {0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00},/*"t",84*/
191 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x42,0x42,0x42,0x42,0x62,0xDC,0x00,0x00},/*"u",85*/
192 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x08,0x08,0x00,0x00},/*"v",86*/
193 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,0x49,0x49,0x55,0x55,0x22,0x22,0x00,0x00},/*"w",87*/
194 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00},/*"x",88*/
195 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x42,0x24,0x24,0x14,0x18,0x08,0x08,0x07},/*"y",89*/
196 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x22,0x10,0x08,0x08,0x44,0x7E,0x00,0x00},/*"z",90*/
197 {0x00,0xC0,0x20,0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0xC0,0x00},/*"{",91*/
198 {0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10},/*"|",92*/
199 {0x00,0x06,0x08,0x08,0x08,0x08,0x08,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x06,0x00},/*"}",93*/
200 {0x0C,0x32,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
201 }; 
202 const unsigned char asc2_2412[12][48]={
203 #if 1
204 {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xC0,0x6F,0xD0,0x77,0xB0,0x70,0x30,
205 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x20,0x10,0x70,0x30,0x70,0x30,
206 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x67,0xD0,0x6F,0xE0,0x1F,0xE0,0x1F,0xE0},/*"0",0*/
207 {0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x78,0x00,0x36,0x00,0x2E,0x00,0x0E,0x00,
208 0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x0E,0x00,
209 0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x04,0x00},/*"1",1*/
210 {0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x7F,0xE0,0x7F,0xE0,0x3F,0xD0,0x00,0x30,
211 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x1F,0xD0,0x1F,0xE0,0x2F,0xE0,0x77,0xE0,
212 0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x6F,0xF0,0x5F,0xF0,0x3F,0xF0,0x3F,0xF0},/*"2",2*/
213 {0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x7F,0xF0,0x7F,0xE0,0x3F,0xD0,0x00,0x30,
214 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x3F,0xB0,0x7F,0xD0,0x7F,0xD0,0x3F,0xB0,
215 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x3F,0xD0,0x7F,0xE0,0x7F,0xF0,0x3F,0xF0},/*"3",3*/
216 {0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,
217 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x37,0xB0,0x0F,0xD0,0x0F,0xD0,0x07,0xB0,
218 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x10},/*"4",4*/
219 {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x5F,0xF0,0x6F,0xF0,0x77,0xF0,0x70,0x00,
220 0x70,0x00,0x70,0x00,0x70,0x00,0x3F,0x80,0x1F,0xC0,0x1F,0xC0,0x0F,0xB0,0x00,0x30,
221 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x3F,0xD0,0x7F,0xD0,0x7F,0xE0,0x3F,0xE0},/*"5",5*/
222 {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x1F,0xF0,0x6F,0xF0,0x77,0xF0,0x70,0x00,
223 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x77,0xC0,0x2F,0xC0,0x6F,0xD0,0x77,0xB0,
224 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x67,0xD0,0x6F,0xE0,0x1F,0xE0,0x1F,0xE0},/*"6",6*/
225 {0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x7F,0xE0,0x7F,0xD0,0x3F,0x90,0x00,0x30,
226 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x10,0x00,0x10,0x00,0x30,
227 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x10},/*"7",7*/
228 {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xC0,0x6F,0xD0,0x77,0xB0,0x70,0x30,
229 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x77,0xB0,0x2F,0xD0,0x6F,0xF0,0x77,0xB0,
230 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x67,0xD0,0x6F,0xE0,0x1F,0xE0,0x1F,0xC0},/*"8",8*/
231 {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xC0,0x6F,0xD0,0x77,0xB0,0x70,0x30,
232 0x70,0x30,0x70,0x30,0x70,0x30,0x70,0x30,0x6F,0xB0,0x0F,0xD0,0x0F,0xF0,0x0F,0xB0,
233 0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x3F,0xD0,0x7F,0xE0,0x7F,0xE0,0x3F,0xC0},/*"9",9*/
234 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
235 0x60,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
236 0x20,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*":",0*/
237 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
238 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
239 0x00,0x00,0x00,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",0*/
240 #endif
241 };
242 
243 
244 
245 typedef struct 
246 {
247        unsigned char Index[2];    
248        char Msk[32];
249 }typFNT_GB16; 
250 //字体取模:宋体常规小四
251 const typFNT_GB16 tfont16[]=
252 {
253 "",0x00,0x00,0x00,0x0C,0x3F,0xF8,0x03,0x00,0x06,0x38,0x0C,0x70,0x1F,0xC0,0x03,0x8C,
254 0x0E,0x0C,0x3F,0xFE,0x0D,0xB6,0x0D,0x98,0x19,0x9C,0x31,0x8C,0x31,0x86,0x67,0x86,/*0*/
255 "",0x00,0x00,0x00,0x00,0x18,0x30,0x1B,0xFF,0x30,0x60,0x36,0xCC,0x6C,0xCC,0x7D,0x86,
256 0x19,0xFE,0x18,0xDB,0x30,0xD8,0x7F,0xD8,0x70,0xDB,0x01,0x9B,0x1F,0x9B,0x77,0x1F,/*1*/
257 "",0x00,0x00,0x00,0x00,0x06,0xC0,0x36,0xFF,0x36,0xC0,0x37,0x80,0x37,0xB0,0x37,0x18,
258 0x06,0x0C,0x00,0x00,0x3F,0xFE,0x36,0x66,0x36,0x66,0x36,0x66,0x36,0x66,0x7F,0xFF,/*2*/
259 "",0x00,0x00,0x00,0x00,0x30,0x60,0x30,0x60,0x37,0xFF,0x7E,0xFB,0x37,0x9E,0x33,0x8C,
260 0x3F,0x06,0x38,0x00,0x31,0xFC,0x70,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x7F,0xFF,/*3*/
261 "",0xC0,0x00,0x23,0xE8,0x2C,0x18,0xD8,0x08,0x10,0x08,0x30,0x00,0x30,0x00,0x30,0x00,
262 0x30,0x00,0x30,0x00,0x30,0x00,0x10,0x00,0x18,0x08,0x0C,0x10,0x03,0xE0,0x00,0x00,/*0*/
263 };
264 typedef struct 
265 {
266        unsigned char Index[2];    
267        char Msk[72];
268 }typFNT_GB24; 
269 //字体取模:宋体常规小四
270 const typFNT_GB24 tfont24[]=
271 {
272 "",0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x0C,0x7F,0xF0,0x04,0x40,0x20,0x04,
273 0x40,0x20,0x01,0x40,0x20,0x02,0x7F,0xE0,0x62,0x40,0x20,0x32,0x40,0x20,0x12,0x40,
274 0x20,0x04,0x7F,0xE0,0x04,0x00,0x00,0x05,0x00,0x10,0x04,0xFF,0xF8,0x08,0x89,0x10,
275 0x78,0x89,0x10,0x18,0x89,0x10,0x18,0x89,0x10,0x18,0x89,0x10,0x18,0x89,0x10,0x18,
276 0x89,0x16,0x07,0x76,0xE8,0x00,0x00,0x00,/*0*/
277 "湿",0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x08,0x7F,0xF8,0x0C,0x60,0x10,0x04,
278 0x60,0x10,0x01,0x60,0x10,0x42,0x7F,0xF0,0x32,0x60,0x10,0x1A,0x60,0x10,0x12,0x7F,
279 0xF0,0x04,0x69,0x00,0x04,0x08,0x80,0x05,0x08,0x8C,0x08,0x88,0x8C,0x18,0xC8,0x98,
280 0x38,0x48,0x90,0x18,0x68,0xA0,0x10,0x48,0xC0,0x10,0x08,0x80,0x30,0x08,0x80,0x10,
281 0x08,0x8C,0x03,0xF7,0x70,0x00,0x00,0x00,/*1*/
282 "",0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x0C,0x08,0x0F,0xFF,0xFC,0x08,
283 0x40,0x00,0x08,0x30,0xC0,0x08,0x20,0x88,0x08,0x20,0x9C,0x0F,0xFF,0xE0,0x08,0x20,
284 0x80,0x08,0x20,0x80,0x08,0x3F,0x80,0x08,0x00,0x00,0x19,0xFF,0xE0,0x18,0x20,0xC0,
285 0x10,0x20,0x80,0x10,0x11,0x80,0x10,0x0B,0x00,0x20,0x06,0x00,0x20,0x1B,0x80,0x40,
286 0x60,0xFE,0x47,0x80,0x18,0x00,0x00,0x00,/*2*/
287 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,
288 0x10,0x00,0x0F,0xFF,0xF0,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,
289 0x20,0x0F,0xFF,0xE0,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,0x20,0x08,0x10,0x20,
290 0x0F,0xFF,0xE0,0x08,0x10,0x00,0x00,0x10,0x08,0x00,0x10,0x08,0x00,0x10,0x04,0x00,
291 0x18,0x0C,0x00,0x0F,0xF8,0x00,0x00,0x00,/*3*/
292 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0F,0xFF,0xFC,0x0C,0x00,0x00,0x0C,
293 0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,
294 0x00,0x0D,0xFF,0xF0,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x08,0x0C,0x80,0x08,0x0C,0x40,
295 0x08,0x0C,0x60,0x08,0x0C,0x30,0x10,0x0C,0x20,0x10,0x0C,0x00,0x20,0x0C,0x0C,0x27,
296 0xF3,0xF0,0x40,0x00,0x00,0x00,0x00,0x00,/*4*/
297 "",0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x06,0x00,0x08,0x02,0x08,0x04,0xFF,0xFC,0x06,
298 0x04,0x00,0x00,0x04,0x00,0x01,0x08,0x40,0x41,0x10,0x20,0x31,0x20,0x30,0x12,0x7F,
299 0xD0,0x12,0x00,0x10,0x04,0x64,0x60,0x04,0x64,0x40,0x04,0x64,0x40,0x08,0x64,0x40,
300 0x78,0x64,0x40,0x18,0x44,0x40,0x18,0x44,0x44,0x18,0xC4,0x44,0x18,0x84,0x44,0x19,
301 0x04,0x7E,0x06,0x04,0x00,0x00,0x00,0x00,/*5*/
302 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x12,0x1F,0x80,0x12,
303 0x30,0x68,0x12,0x60,0x18,0x0C,0xC0,0x18,0x00,0x80,0x08,0x01,0x80,0x08,0x01,0x80,
304 0x00,0x01,0x80,0x00,0x01,0x80,0x00,0x01,0x80,0x00,0x01,0x80,0x00,0x00,0x80,0x00,
305 0x00,0xC0,0x00,0x00,0xC0,0x10,0x00,0x60,0x20,0x00,0x38,0xC0,0x00,0x0F,0x00,0x00,
306 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*,6*/
307 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
308 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
309 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x0C,0x00,0x00,
310 0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x00,
311 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*7*/
312 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x18,0x08,
313 0x80,0x30,0x08,0x80,0x60,0x08,0x80,0xC0,0x08,0x81,0x80,0x08,0x81,0x00,0x08,0x82,
314 0x00,0x05,0x04,0x00,0x02,0x08,0x00,0x00,0x11,0xE0,0x00,0x21,0x10,0x00,0x41,0x10,
315 0x00,0x83,0x10,0x01,0x03,0x10,0x02,0x01,0x10,0x04,0x01,0x10,0x08,0x00,0xE0,0x00,
316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*0*/
317 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC1,0xF0,0x03,
318 0x00,0x40,0x03,0x00,0x40,0x01,0x00,0x80,0x01,0x80,0x80,0x01,0x81,0x00,0x00,0xC1,
319 0x00,0x00,0xC3,0x00,0x00,0x62,0x00,0x00,0x62,0x00,0x00,0x24,0x00,0x00,0x34,0x00,
320 0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
321 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*0*/
322 "",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
323 0x08,0x00,0x00,0x18,0x00,0x00,0x1C,0x00,0x00,0x2C,0x00,0x00,0x24,0x00,0x00,0x66,
324 0x00,0x00,0x46,0x00,0x00,0xC3,0x00,0x00,0x83,0x00,0x00,0xFF,0x00,0x01,0x01,0x80,
325 0x01,0x01,0x80,0x02,0x00,0xC0,0x02,0x00,0xC0,0x0F,0x83,0xF0,0x00,0x00,0x00,0x00,
326 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*1*/
327 };  
328 typedef struct 
329 {
330        unsigned char Index[2];    
331        char Msk[128];
332 }typFNT_GB32; 
333 //字体取模:宋体常规小四
334 const typFNT_GB32 tfont32[]=
335 {
336 "",0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0xC0,0x00,
337 0x00,0x01,0xC0,0xC0,0x00,0x01,0x07,0xC0,0x00,0x01,0xFF,0x00,0x02,0x1F,0xFE,0x00,
338 0x07,0xF0,0x1C,0x00,0x07,0xC0,0x70,0x00,0x0F,0x00,0xE0,0x00,0x0E,0x03,0xF0,0x00,
339 0x1C,0x0F,0xF0,0x00,0x3C,0x0F,0x70,0x00,0x3C,0x00,0xE0,0x00,0x18,0x00,0xC0,0x00,
340 0x00,0x00,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x20,0x00,
341 0x00,0x00,0x37,0x00,0x00,0x01,0xFF,0x00,0x00,0x7F,0xF8,0x00,0x07,0xF8,0x30,0x00,
342 0x1F,0x80,0x30,0x00,0x00,0x80,0x30,0x00,0x00,0xC0,0x30,0x00,0x00,0x60,0x60,0x00,
343 0x00,0x18,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,/*0*/
344 };
345 #endif
font.h
 1 #include "sys.h"
 2 #include "delay.h"
 3 #include "usart.h"
 4 #include "lcd.h"
 5 #include "gui.h"
 6     
 7 int main(void)
 8 {    
 9     delay_init();     //延时函数初始化      
10     SystemInit();//初始化RCC 设置系统主频为72MHZ
11     LCD_Init();       //液晶屏初始化
12     LCD_Clear(BLACK); //清屏
13 
14     POINT_COLOR=WHITE; 
15     LCD_DrawRectangle(0,0,128-1,128-1);    //画矩形 
16 
17     Show_Str(32,5,BLUE,YELLOW,"系统监控",24,0);
18     Show_Str(5,25,RED,YELLOW,"温度     ℃",24,1);
19     LCD_ShowNum2412(5+48,25,RED,YELLOW,":32",24,1);
20 
21     Show_Str(5,50,YELLOW,YELLOW,"湿度     %",24,1);
22     LCD_ShowNum2412(5+48,50,YELLOW,YELLOW,":20",24,1);
23 
24     Show_Str(5,75,WHITE,YELLOW,"电压      V",24,1);
25     LCD_ShowNum2412(5+48,75,WHITE,YELLOW,":3.2",24,1);
26 
27     Show_Str(5,100,GREEN,YELLOW,"电流      A",24,1);
28     LCD_ShowNum2412(5+48,100,GREEN,YELLOW,":0.2",24,1);      
29     while(1);
30 }
main.c

今天还算是充满希望的一天

猜你喜欢

转载自www.cnblogs.com/hjf-log/p/stm32-LCD.html