超聲波流量計的主程序研究與設計 十五
//4.lcd顯示子程序
// 檢查LCD忙狀態
// lcd_busy為1時,忙,等待。Lcd_busy為0時,閑,可寫指令與數據
//-----------------------------------------------------------------
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
//-----------------------------------------------------------------
// 寫指令數據到LCD
// RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
//-----------------------------------------------------------------
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());//首先判斷lcd是否處于忙的狀態
LCD_RS = 0;//通過RS.RW.EN的設置,進入寫指令狀態
LCD_RW = 0;
LCD_EN = 0;
_nop_();//空操作,延時作用
_nop_();
P0 = cmd;//從P0口度讀入指令
delayNOP();
LCD_EN = 1;//使能發送
delayNOP();//等待發送完畢
LCD_EN = 0; //發送完畢后關關閉
}
//-----------------------------------------------------------------
// 寫顯示數據到LCD
// RS=H,RW=L,E=高脈沖,D0-D7=數據。
//-----------------------------------------------------------------
void lcd_wdat(uchar dat)
{
while(lcd_busy());//lcd_busy()=1,則處于忙狀態,就等待
LCD_RS = 1;//設置RS.RW.EN,進入寫數據狀態
LCD_RW = 0;
LCD_EN = 0;
P0 = dat;//從P0口讀入數據
delayNOP();
LCD_EN = 1;//將數據存儲到LCD的ROM中
delayNOP();
LCD_EN = 0;
}
//-----------------------------------------------------------------
// LCD初始化設定
//-----------------------------------------------------------------
void lcd_init()
{
LCD_PSB = 1; //并口方式
lcd_wcmd(0x34); //擴充指令操作
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //顯示開,關光標
delay(5);
lcd_wcmd(0x01); //清除LCD的顯示內容
delay(5);
}
超聲波流量計