/*---------------------------------------------------------------------
LCD1602.C函数文件
作者:Cong-Tou
版本:初学
----------------------------------------------------------------------*/
#include "hardware.h"
#include "1602lcd.h"
void LCD_check_busy(void) //测忙
{
while(1)
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1; //RW=1 读
LCD_DATA=0xff;
LCD_EN=1;
if(!LCD_BUSY)break; //D7=跳出循环
}
LCD_EN=0;
}
void LCD_clear(void) //清屏
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=1; //全1清屏
LCD_EN=1;
LCD_EN=0;
}
void LCD_instruction(unsigned char LCD_instruction) //写指令
{
LCD_check_busy();
LCD_RS=0;
LCD_RW=0;
LCD_DATA=LCD_instruction;
LCD_EN=1;
LCD_EN=0;
}
void LCD_data(unsigned char LCD_data) //写数据
{
LCD_check_busy();
LCD_RS=1;
LCD_RW=0;
LCD_DATA=LCD_data;
LCD_EN=1;
LCD_EN=0;
}
void LCD_set(unsigned char x) //光标定位
{
LCD_instruction(0x80+x); //0X80+0 第一列 0x80+0x40第二列
}
void LCD_char(unsigned char LCD_char) //单字符
{
LCD_data(LCD_char);
}
void LCD_chars(unsigned char *lcd_string) //字符串
{
unsigned char i=0;
while(lcd_string[i]!=0x00)
{
LCD_data(lcd_string[i]);
i++;
}
}
void LCD_initial(void) //初始化
{
LCD_instruction(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE);
LCD_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF|LCD_CURSOR_BLINK_OFF);
LCD_instruction(LCD_DISPLAY_DOUBLE_LINE);
LCD_clear();
}
void display()
{
LCD_set(0x00);
LCD_chars("speed model:stop");
LCD_set(0x40); //第二行
LCD_chars("Distance:");
}