LCD1602驅(qū)動(dòng)顯示實(shí)驗(yàn)STM32
/*********************************************************************
*名 稱:LCD_Setpos_DispDecimal()
*功 能:在指定位置顯示一個(gè)有效位不超過8位的浮點(diǎn)數(shù)
*入口參數(shù):row:待顯示的行 1,2
* col:待顯示的列 0~15
* num:待顯示的浮點(diǎn)數(shù)放大10的整數(shù)倍后得到的整數(shù),不超過8位
* dot:小數(shù)點(diǎn)的位數(shù)
*出口參數(shù):無
*********************************************************************/
void LCD_Setpos_DispDecimal(uchar row,uchar col,uint32_t num,uchar dot)
{
LCD_Setpos(row,col);
LCD_DispDecimal(num,dot);
}
/*********************************************************************
*名 稱:LCD_DispDateTime()
*功 能:顯示日歷,顯示日期與時(shí)間
*入口參數(shù):year:年,可以是任意值
* month:月,1~12
* day:日,1~31
* hour:時(shí),1~24 或 1~12
* min:分,0~59
* sec:秒,0~59
*出口參數(shù):無
*說 明:使用前必須先宏定義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(*); //第一行結(jié)束符顯示
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(*); //第二行結(jié)束符顯示
}
/*********************************************************************
*名 稱:LCD_DispStopWatch()
*功 能:顯示秒表,顯示時(shí),分,秒,10毫秒,精確到10ms
*入口參數(shù):hour:時(shí),1~24 或 1~12
* min:分,0~59
* sec:秒,0~59
* tenms:10ms計(jì)數(shù)值,如3表示30ms
*出口參數(shù):無
*顯示格式: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(*); //第一行結(jié)束符顯示
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(*); //第二行結(jié)束符顯示
}
/*********************************************************************
*名 稱:LCD_DispFreq()
*功 能:顯示頻率計(jì),動(dòng)態(tài)自動(dòng)調(diào)整頻率顯示
*入口參數(shù):freq:可以顯示8位整數(shù)表示的頻率值,頻率范圍1Hz~99MHz
*出口參數(shù):無
*說 明:入口的頻率值單位是Hz,顯示函數(shù)自動(dòng)選擇合適的顯示方式
* freq>=1000000顯示成6位小數(shù)的MHz
* else freq>=1000 顯示成3位小數(shù)的KHz
* else freq>=0 默認(rèn)顯示單位是Hz (三個(gè)區(qū)間互斥)
*********************************************************************/
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");
}
//屏幕整體左移一格,用于滾動(dòng)顯示
void LCD_ShiftLeft()
{
LCD_Writecmd(0x18);
}
//屏幕整體右移一格,用于滾動(dòng)顯示
void LCD_ShiftRight(void)
{
LCD_Writecmd(0x1C);
}
//清屏,清除顯示
void LCD_Clear(void)
{
LCD_Writecmd(0x01);
}
//使光標(biāo)還回原點(diǎn)位置
void LCD_Return(void)
{
LCD_Writecmd(0x02);
}
//關(guān)顯示
void LCD_Close(void)
{
LCD_Writecmd(0x08);
}
//開顯示
void LCD_Open(void)
{
LCD_Writecmd(0x0C);
}
/*********************************************************************
*名 稱:LCD_FlickerChar()
*功 能:使指定位置字符閃爍,不顯示光標(biāo)
*入口參數(shù):row:行 1,2
* col:列 0~15
*出口參數(shù):無
*說 明:寫命令0x0D不顯示光標(biāo)的閃爍,寫命令0x0F是顯示光標(biāo)的閃爍
* 一旦設(shè)定閃爍后,會(huì)根據(jù)位置變化閃爍,關(guān)閃爍寫命令0x0C
*********************************************************************/
void LCD_FlickerChar(uchar row,uchar col)
{
LCD_Writecmd(0x0D);
LCD_Setpos(row,col);
}
//關(guān)閉字符閃爍
void LCD_CloseFlicker(void)
{
LCD_Writecmd(0x0C);
}
//屏幕秒閃爍一次
void LCD_FlickerScreen(void)
{
LCD_Writecmd(0x08);//關(guān)顯示
delay_nms(500);
LCD_Writecmd(0x0C);//開顯示
delay_nms(500);
}
評(píng)論