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 }

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

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 }

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

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 "V",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 "A",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

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 }
今天还算是充满希望的一天
分类:
stm32实验
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现