unsigned char Write_Random_Address_Byte(unsigned char add,unsigned char dat)
{
Start(); //启动总线
Write_A_Byte(add); //发送器件地址
if(ack1==0)return(0);
Write_A_Byte(dat); //发送数据
if(ack1==0)return(0);
Stop(); //结束总线
return(1);
}
void Enable_LCD_write()
{
LCD_data|=(1<<(3-1));//E=1;
Write_Random_Address_Byte(adress_1602,LCD_data); //
delay_nus(2);
LCD_data&=~(1<<(3-1));//E=0;
Write_Random_Address_Byte(adress_1602,LCD_data);
}
void LCD_Write_Com(unsigned char command)
{
delay_nus(16);
LCD_data&=~(1<<(1-1));//RS=0;
LCD_data&=~(1<<(2-1));//RW=0;
//LCD_data&=~(1<<(4-1));
Write_Random_Address_Byte(adress_1602,LCD_data);
LCD_data&=0X0f; //清高四位
LCD_data|=command & 0xf0; //写高四位
Write_Random_Address_Byte(adress_1602,LCD_data);
Enable_LCD_write();
command=command<<4; //低四位移到高四位
LCD_data&=0x0f; //清高四位
LCD_data|=command&0xf0; //写低四位
Write_Random_Address_Byte(adress_1602,LCD_data);
Enable_LCD_write();
}
void LCD_Write_Data(unsigned char value)
{
delay_nus(16);
LCD_data|=(1<<(1-1));//RS=1;
LCD_data&=~(1<<(2-1));//RW=0;
Write_Random_Address_Byte(adress_1602,LCD_data);
LCD_data&=0X0f; //清高四位
LCD_data|=value&0xf0; //写高四位
Write_Random_Address_Byte(adress_1602,LCD_data);
Enable_LCD_write();
value=value<<4; //低四位移到高四位
LCD_data&=0x0f; //清高四位
LCD_data|=value&0xf0; //写低四位
Write_Random_Address_Byte(adress_1602,LCD_data);
Enable_LCD_write();
}
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
delay_nms(2);
}
/*------------------------------------------------
写入字符串函数
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *dat,uint8 lg)
{
uint8 i;
#if 1
if (y == 0)
{
LCD_Write_Com(0x80 + x); //表示第一行
}
else
{
LCD_Write_Com(0xC0 + x); //表示第二行
}
for(i=0;i<lg && *dat!='\0';i++)
{
LCD_Write_Data(*(dat++));
}
#endif
}
void LCD_Init(void)
{
LCD_Write_Com(0x02);
delay_nus(40);
LCD_Write_Com(0x28); //4位显示!!!!!!!!!!!!!!!!!!
LCD_Write_Com(0x0c); //显示开
LCD_Write_Com(0x01); //清屏
delay_nms(10);
}
|