LCD_Write_Command(0x38);//设置LCD两行显示,一个数据由5*7点阵表示,数据由8跟线传输
delay_ms(2);
LCD_Write_Command(0x06);//设定输入方式,增量不移位
delay_ms(2);
LCD_Write_Command(0x0c);//开整体显示,关光标,不闪烁
delay_ms(2);
}
/*******************写指令函数************************/
void LCD_Write_Command(u8 com)
{
GPIO_Write(GPIOA, 0X00FF&com);//该函数一般用来往一次性一个GPIO的多个端口设置
rs=0; //写指令函数和写数据函数其实可以并一起价格 BOOL变量判断是写指令就rs=0写数据就rs=1。
rw=0;
en=0; //写指令 输入:RS=L,RW=L,E=下降沿脉冲
delay_ms(2);
en=1;
delay_ms(2);
en=0;
}
/*******************写数据函数************************/
void LCD_Write_Date(u8 date)
{
GPIO_Write(GPIOA,0X00FF&date);//GPIOA的第八位用来作为8位数据口
rs=1;
rw=0;
en=0; //写指令 输入:RS=L,RW=L,E=下降沿脉冲
delay_ms(2);
en=1;
delay_ms(2);
en=0;
}
/******************************************************************************
函数名称:LCD1602_MoveToPosition
函数功能:将液晶的光标移动到指定的位置
入口参数:x-液晶显示的行数,范围0-1
x = 0:在液晶的第一行
x = 1:在液晶的第二行
y-液晶显示的列数,范围0-15
y = 0:在液晶的第一列
y = 1:在液晶的第二列
......
y = 15:在液晶的第十六列
返回值:无
备注:通过指定x,y的值可以将液晶的光标移动到指定的位置
*******************************************************************************/
void LCD1602_MoveToPosition(u8 x,u8 y)
{
if(0 == x)
LCD_Write_Command(0x80 | y); //光标定位到第一行的y列
if(1 == x)
LCD_Write_Command(0xC0 | y); //光标定义到第二行的y列
}
/******************************************************************************
函数名称:LCD1602_DisplayOneCharOnAddr
函数功能:在指定的位置上显示指定的字符
入口参数:x-液晶显示的行数,范围0-1
x = 0:在液晶的第一行
x = 1:在液晶的第二行
y-液晶显示的列数,范围0-15
y = 0:在液晶的第一列
y = 1:在液晶的第二列
......
y = 15:在液晶的第十六列
ucData-要显示的字符数据
返回值:无
备注:确保x,y的取值要在指定的范围内
*******************************************************************************/
void LCD1602_DisplayOneCharOnAddr(u8 x,u8 y,u8 ucData)
{
LCD1602_MoveToPosition(x,y); //光标位置
LCD_Write_Date(ucData); //写入数据
}
/******************************************************************************
函数名称:LCD1602_DisplayString
函数功能:显示字符串
入口参数:ucStr-字符串的首地址
返回值:无
备注:无
*******************************************************************************/
void LCD1602_DisplayString(u8 *ucStr)
{
while(*ucStr != '\0') //字符串结束之前,循环显示
{
LCD_Write_Date(*ucStr); //依次写入每一个字符
ucStr++; //指针增加
}
}
/*****************控制光标函数********************/
void write_guanbiao(u8 hang,u8 add,u8 date)
{
if(hang==1)
LCD_Write_Command(0x80+add);
else
LCD_Write_Command(0x80+0x40+add);
if(date == 1)
LCD_Write_Command(0x0f); //显示光标并且闪烁
else
LCD_Write_Command(0x0c); //关闭光标
}
void display(u8 aa,u8 bb,u8 cc)
{
if(S1num!=3)
{
LCD1602_DisplayOneCharOnAddr(1,0,aa/10+0x30);
LCD1602_DisplayOneCharOnAddr(1,1,aa%10+0x30);
}
else
{
if(flag_100ms==0)
{
LCD1602_DisplayOneCharOnAddr(1,0,' ');
LCD1602_DisplayOneCharOnAddr(1,1,' ');
}
else
{
LCD1602_DisplayOneCharOnAddr(1,0,aa/10+0x30);
LCD1602_DisplayOneCharOnAddr(1,1,aa%10+0x30);
}
}
LCD1602_DisplayOneCharOnAddr(1,2,':');
if(S1num!=2)
{
LCD1602_DisplayOneCharOnAddr(1,3,bb/10+0x30);
LCD1602_DisplayOneCharOnAddr(1,4,bb%10+0x30);
}
else
{
if(flag_100ms==0)
{
LCD1602_DisplayOneCharOnAddr(1,3,' ');
LCD1602_DisplayOneCharOnAddr(1,4,' ');
}
else
{
LCD1602_DisplayOneCharOnAddr(1,3,bb/10+0x30);
LCD1602_DisplayOneCharOnAddr(1,4,bb%10+0x30);
}
}
LCD1602_DisplayOneCharOnAddr(1,5,':');
if(S1num!=1)
{
LCD1602_DisplayOneCharOnAddr(1,6,cc/10+0x30);
LCD1602_DisplayOneCharOnAddr(1,7,cc%10+0x30);
}
else
{
if(flag_100ms==0)
{
LCD1602_DisplayOneCharOnAddr(1,6,' ');
LCD1602_DisplayOneCharOnAddr(1,7,' ');
}
else
{
LCD1602_DisplayOneCharOnAddr(1,6,cc/10+0x30);
LCD1602_DisplayOneCharOnAddr(1,7,cc%10+0x30);
}
}
}
|