/****************************************************************** Copyright (C), 2008-2009, 力天电子,LiTian Tech.Co.Ltd. Module Name : SO12864 File Name : SO12864.c Author : HE CHENG Create Date : 2009/10/19 Version : 1.0 Function : SO12864液晶屏实验 Description : 实验前将液晶屏插好 Support : www.LT430.com QQ:330508762 ******************************************************************/ #include <NXP/iolpc2148.h> #include "config.h" #include "includes.h" typedef unsigned char uint8; /* 无符号8位整型变量 */ typedef signed char int8; /* 有符号8位整型变量 */ typedef unsigned short uint16; /* 无符号16位整型变量 */ typedef signed short int16; /* 有符号16位整型变量 */ typedef unsigned int uint32; /* 无符号32位整型变量 */ typedef signed int int32; /* 有符号32位整型变量 */ typedef float fp32; /* 单精度浮点数(32位长度) */ typedef double fp64; /* 双精度浮点数(64位长度) */ //管脚宏定义 #define SCLK 0x01<<24 //595时钟端 #define MISO 0x01<<5 //数据输入端 #define MOSI 0x01<<6 //数据输出端 #define RCK 0x01<<7 //SO12864时钟输入端 // LCD Define #define LCD_A 1<<30 //命令数据选择端,高电平:数据,低电平:命令. #define LCD_CLK 1<<4 //时钟端 #define LCD_DATA MOSI //数据端 #define B_LED 1<<13 //背光 #define Sclk_L() IO0CLR |= LCD_CLK //时钟高电平 #define Sclk_H() IO0SET |= LCD_CLK //时钟低电平 #define Res_L() HC595_DATA &= ~(1<<2);Write595() //复位低电平 #define Res_H() HC595_DATA |= (1<<2);Write595() //复位高电平 #define Data_L() IO0CLR |= LCD_DATA //数据低电平 #define Data_H() IO0SET |= LCD_DATA //数据高电平 #define CS_L() HC595_DATA &= ~1;Write595() //片选低电平 #define CS_H() HC595_DATA |= 1;Write595() //片选高电平 #define Write_C() IO0CLR |= LCD_A //选择写命令 #define Write_D() IO0SET |= LCD_A //选择写数据 //函数声明 void Delayn(unsigned long n); void Write595(); void HC595_Init(void); void Lcd_Init(void); void display_map(unsigned char *p); //全局变量 unsigned int HC595_DATA = 0xFFFFFFFF; unsigned char gui_disp_buf[GUI_LCM_XMAX*GUI_LCM_YMAX/8]={ //取的字模 0x20,0x30,0xAC,0x63,0x32,0x00,0xFC,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xBC,0x00,0x00, 0x00,0x08,0x06,0x82,0xFA,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9A,0x96,0x02,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3F,0xC2,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0x40,0xF0,0x1C,0x07,0xE2,0x24,0x24,0x24,0xE4,0x04,0x04,0xFC,0x04,0x04,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x11,0x09,0x49,0x21,0x1C,0x03,0x7F,0x04,0x3F,0x04,0x3F,0x44,0x7F,0x00,0x00, 0x00,0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x04,0x04,0x46,0x84,0x60,0x1F,0x00,0x00, 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x01,0x06,0x0C,0x18,0x30,0x60,0x20,0x00, 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0x00,0x00,0x07,0x02,0x02,0x02,0x07,0x20,0x40,0x3F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00, 0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, 0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00, 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00, 0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00, 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, 0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, 0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00, 0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, 0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, 0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00, 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x08,0x4A,0x4A,0xFE,0x4A,0x4A,0x7E,0x00, 0x09,0x4A,0x4C,0xF8,0x4C,0x4B,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00, 0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,0x08,0x04,0x7F,0x22,0x22,0x22,0x7E,0x00, 0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, 0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, 0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, 0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //初始化595接口 void HC595_Init(void) { IO0DIR |= MOSI|RCK; IO1DIR |= SCLK; IO1CLR |= SCLK; IO0DIR |= RCK; HC595_DATA = 0xFFFFFFFF; Write595(); } //写字节 void WriteByte(unsigned char data) { unsigned char i; //IO0CLR = RCK; for(i=0;i<8;i++) { if(data&0x01) IO0SET = MOSI; else IO0CLR = MOSI; IO1SET=SCLK; data>>=1; IO1CLR=SCLK; } //IO0SET = RCK; } //刷新595的数据 void Write595() { IO0CLR = RCK; WriteByte(HC595_DATA&0xff); WriteByte((HC595_DATA&0xff00)>>8); WriteByte((HC595_DATA&0xff0000)>>16); WriteByte((HC595_DATA&0xff000000)>>24); IO0SET = RCK; } //延时周期数 void Delayn(unsigned long n) { while(n--); } //向SPI总线上写一个字节的数据 void LCDWriteByte(unsigned char data) { unsigned char i,s; s = data; for(i=0;i<8;i++) { if(s&0x80) Data_H(); else Data_L(); Sclk_H(); s<<=1; Sclk_L(); } } //向液晶屏些数据 void WriteData (unsigned char Data) { Write_D(); CS_L(); LCDWriteByte(Data); CS_H(); } //向液晶屏写命令 void WriteCommand (unsigned char Command) { Write_C(); CS_L(); LCDWriteByte(Command); CS_H(); } //打开液晶背光 0:关闭 1:打开 void Lcd_BackLed(unsigned char on) { if(on==1){ IO0CLR=B_LED; //打开背光 } else if(on==0){ IO0SET=B_LED; //关闭背光 } } //液晶复位 void Lcd_Reset(void){ Res_L(); Delayn(1000000); Res_H(); } //列顺序翻转,左右翻转 0:正常 1:翻转 void Lcd_ColRev(unsigned char i){ WriteCommand(0xa0|(i&0x01)); } //液晶初始化 void Lcd_Init(void) { HC595_Init(); //初始化74HC595 //初始化IO口 IO0DIR |= LCD_A|B_LED|LCD_CLK; Lcd_Reset(); //液晶复位 Lcd_BackLed(1); //打开液晶背光 WriteCommand(0xaf); //打开显示 WriteCommand(0x40); //开始显示 WriteCommand(0xa0); //ADC NORMAL WriteCommand(0xa6); // WriteCommand(0xa4); //清除 WriteCommand(0xa2); //1/9BIAS WriteCommand(0xc8); //COMMON OUTPUT DIRECTION WriteCommand(0x2f); //POWER CONTROL WriteCommand(0x24); //RESISTER RATIO WriteCommand(0x81); //VOLUM MODE SET WriteCommand(0x24); //RESISTER RATIO Lcd_ColRev(1); //左右翻转 } //显示一副图象 void display_map(unsigned char *p) //P是图片数据的首地址 { unsigned char seg,page,tmp; for(page=0xb0;page<0xb8;page++) //写页地址共 8 页 0xb0----0xb8 { WriteCommand(page); WriteCommand(0x10); //列地址,高低字节两次写入,从第 0 列开始 WriteCommand(0x00); for(tmp=0;tmp<4;tmp++) { WriteData(0); } for(seg=0; seg<128; seg++)//写 128 列 { WriteData(*p++); //WriteData(0xFE); //TEST } } } //刷新整个缓冲区 void LCD_UpdateAll(void) { display_map(gui_disp_buf); } //以一种颜色填充图像 void LCD_FillAll(TCOLOR dat) { uint32 i, j; for(i=0; i<GUI_LCM_XMAX; i++) // 历遍所有行 { for(j=0; j<GUI_LCM_YMAX/8; j++) // 历遍所有行 { gui_disp_buf[j*128 + i] = dat; // 填充数据 } } LCD_UpdateAll(); //更新显示数据 } //更新一个点的显示 void LCD_UpdatePoint(uint32 x, uint32 y) { WriteCommand(0xb0 + (7-((y>>3)&0x0F))); //页地址 WriteCommand(0x10 + (((x+4)>>4)&0x0F)); //列地址,高低字节两次写入,从第 0 列开始 WriteCommand(0x00 + ((x+4)&0x0F)); WriteData(gui_disp_buf[(x)+128*(8-(y/8)-1)-1]); //写入数据 } /*********************************************************************** 函数: Put_Pixel 功能:在液晶屏上打印一个像素 参数说明: 坐标(x,y)(以左上角为坐标原点) x 取值0~127 y的取值 0~64 flag = 0 将此点清零 flag = 1 将此点显示 flag = 2 将此点取反 ***********************************************************************/ void Put_Pixel(unsigned char x,unsigned char y,unsigned char flag) { if(x<128 && y<64) { switch(flag) { case 1://置1 gui_disp_buf[(x)+128*(8-(y/8)-1)-1] |=(1<<(7-(y%8))); break; case 0://清零 gui_disp_buf[(x)+128*(8-(y/8)-1)-1] &=(~(1<<(7-(y%8)))); break; case 2://取反 gui_disp_buf[(x)+128*(8-(y/8)-1)-1] ^=(1<<(7-(y%8))); break; } LCD_UpdatePoint(x,y); } } /*********************************************************************** 画一条x1,y1 到 x2,y2 的直线 (flag=1画点,flag=0清点) ***********************************************************************/ void Draw_Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char flag) { int dy ; int dx ; int stepx, stepy, fraction; dy = y2 - y1; dx = x2 - x1; if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; } if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; } dy <<= 1; dx <<= 1; Put_Pixel(x1,y1,flag); if (dx > dy) { fraction = dy - (dx >> 1); while (x1 != x2) { if (fraction >= 0) { y1 += stepy; fraction -= dx; } x1 += stepx; fraction += dy; Put_Pixel(x1,y1,flag); } } else { fraction = dx - (dy >> 1); while (y1 != y2) { if (fraction >= 0) { x1 += stepx; fraction -= dy; } y1 += stepy; fraction += dx; Put_Pixel(x1,y1,flag); } } } //加载 16x1 6的汉字 void LcdDispHz16 (uint16 x0, uint16 y0, uint8 ForeColor, uint8 *s) { int16 j,k,x,y,xx; uint8 qm,wm; uint32 ulOffset; char hzbuf[32]/*,temp[2]*/; if(((uint8)(*s)) < 161) { //temp[0] = *(s+i); //temp[1] = '\0'; return; } else { qm = *(s) - 161; wm = *(s + 1) - 161; ulOffset = (uint32)(qm * 94 + wm + 2) * 32 + 4; for (j = 0; j < 32; j ++) { hzbuf[j] = g_auc_HZK_Dot[ulOffset + j]; } for(y = 0; y < 16; y++) { for(x = 0; x < 16; x++) { k = x % 8; if (hzbuf[y * 2 + (x / 8)] & (0x80 >> k)) { xx = x0 + x; Put_Pixel( xx, y + y0, (uint8)ForeColor); } } } } //LCD_UpdateAll(); } //显示汉字 void Lcd_DispHZ(uint16 usX, uint16 usY, uint16 usForeColor, uint8 *pucStr) { uint16 i = 0; //uint8 ucLen; while (*pucStr != 0) { if (*pucStr >= 161) { if ((usX + i * 8) >= GUI_LCM_XMAX - 16 ||(usY >= GUI_LCM_YMAX)) { break; } LcdDispHz16(usX + i * 8, usY, usForeColor, pucStr); i += 2; pucStr += 2; } } } /**************************************************************************** * 相关的 GUI 接口函数 ****************************************************************************/ /**************************************************************************** * 名称:GUI_FillSCR() * 功能:全屏填充。直接使用数据填充显示缓冲区。 * 入口参数:dat 填充的数据(对于黑白色LCM,为0的点灭,为1的点显示) * 出口参数:无 ****************************************************************************/ void GUI_FillSCR(TCOLOR dat) { LCD_FillAll(dat); } /**************************************************************************** * 名称:GUI_Initialize() * 功能:初始化GUI,包括初始化显示缓冲区,初始化LCM并清屏。 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void GUI_Initialize(void) { Lcd_Init(); // 初始化LCM模块工作模式,纯图形模式 GUI_FillSCR(0x00); // 初始化缓冲区为 0x00,并输出屏幕(清屏) } /**************************************************************************** * 名称:GUI_ClearSCR() * 功能:清屏。 * 入口参数:无 * 出口参数:无 * 说明:用户根据 LCM 的实际情况编写此函数。 ****************************************************************************/ void GUI_ClearSCR(void) { GUI_FillSCR(0x00); } uint8 const DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; /**************************************************************************** * 名称:GUI_Point() * 功能:在指定位置上画点。 * 入口参数: x 指定点所在列的位置 * y 指定点所在行的位置 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示) * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。(操作失败原因是指定地址超出有 * 效范围) * 说明:用户根据LCM的实际情况编写此函数。对于单色,只有一个位有效,则要使用左移的方法 * 实现point_dat = (point_dat&MASK_TAB [i]) | (color<<n),其它位数的一样 * 处理。 ****************************************************************************/ uint8 GUI_Point(unsigned int x, unsigned int y, TCOLOR color) { Put_Pixel(x,y,color); //刷新显示 //LCD_UpdatePoint(x, y); //LCD_UpdateAll(); return(1); } /**************************************************************************** * 名称:GUI_ReadPoint() * 功能:读取指定点的颜色。 * 入口参数:x 指定点所在列的位置 * y 指定点所在行的位置 * ret 保存颜色值的指针 * 出口参数:返回0时表示指定地址超出有效范围。 * 说明:对于单色,设置ret的d0位为1或0,4级灰度则为d0、d1有效,8位RGB则d0--d7有效, * RGB结构则R、G、B变量有效。 ****************************************************************************/ int GUI_ReadPoint(uint32 x, uint32 y, TCOLOR *ret) { TCOLOR bak; //参数过滤 if(x>=GUI_LCM_XMAX) return(0); if(y>=GUI_LCM_YMAX) return(0); // 取得该点颜色(用户自行更改) bak = gui_disp_buf[(x)+128*(8-(y/8)-1)-1]; if((bak&DCB_HEX_TAB[y&0x07])!=0) *ret = 1; else *ret = 0; return(1); } /**************************************************************************** * 名称:GUI_HLine() * 功能:画水平线。 * 入口参数: x0 水平线起点所在列的位置 * y0 水平线起点所在行的位置 * x1 水平线终点所在列的位置 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示) * 出口参数:无 * 说明:操作失败原因是指定地址超出缓冲区范围。 ****************************************************************************/ void GUI_HLine(uint32 x0, uint32 y0, uint32 x1, uint8 color) { Draw_Line(x0,y0,x1,y0,color); //LCD_UpdateAll(); } /**************************************************************************** * 名称:GUI_RLine() * 功能:画垂直线。 * 入口参数: x0 垂直线起点所在列的位置 * y0 垂直线起点所在行的位置 * y1 垂直线终点所在行的位置 * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示) * 出口参数:无 * 说明:操作失败原因是指定地址超出缓冲区范围。 ****************************************************************************/ void GUI_RLine(uint32 x0, uint32 y0, uint32 y1, uint8 color) { Draw_Line(x0,y0,x0,y1,color); //LCD_UpdateAll();//这样更新太慢 } //显示汉字 void GUI_DispHZ(uint16 usX, uint16 usY, uint16 usForeColor, uint8 *pucStr) { Lcd_DispHZ(usX,usY,usForeColor,pucStr); }
联系人:客服在线
手机:全工:13903011251
电话:李R:13530006400
邮箱:729986191@qq.com
地址: GUANGDONG PROVINCE