lcd刷新慢_LCD1602刷新率很慢的问题
#include"lcd.h"
/*******************************************************************************
* 函 數 名? ?? ?? ?: Lcd1602_Delay1ms
* 函數功能? ? ? ? ? ? ? ?? ? : 延時函數,延時1ms
*******************************************************************************/
void Lcd1602_Delay1ms(uint c)? ?//誤差 0us
{
uchar a,b;
for (; c>0; c--)
{
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
}
}
/*******************************************************************************
* 函 數 名? ?? ?? ?: LcdWriteCom
* 函數功能? ? ? ? ? ? ? ?? ? : 向LCD寫入一個字節的命令
*******************************************************************************/
#ifndef ? ? ? ? LCD1602_4PINS? ? ? ???//當沒有定義這個LCD1602_4PINS時
void LcdWriteCom(uchar com)? ? ? ?? ?//寫入命令
{
LCD1602_E = 0;? ???//使能
LCD1602_RS = 0;? ? ? ?? ? //選擇發送命令
LCD1602_RW = 0;? ? ? ?? ? //選擇寫入
LCD1602_DATAPINS = com;? ???//放入命令
Lcd1602_Delay1ms(1);? ? ? ? ? ? ? ? //等待數據穩定
LCD1602_E = 1;? ? ? ?? ?? ?? ???//寫入時序
Lcd1602_Delay1ms(5);? ? ? ?? ?//保持時間
LCD1602_E = 0;
}
#else
void LcdWriteCom(uchar com)? ? ? ?? ?//寫入命令
{
LCD1602_E = 0;? ? ? ???//使能清零
LCD1602_RS = 0;? ? ? ???//選擇寫入命令
LCD1602_RW = 0;? ? ? ???//選擇寫入
LCD1602_DATAPINS = com;? ? ? ? //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ???//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //發送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ???//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 數 名? ?? ?? ?: LcdWriteData
* 函數功能? ? ? ? ? ? ? ?? ? : 向LCD寫入一個字節的數據
*******************************************************************************/
#ifndef ? ? ? ? LCD1602_4PINS
void LcdWriteData(uchar dat)? ? ? ? ? ? ? ? ? ? ? ? //寫入數據
{
LCD1602_E = 0;? ? ? ? //使能清零
LCD1602_RS = 1;? ? ? ? //選擇輸入數據
LCD1602_RW = 0;? ? ? ? //選擇寫入
LCD1602_DATAPINS = dat; //寫入數據
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ?//寫入時序
Lcd1602_Delay1ms(5);? ?//保持時間
LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)? ? ? ? ? ? ? ? ? ? ? ? //寫入數據
{
LCD1602_E = 0;? ? ? ?? ?//使能清零
LCD1602_RS = 1;? ? ? ?? ?//選擇寫入數據
LCD1602_RW = 0;? ? ? ?? ?//選擇寫入
LCD1602_DATAPINS = dat;? ? ? ? //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ?? ?//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //寫入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ?? ?//寫入時序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 數 名? ?? ? : LcdInit()
* 函數功能? ? ? ? ? ? ? ???: 初始化LCD屏
*******************************************************************************/
#ifndef? ? ? ? ? ? ? ? LCD1602_4PINS
void LcdInit()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//LCD初始化子程序
{
LcdWriteCom(0x38);??//開顯示
LcdWriteCom(0x0c);??//開顯示不顯示光標
LcdWriteCom(0x06);??//寫一個指針加1
LcdWriteCom(0x01);??//清屏
LcdWriteCom(0x80);??//設置數據指針起點
}
#else
void LcdInit()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//LCD初始化子程序
{
LcdWriteCom(0x32);? ? ? ???//將8位總線轉為4位總線
LcdWriteCom(0x28);? ? ? ???//在四位線下的初始化
LcdWriteCom(0x0c);??//開顯示不顯示光標
LcdWriteCom(0x06);??//寫一個指針加1
LcdWriteCom(0x01);??//清屏
LcdWriteCom(0x80);??//設置數據指針起點
}
#endif
/*------------------------------------------------
選擇寫入位置
------------------------------------------------*/
void SelectPosition(unsigned char x,unsigned char y)
{
if (x == 0)
{
LcdWriteCom(0x80 + y);? ???//表示第一行
}
else
{
LcdWriteCom(0xC0 + y);? ?? ?//表示第二行
}
}
/*------------------------------------------------
寫入字符串函數
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{
SelectPosition(x,y) ;
while (*s) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//*s表示s是一個指針。*s表示s指針指向的相應變量的值
{
LcdWriteData( *s);
s ++;
}
}
//========================================================================
// 函數: void LCD_Write_Char(uchar x,uchar y,uint s,uchar l)
// 應用: LCD_Write_Char(0,1,366,4) ;
// 描述: 在第0行第一個字節位置顯示366的后4位,顯示結果為 0366
// 參數: x:行,y:列,s:要顯示的字,l:顯示的位數
//========================================================================
void LCD_Write_Char(uchar x,uchar y,uint s,uchar l)
{
SelectPosition(x,y) ;
if(l>=5)
LcdWriteData(0x30+s/10000%10);? ? ? ? //萬位
if(l>=4)
LcdWriteData(0x30+s/1000%10);? ? ? ? ? ? ? ? //千位
if(l>=3)
LcdWriteData(0x30+s/100%10);? ? ? ? ? ? ? ? //百位
if(l>=2)
LcdWriteData(0x30+s/10%10);? ? ? ? ? ? ? ? ? ? ? ? //十位
if(l>=1)
LcdWriteData(0x30+s%10);? ? ? ? ? ? ? ? //個位
}
/*顯示函數1*/
void Display1(wendu,yanwu,pm25,jiaquan) //溫度,煙霧,PM2.5,甲醛
{
//時時溫度
LCD_Write_Char(0,6,wendu/10,2);
LcdWriteData('.');
LCD_Write_Char(0,9,wendu%10,1);
//時時煙霧
LCD_Write_Char(0,13,yanwu,3);
//時時pm25
LCD_Write_Char(1,6,pm25,3);
//時時甲醛
LCD_Write_Char(1,13,jiaquan,3);
}
/*顯示函數2*/
void Display2(yushe_wendu,yushe_yanwu,yushe_pm25,yushe_jiaquan)
{
//顯示預設溫度
LCD_Write_Char(0,6,yushe_wendu,2);
//顯示預設煙霧
LCD_Write_Char(0,13,yushe_yanwu,3);
//顯示預設PM2.5
LCD_Write_Char(1,6,yushe_pm25,3);
//顯示預設甲醛
LCD_Write_Char(1,13,yushe_jiaquan,3);
}
總結
以上是生活随笔為你收集整理的lcd刷新慢_LCD1602刷新率很慢的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中开关_pyq中的开关按钮
- 下一篇: 三调 图斑地类面积_三调对于最小上图图斑