LCD12864.c文件:
/********************************************************** * @ File name -> lcd12864.c * @ Version -> V1.1
* @ Date -> 07-15-2017
* @ Brief -> LCD12864驱动函数
* 适用于ST7920驱动芯片
V1.0
* @ Revise -> A、修正操作命令宏定义。 * @ -> B、显示字符串函数增加显示长度选择,即显示多少个ASCII可显示字符,汉字x2即可
* @ -> C、去掉显示数组函数,合并在字符串显示里
V1.1
* @ Revise -> A、增加STM32硬件SPI控制接口
* @ -> B、修正STM32并口控制LCD12864接口(但未测试)
**********************************************************/
#include \
/********************************************************** 自定义显示字符
**********************************************************/
#define CGRAM_Value 64 //写入CGRAM数量
u8 CGROM_Code[] = {
//电量100Percent(add_h=0,add_l=0)
0x00,0x00,0x00,0x00,0xFF,0xFE,0x80,0x02,0xB6,0xDA,0xB6,0xDB,0xB6,0xDB,0xB6,0xDB, 0xB6,0xDB,0xB6,0xDB,0xB6,0xDB,0xB6,0xDA,0x80,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00, //月亮图形(add_h=0,add_l=2)
0x01,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x3C,0x00,0x78,0x00,0x78,0x00,0x78,0x00,
0x78,0x00,0x7C,0x00,0x7C,0x00,0x3E,0x00,0x1F,0x00,0x0F,0x80,0x03,0xF0,0x00,0x30, //存储设备(add_h=0,add_l=4) 0x00,0x00,0x0F,0xF8,0x08,0x08,0x0B,0x68,0x08,0x08,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE, 0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,0x1F,0xFC,0x0F,0xF8,0x07,0xF0,0x03,0xE0, //天线图形(add_h=0,add_l=6)
0x10,0x10,0x20,0x08,0x40,0x04,0x84,0x42,0x88,0x22,0x90,0x12,0x93,0x92,0x93,0x92,
0x91,0x12,0x88,0x22,0x85,0x42,0x41,0x04,0x21,0x08,0x11,0x10,0x03,0x80,0x03,0x80
//CD图形
//0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0x07,0xc9,0xb3,0x9d,0xb9,0x9f,0xb9,0x9f,0xb9,
//0x9f,0xb9,0x9f,0xb9,0x9d,0xb9,0xc9,0xb3,0xe3,0x07,0xff,0xff,0xff,0xff,0xff,0xff,
//右指向手型
//0x00,0x00,0x1e,0x00,0x12,0x00,0x73,0xfc,0x52,0x02,0x52,0x1c,0x53,0xe0,0x52,0x10,
//0x53,0xe0,0x52,0x10,0x53,0xe0,0x52,0x10,0x73,0xe0,0x12,0x00,0x1e,0x00,0x00,0x00
//摄氏图形
//0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x70,0x14,0xd8,0x1d,0x88,0x01,0x80,0x01,0x80, //0x01,0x80,0x01,0x80,0x01,0x88,0x00,0xc8,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
//天线图形1
//0xff,0xff,0x80,0x01,0xbf,0xfd,0xdf,0xfb,0xec,0x37,0xf6,0x6f,0xfb,0xdf,0xfd,0xbf, //0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xff,0xff, //蓝牙图形 //0x07,0xe0,0x0e,0x70,0x1e,0xb8,0x3e,0xdc,0x36,0xec,0x3a,0xdc,0x3c,0xbc,0x3e,0x7c, //0x3e,0x7c,0x3c,0xbc,0x3a,0xdc,0x36,0xec,0x3e,0xdc,0x1e,0xb8,0x0e,0x70,0x07,0xe0, };
u8 const ClearCGRAM[] = {
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,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
u8 const SunIcon[] = { 0x00,0x80,0x40,0x82,0x20,0x84,0x10,0x08,0x03,0xC0,0x07,0xE0,0x0F,0xF0,0xEF,0xF7, 0x0F,0xF0,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x10,0x08,0x20,0x84,0x40,0x82,0x00,0x80 };
u8 const MoonIcon[] = {
0x01,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x3C,0x00,0x78,0x00,0x78,0x00,0x78,0x00, 0x78,0x00,0x7C,0x00,0x7C,0x00,0x3E,0x00,0x1F,0x00,0x0F,0x80,0x03,0xF0,0x00,0x30, };
u8 const AntennaIcon[] = { 0x10,0x10,0x20,0x08,0x40,0x04,0x84,0x42,0x88,0x22,0x90,0x12,0x93,0x92,0x93,0x92, 0x91,0x12,0x88,0x22,0x85,0x42,0x41,0x04,0x21,0x08,0x11,0x10,0x03,0x80,0x03,0x80 };
u8 const WIFIConnection[] = {
0x00,0x00,0x00,0x00,0x0F,0xF0,0x3F,0xFC,0x70,0x0E,0xE0,0x07,0x07,0xE0,0x0F,0xF0, 0x1C,0x38,0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00 };
u8 const Battery_100Percent[] = {
0x00,0x00,0x00,0x00,0xFF,0xFE,0x80,0x02,0xB6,0xDA,0xB6,0xDB,0xB6,0xDB,0xB6,0xDB, 0xB6,0xDB,0xB6,0xDB,0xB6,0xDB,0xB6,0xDA,0x80,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00 };
u8 const Battery_80Percent[] = {
0x00,0x00,0x00,0x00,0xFF,0xFE,0x80,0x02,0xB6,0xC2,0xB6,0xC3,0xB6,0xC3,0xB6,0xC3, 0xB6,0xC3,0xB6,0xC3,0xB6,0xC3,0xB6,0xC2,0x80,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00 };
u8 const Battery_60Percent[] = {
0x00,0x00,0x00,0x00,0xFF,0xFE,0x80,0x02,0xB6,0x02,0xB6,0x03,0xB6,0x03,0xB6,0x03, 0xB6,0x03,0xB6,0x03,0xB6,0x03,0xB6,0x02,0x80,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00 };
u8 const Battery_40Percent[] = {
0x00,0x00,0x00,0x00,0xFF,0xFE,0x80,0x02,0xB0,0x02,0xB0,0x03,0xB0,0x03,0xB0,0x03, 0xB0,0x03,0xB0,0x03,0xB0,0x03,0xB0,0x02,0x80,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00 };
u8 const Battery_20Percent[] = {
0x00,0x00,0x00,0x00,0xFF,0xFE,0x80,0x02,0x80,0x02,0x80,0x03,0x80,0x03,0x80,0x03, 0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x02,0x80,0x02,0xFF,0xFE,0x00,0x00,0x00,0x00 };
u8 const ASCII_Table[] = {
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*\
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,/*\
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,/*\ 0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*\,3*/ 0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,/*\,4*/ 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,/*\,5*/ 0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,/*\,6*/ 0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,/*\,7*/ 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,/*\,8*/ 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00 /*\};
u8 LCD12864_LockedFlag; //LCD12864 locked flag
//=========================================================
void LCD_delay_1us() { int i = 200; //最小90可以稳定工作 while (i--); }
void LCD_delay_nus(int nus) { while (nus--)LCD_delay_1us(); }
#ifdef LCD_Work_Mode_Parallel //如果定义了,则使用并口工作模式
GPIO_InitTypeDef GPIOStru; //定义用于定义所以引脚为输出的变量
//=========================================================
/********************************************************** * 函数功能 --->把所有数据端口初始化为推挽输出模式的函数。 * 入口参数 ---> none * 返回数值 ---> none * 功能说明 ---> none
**********************************************************/ void LCDDataBus_OUT(void) { RCC_APB2PeriphClockCmd(DataBusGPIOCLK,ENABLE);
GPIOStru.GPIO_Pin = DataBusPins; //LCD数据端口对应的引脚 GPIOStru.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式 GPIOStru.GPIO_OType = GPIO_OType_PP; //推挽输出 GPIOStru.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIOStru.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(DataBusGPIO,&GPIOStru); }
/********************************************************** * 函数功能 --->把数据引脚初始化为浮空输入的函数 * 入口参数 ---> none * 返回数值 ---> none * 功能说明 ---> none
**********************************************************/ void LCDDataBus_IN(void) { RCC_APB2PeriphClockCmd(DataBusGPIOCLK,ENABLE);
GPIOStru.GPIO_Pin = DataBusPins; //LCD数据端口对应的引脚 GPIOStru.GPIO_Mode = GPIO_Mode_IN; //普通输入模式 GPIOStru.GPIO_OType = GPIO_OType_OD; //开漏模式 GPIOStru.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIOStru.GPIO_PuPd = GPIO_PuPd_NOPULL; //无上下拉 GPIO_Init(DataBusGPIO,&GPIOStru); }
/********************************************************** * 函数功能 ---> LCD12864判断忙 * 入口参数 ---> none * 返回数值 ---> none * 功能说明 ---> none
**********************************************************/