//******************************************* //*函数名称:void LCD_CheckBusy(void) * //*函数功能:并行方式查忙 * //*形式参数:无 * //*形参说明:无 * //*返回参数:无 * //*使用说明:无 * //******************************************* void LCD_CheckBusy(void) { #if PARALLEL == 1 unsigned char temp; LCD_DATA_IN(); //P1 = 0xff; //输入前置1 LCD_RS_LOW(); //RS = 0; //指令 LCD_RW_HIGH(); //RW = 1; //读模式 _delay_us(5); //延时 LCD_E_HIGH(); //E = 1; //使能 do { temp = LCD_DATA_GET(); //temp = BUSY; } while( 0x80==(temp&0x80) ); //等待不忙,temp=0x00时不忙 LCD_E_LOW(); //E = 0; //_delay_ms(20); #else unsigned char temp = 0xFC,temp2; do { LCD_SendByte(temp); temp = LCD_ReceiveByte(); temp2 = LCD_ReceiveByte(); temp &= 0x80; }while( temp==0x80 ); #endif //#if PARALLEL == 1 }
void LCD_CHAR(unsigned char data) { LCD_E_LOW(); LCD_RS_HIGH(); LCD_DATA(data); LCD_E_HIGH(); tme_tempo(1); LCD_E_LOW(); }
//************************************************************************************ //*函数名称:void LCD_Write(unsigned char Data_Command , unsigned char uc_Content ) * //*函数功能:并行模式向LCD发送数据或指令 * //*形式参数:unsigned char Data_Command , unsigned char uc_Content * //*形参说明:数据或指令的标志位,指令或数据的内容 * //*返回参数:无 * //*使用说明:无 * //************************************************************************************ void LCD_Write( unsigned char Data_Command , unsigned char uc_Content ) { #if PARALLEL == 1 LCD_CheckBusy(); LCD_DATA_OUT(); if(Data_Command) { LCD_RS_HIGH(); //RS = 1; //数据 //LCD_RW_LOW(); //RW = 0; //写模式 } else { LCD_RS_LOW(); //RS = 0; //指令 //LCD_RW_LOW(); //RW = 0; //写模式 } LCD_RW_LOW(); //RW = 0; //写模式 LCD_DATA_PORT = uc_Content;//数据放到P1口上 LCD_E_HIGH(); //E = 1; _delay_us(1); //延时 //_nop_();//很重要 //_nop_(); //_nop_(); LCD_E_LOW(); //E = 0; #else unsigned char temp; LCD_CheckBusy(); if(Data_Command) { temp = 0xFA; //RS = 1,数据; RW = 0,写模式 } else { temp = 0xF8; //RS = 0,指令; RW = 0,写模式 } LCD_SendByte(temp); temp = uc_Content&0xF0; LCD_SendByte(temp); temp = (uc_Content<<4)&0xF0; LCD_SendByte(temp); #endif //#if PARALLEL == 1 }
//******************************************** //*函数名称:LCD_ReadData * //*函数功能:并行读LCD数据 * //*形式参数:无 * //*形参说明:无 * //*返回参数:读回的数据 * //*使用说明:无 * //******************************************** unsigned char LCD_ReadData(void) { #if PARALLEL == 1 unsigned char uc_Content; LCD_CheckBusy(); //_delay_us(2); LCD_DATA_IN(); //P1 = 0xff;//输入前置1 LCD_RS_HIGH(); //RS = 1; //数据 LCD_RW_HIGH(); //RW = 1; //读模式 LCD_E_HIGH(); //E = 1; //使能 _delay_us(1); //延时很重要 uc_Content = LCD_DATA_GET(); //uc_Content = P1; //P1口的内容放到变量中 LCD_E_LOW(); //E = 0; _delay_us(1); //延时很重要 return uc_Content; #endif //#if PARALLEL == 1 }