當前位置:編程學習大全網 - 熱門推薦 - LCD 1602顯示字符,編寫程序的時候,為何要弄壹個忙信號判斷函數?這個有什麽作用?

LCD 1602顯示字符,編寫程序的時候,為何要弄壹個忙信號判斷函數?這個有什麽作用?

妳好:

LCD 1602的響應速度相對於單片機的速度來說是偏慢的。

舉個簡單的例子,把壹桶油通過漏鬥向壹個瓶子裏倒,倒油的速度,即流量必須維持在壹定範圍之內,倒得太快油會從漏鬥頂部溢出來,這樣就浪費掉了。我們通過眼睛可以判斷並使油面保持在頂面以下,以漏鬥的額定流量來倒油,這樣效率最高。

而對於單片機來說,1602好比那個瓶子漏鬥,寫入1602中要顯示的數據好比油,如果以單片機的高運行速度向1602寫數據就很可能造成上面所說的溢出,比如連續寫入abc,結果只顯示出了a,這是因為1602的顯示芯片每次都要花時間來處理輸入的ascii碼數據,並把它顯示出來。而我們卻不容易主動地去控制寫入數據的速度,所以1602使用忙信號就有必要了,每次單片機只有檢測到忙信號為0,即不忙時,才向1602發數據。比如要顯示abc,則這樣操作,寫a---判忙---寫b---判忙---寫c---判忙。這樣就不會出錯了。

這幾年推出的lcd,像手機的屏響應速度就比較快,而1602這個古董我用示波器測過,大約40us左右的忙處理時間,而很多速度快的單片機的指令周期都是ns級的。也就是說單片機相當壹段時間都在‘等’LCD。

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

void busy(void)

{ uchar temp=0x80; //初始化temp最高位為1,使得能夠進入下面

//的while循環

P0=0xff;(P0就是8個數據口)

rs=0; //設置命令操作

rw=1; //設置讀操作

en=1; //使能

delay(100);(這是設的延時函數,不用解釋)

while(temp & 0x80) //判忙,壹旦表達式為假,即temp最高位為0,

//則表示1602不忙,跳出while.

{temp=P0;delay(20);} //把p0的的高位讀入temp,延時

en=0; //關閉使能信號

}

每次讀寫操作都要調用這個busy函數

  • 上一篇:傲鬥淩天攻略
  • 下一篇:誰知道最近新上映的電影哪些是國外的?急!!!!
  • copyright 2024編程學習大全網