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);
}
評論