[mw_shl_code=c,true]
/*********************************************************************************************************
** 函数名称: InitLCD
** 功能描述: 初始化LCD模块
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void InitLCD(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__GPIOA_CLK_ENABLE();
/*Configure GPIO pins : PA1 PA2 PA3 PA5 */
GPIO_InitStruct.Pin = LCD_RESET | LCD_SCLK | LCD_CS | LCD_RS |LCD_SDA|GPIO_PIN_4 ;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(LCD_GPIO, &GPIO_InitStruct);
Delay(7);
HAL_GPIO_WritePin(LCD_GPIO,LCD_RESET,GPIO_PIN_RESET);
Delay(2);
HAL_GPIO_WritePin(LCD_GPIO,LCD_RESET,GPIO_PIN_SET);
WriteToLCD(0xE2, 1);
Delay(2);
WriteToLCD(0x2c, 1); /*升压步聚1*/
Delay(2);
WriteToLCD(0x2e, 1); /*升压步聚2*/
Delay(2);
WriteToLCD(0x2f, 1); /*升压步聚3*/
Delay(2);
WriteToLCD(0x24, 1); /*粗调对比度,可设置范围20~27*/
WriteToLCD(0x81, 1); /*微调对比度*/
WriteToLCD(0x1a, 1); /*微调对比度的值,可设置范围0~63 1f*/
WriteToLCD(0xa2, 1); /*1/9偏压比(bias)*/
WriteToLCD(0xc8, 1); /*行扫描顺序:从上到下*/
WriteToLCD(0xa0, 1); /*列扫描顺序:从左到右*/
WriteToLCD(0x40, 1); /*起始行:从第一行开始*/
ClearScreen();
WriteToLCD(0xaf, 1); /*开显示*/
}
void Delay(unsigned short tick)
{
unsigned char j,k;
for(j=0;j<tick;j++)
for(k=0;k<110;k++);
}
/*********************************************************************************************************
** 函数名称: WriteToLCD
** 功能描述: 写数据进LCD
** 输 入: data:写数据
** flg:标识。(0,数据)(1,命令)
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void WriteToLCD(unsigned char data, unsigned char flg)
{
unsigned char i;
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_RESET);
if(flg)
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_RS,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_RS,GPIO_PIN_SET);
}
for(i=0;i<8;i++)
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_SCLK,GPIO_PIN_RESET);
if(flg) Delay(1); ;
if(data&0x80)
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_SDA,GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_SDA,GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(LCD_GPIO,LCD_SCLK,GPIO_PIN_SET);
data <<= 1;
}
}
/*********************************************************************************************************
** 函数名称: ClearScreen
** 功能描述: 清除屏幕
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void ClearScreen(void)
{
unsigned char i,j;
for(i=0;i<9;i++)
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_RESET);
WriteToLCD(0xb0+i,1);
WriteToLCD(0x10,1);
WriteToLCD(0x00,1);
for(j=0;j<132;j++)
{
WriteToLCD(0x00,0);
}
}
}
/*********************************************************************************************************
** 函数名称: LCDAddr
** 功能描述: LCD地址偏移,内部使用
** 输 入: page:页,column:列
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void LCDAddr(unsigned char page,unsigned char column)
{
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_RESET);
column--;
page--;
WriteToLCD(0xb0+page,1);
WriteToLCD(((column>>4)&0x0f)+0x10,1);
WriteToLCD(column&0x0f,1);
}
/*********************************************************************************************************
** 函数名称: DisplayStr
** 功能描述: 显示字符串
** 输 入: page:页,column:列,text:文本指针
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void DisplayStr(unsigned short page,unsigned short column,char *text)
{
unsigned short i=0,j,k,n;
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_RESET);
while(text>0x00)
{
if((text>=0x20)&&(text<=0x7e))
{
j=text-0x20;
for(n=0;n<2;n++)
{
LCDAddr(page+n,column);
for(k=0;k<8;k++)
{
WriteToLCD(ascii_table_8x16[j][k+8*n],0);
}
}
i++;
column+=8;
}
else
{
i++;
}
}
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_SET);
}
/*********************************************************************************************************
** 函数名称: DisplayStr
** 功能描述: 显示汉字
** 输 入: page:页,column:列,dp:文本指针,Num:汉字数目
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void DisplayChinese(unsigned char page,unsigned char column,unsigned char *dp,unsigned char Num)
{
unsigned char i,j,k;
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_RESET);
for(k=0;k<Num;k++)
{
for(j=0;j<2;j++)
{
LCDAddr(page+j,column+(k*16));
for (i=0;i<16;i++)
{
WriteToLCD(*dp,0); //写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1
dp++;
}
}
}
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_SET);
}
/*********************************************************************************************************
** 函数名称: DisplayBTValue
** 功能描述: 显示电池电量
** 输 入: page:页,column:列,value:电量(百分比形式)
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void DisplayBTValue(unsigned char page,unsigned char column,unsigned char value)
{
char val[40];
unsigned char dianzi6[]={
/*-- 文字: 电 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00};
unsigned char liangzi6[]={
/*-- 文字: 量 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00};
DisplayChinese(page,column,dianzi6,1);
DisplayChinese(page,column + 48,liangzi6,1);
DisplayStr(page,column + 64,val);
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_SET);
}
/*********************************************************************************************************
** 函数名称: DisplayRecordTime
** 功能描述: 显示记录时间
** 输 入: page:页,column:列,hour:小时,minute:分钟
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void DisplayRecordTime(unsigned char page,unsigned char column,unsigned char hour,unsigned char minute)
{
char val[40];
unsigned char code[] = {
0x40,0x40,0x42,0xCC,0x00,0x00,0x00,0x84,0x84,0x84,0x84,0x84,0xFC,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x3F,0x40,0x40,0x40,0x40,0x41,0x40,0x70,0x00,
0x80,0x80,0x82,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x80,0x80,0x80,0x00,
0x40,0x40,0x22,0x24,0x10,0x48,0x80,0x7F,0x04,0x08,0x18,0x24,0x22,0x40,0x40,0x00,
0x00,0xFC,0x84,0x84,0x84,0xFC,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,
0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x01,0x06,0x40,0x80,0x7F,0x00,0x00,0x00,
0x00,0xF8,0x01,0x06,0x00,0xF0,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x1F,0x11,0x11,0x11,0x1F,0x00,0x40,0x80,0x7F,0x00,0x00,
};
DisplayChinese(page,column,code,4);
DisplayStr(page,column + 64,val);
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_SET);
}
/*********************************************************************************************************
** 函数名称: DisplayLeadState
** 功能描述: 显示导联状态
** 输 入: page:页,column:列,state:当前状态
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void DisplayLeadState(unsigned char page,unsigned char column,unsigned char state)
{
unsigned char code[] = {
0x00,0x00,0x7E,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9E,0x80,0xE0,0x00,0x00,
0x04,0x04,0x04,0x04,0x0C,0x34,0x04,0x04,0x44,0x84,0x7F,0x04,0x04,0x04,0x04,0x00,
0x02,0xFE,0x92,0x92,0xFE,0x02,0x00,0x10,0x11,0x16,0xF0,0x14,0x13,0x10,0x00,0x00,
0x10,0x1F,0x08,0x08,0xFF,0x04,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x00,
0x00,0x08,0x30,0x00,0xFF,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x22,0x2C,0x20,0x00,
0x04,0x04,0x02,0x01,0xFF,0x80,0x40,0x30,0x0E,0x01,0x06,0x18,0x20,0x40,0x80,0x00,
0x00,0x04,0x84,0x84,0x44,0x24,0x54,0x8F,0x14,0x24,0x44,0x84,0x84,0x04,0x00,0x00,
0x41,0x39,0x00,0x00,0x3C,0x40,0x40,0x42,0x4C,0x40,0x40,0x70,0x04,0x09,0x31,0x00,
};
unsigned char ok[] = {
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,
0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
0x20,0x18,0x08,0xEA,0xAC,0xA8,0xA8,0xAF,0xA8,0xA8,0xAC,0xEA,0x08,0x28,0x18,0x00,
0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00,
};
unsigned char bad[] = {
0x00,0x00,0x7E,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x9E,0x80,0xE0,0x00,0x00,
0x08,0x88,0x48,0x28,0x1E,0x08,0x08,0x08,0x08,0x08,0xFE,0x08,0x08,0x08,0x08,0x00,
0x20,0x18,0x08,0xEA,0xAC,0xA8,0xA8,0xAF,0xA8,0xA8,0xAC,0xEA,0x08,0x28,0x18,0x00,
0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00,
};
DisplayChinese(page,column,code,4);
DisplayStr(page,column+64,":");
if(state)
{
DisplayChinese(page,column + 72,ok,2);
}
else
{
DisplayChinese(page,column + 72,bad,2);
}
HAL_GPIO_WritePin(LCD_GPIO,LCD_CS,GPIO_PIN_SET);
}
/*********************************************************************************************************
** 函数名称: DisplayBootPicture
** 功能描述: 打印开机画面
** 输 入: info:开机信息
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
void DisplayBootPicture(unsigned char info)
{
ClearScreen();
switch (info)
{
case BootWaitLCD:
//DisplayChinese(2,24,DriverCheck,5);
DisplayChinese(4,16,zhihaidianzi,6);
DisplayStr(6,48,"....");
break;
case BatteryLowLCD:
DisplayChinese(2,40,BTLow,3);
DisplayChinese(5,24,ChangeBT,5);
break;
case LeadCheckLCD:
DisplayChinese(4,24,CheckLead,5);
break;
case SystemNormalLCD:
DisplayChinese(2,32,DriverNormal,4);
DisplayChinese(5,24,PressRecord,5);
break;
case ShutDownFinishLCD:
DisplayChinese(4,32,ShutDownFinish,4);
break;
case RecordingLCD:
DisplayChinese(3,40,Recording,3);
DisplayStr(5,48,"....");
break;
case EcgMarkLCD:
DisplayChinese(4,48,EcgMark,2);
break;
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
[/mw_shl_code]
|