日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lcd刷新慢_LCD1602刷新率很慢的问题

發布時間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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刷新率很慢的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。