{ while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; 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_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
/********************************************************/ /* /* LCD初始化设定
/* /********************************************************/
void lcd_init() {
delay(30);
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(5);
lcd_wcmd(0x38); delay(5);
lcd_wcmd(0x38); delay(5);
lcd_wcmd(0x0c); //显示开,关光标 delay(5);
lcd_wcmd(0x06); //移动光标 delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容 delay(5); }
/********************************************************/
/* /* 设定显示位置 /* /********************************************************/
void lcd_pos(uchar pos) {
lcd_wcmd(pos | 0x80); //数据指针=80+地址变量 }
/********************************************************/ /*
/* LCD1602初始显示子程序 /* /********************************************************/
void LCD_init_DIS() {
delay(10); //延时
lcd_init(); //初始化LCD
lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0;
while(cdis1[m] != '\\0')
{ // lcd_wdat(cdis1[m]); m++; }
lcd_pos(0x40); // m = 0;
while(cdis2[m] != '\\0') {
lcd_wdat(cdis2[m]); // m++; }
delay(3000); //
lcd_pos(0); // m = 0;
while(cdis3[m] != '\\0')
{ // lcd_wdat(cdis3[m]); m++; }
lcd_pos(0x40); // m = 0;
while(cdis4[m] != '\\0') {
lcd_wdat(cdis4[m]); // m++; }
显示字符 设置显示位置为第二行第1个字符 显示字符 延时 设置显示位置为第一行的第1个字符 显示字符 设置显示位置为第二行第1个字符 显示字符
for(m=0;m<2;m++) {
lcd_pos(0x0c+m); //显示方向符号 lcd_wdat(0x3e); } }
/********************************************************/ /*
/*数据转换子程序 /*
/********************************************************/ void data_conv() {
data_temP0=data_temp/10; //高位 if(data_temP0==0)
{data_temP0=0x20;} //高位为0不显示 else
{data_temP0=data_temP0+0x30;}
data_temp2=data_temp; //低位 data_temp2=data_temp2+0x30; }
/********************************************************/ /*
/*数据显示子程序 /*
/********************************************************/ void data_dis() {
data_temp = snum; //显示圈数 data_conv(); lcd_pos(0x44); lcd_wdat(data_temP0); lcd_pos(0x45); lcd_wdat(data_temp2);
data_temp = rate; //显示速率 data_conv(); lcd_pos(0x4d); lcd_wdat(data_temP0); lcd_pos(0x4e); lcd_wdat(data_temp2); }
/******************************************************** /*
/* 显示运行方向符号 /*
/********************************************************/ void motor_DR() {
if(direction==1) //正转方向标志 { for(m=0;m<2;m++) {
lcd_pos(0x0c+m); //显示方向符号 lcd_wdat(0x3e); } } else
{ for(m=0;m<2;m++) //反转方向标志 {
lcd_pos(0x0c+m); //显示方向符号 lcd_wdat(0x3c); } } }
/******************************************************** /*
/* 显示运行状态 /*
/********************************************************/ void motor_RUN() {
if(on_off==1)