LCD1602驱动显示实验STM32
/*********************************************************************
*名 称:LCD_Setpos_DispDecimal()
*功 能:在指定位置显示一个有效位不超过8位的浮点数
*入口参数:row:待显示的行 1,2
* col:待显示的列 0~15
* num:待显示的浮点数放大10的整数倍后得到的整数,不超过8位
* dot:小数点的位数
*出口参数:无
*********************************************************************/
void LCD_Setpos_DispDecimal(uchar row,uchar col,uint32_t num,uchar dot)
{
LCD_Setpos(row,col);
LCD_DispDecimal(num,dot);
}
/*********************************************************************
*名 称:LCD_DispDateTime()
*功 能:显示日历,显示日期与时间
*入口参数:year:年,可以是任意值
* month:月,1~12
* day:日,1~31
* hour:时,1~24 或 1~12
* min:分,0~59
* sec:秒,0~59
*出口参数:无
*说 明:使用前必须先宏定义USE_LCD_DISP_DATE,在包含文件之前定义有效
*显示格式:Date:yyyy-mm-dd *
* Time:hh:mm:ss *
*********************************************************************/
void LCD_DispDateTime(uint32_t year,uchar month,uchar day,uchar hour,uchar min,uchar sec)
{
LCD_Setpos(1,0);
LCD_DispString("Date:");
LCD_Dispnum((uint32_t)year);
LCD_DispChar(-);
LCD_Dispnum((uint32_t)month);
LCD_DispChar(-);
LCD_Dispnum((uint32_t)day);
LCD_Setpos(1,15);
LCD_DispChar(*); //第一行结束符显示
LCD_Setpos(2,0);
LCD_DispString("Time:");
LCD_Dispnum((uint32_t)hour);
LCD_DispChar(:);
LCD_Dispnum((uint32_t)min);
LCD_DispChar(:);
LCD_Dispnum((uint32_t)sec);
LCD_Setpos(2,15);
LCD_DispChar(*); //第二行结束符显示
}
/*********************************************************************
*名 称:LCD_DispStopWatch()
*功 能:显示秒表,显示时,分,秒,10毫秒,精确到10ms
*入口参数:hour:时,1~24 或 1~12
* min:分,0~59
* sec:秒,0~59
* tenms:10ms计数值,如3表示30ms
*出口参数:无
*显示格式:Current Time: *
* hh:mm:ss:tt *
*********************************************************************/
void LCD_DispStopWatch(uchar hour,uchar min,uchar sec,uchar tenms)
{
LCD_Setpos(1,0);
LCD_DispString("Current Time:");
LCD_Setpos(1,15);
LCD_DispChar(*); //第一行结束符显示
LCD_Setpos(2,2);
LCD_Dispnum((uint32_t)hour);
LCD_DispChar(:);
LCD_Dispnum((uint32_t)min);
LCD_DispChar(:);
LCD_Dispnum((uint32_t)sec);
LCD_DispChar(:);
LCD_Dispnum((uint32_t)tenms);
LCD_Setpos(2,15);
LCD_DispChar(*); //第二行结束符显示
}
/*********************************************************************
*名 称:LCD_DispFreq()
*功 能:显示频率计,动态自动调整频率显示
*入口参数:freq:可以显示8位整数表示的频率值,频率范围1Hz~99MHz
*出口参数:无
*说 明:入口的频率值单位是Hz,显示函数自动选择合适的显示方式
* freq>=1000000显示成6位小数的MHz
* else freq>=1000 显示成3位小数的KHz
* else freq>=0 默认显示单位是Hz (三个区间互斥)
*********************************************************************/
void LCD_DispFreq(uint32_t freq)
{
LCD_Setpos(1,0);
LCD_DispString("Current Freq:");
LCD_Setpos(2,1); //显示位置
if(freq>=1000000)
{
LCD_DispDecimal(freq,6);
LCD_DispString("MHz");
}
else if(freq>=1000)
{
LCD_DispDecimal(freq,3);
LCD_DispString("KHz");
}
else { LCD_Dispnum(freq);
LCD_DispString("Hz");
}
LCD_Setpos(2,14);
LCD_DispString("OK");
}
//屏幕整体左移一格,用于滚动显示
void LCD_ShiftLeft()
{
LCD_Writecmd(0x18);
}
//屏幕整体右移一格,用于滚动显示
void LCD_ShiftRight(void)
{
LCD_Writecmd(0x1C);
}
//清屏,清除显示
void LCD_Clear(void)
{
LCD_Writecmd(0x01);
}
//使光标还回原点位置
void LCD_Return(void)
{
LCD_Writecmd(0x02);
}
//关显示
void LCD_Close(void)
{
LCD_Writecmd(0x08);
}
//开显示
void LCD_Open(void)
{
LCD_Writecmd(0x0C);
}
/*********************************************************************
*名 称:LCD_FlickerChar()
*功 能:使指定位置字符闪烁,不显示光标
*入口参数:row:行 1,2
* col:列 0~15
*出口参数:无
*说 明:写命令0x0D不显示光标的闪烁,写命令0x0F是显示光标的闪烁
* 一旦设定闪烁后,会根据位置变化闪烁,关闪烁写命令0x0C
*********************************************************************/
void LCD_FlickerChar(uchar row,uchar col)
{
LCD_Writecmd(0x0D);
LCD_Setpos(row,col);
}
//关闭字符闪烁
void LCD_CloseFlicker(void)
{
LCD_Writecmd(0x0C);
}
//屏幕秒闪烁一次
void LCD_FlickerScreen(void)
{
LCD_Writecmd(0x08);//关显示
delay_nms(500);
LCD_Writecmd(0x0C);//开显示
delay_nms(500);
}
评论