超声波流量计的主程序研究与设计 十五
//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);
}
超声波流量计