elseSDA=0;
_nop_();
SCL=1;//置时钟线为高,通知被控器开始接收数据位
nop4();
_nop_();
SCL=0;
}
_nop_();
_nop_();
SDA=1;//8位发送完后释放数据线,准备接收应答位
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
if(SDA==1)ack=0;
elseack=1;//判断是否接收到应答信号
SCL=0;
_nop_();
_nop_();
}
bitWrite_Random_Address_Byte(unsignedcharadd,unsignedchardat)
{
Start();//启动总线
Write_A_Byte(add);//发送器件地址
if(ack==0)return(0);
Write_A_Byte(dat);//发送数据
if(ack==0)return(0);
Stop();//结束总线
return
(1);
}
//********************液晶屏使能*********************
voidEnable_LCD_write()
{
LCD_data|=(1<<(3-1));//E=1;
Write_Random_Address_Byte(0x40,LCD_data);
delay_nus
(2);
LCD_data&=~(1<<(3-1));//E=0;
Write_Random_Address_Byte(0x40,LCD_data);
}
//*************写命令****************************
voidLCD_write_command(unsignedcharcommand)
{
delay_nus(16);
LCD_data&=~(1<<(1-1));//RS=0;
LCD_data&=~(1<<(2-1));//RW=0;
Write_Random_Address_Byte(0x40,LCD_data);
LCD_data&=0X0f;//清高四位
LCD_data|=command&0xf0;//写高四位
Write_Random_Address_Byte(0x40,LCD_data);
Enable_LCD_write();
command=command<<4;//低四位移到高四位
LCD_data&=0x0f;//清高四位
LCD_data|=command&0xf0;//写低四位
Write_Random_Address_Byte(0x40,LCD_data);
Enable_LCD_write();
}
//*************写数据****************************
voidLCD_write_data(unsignedcharvalue)
{
delay_nus(16);
LCD_data|=(1<<(1-1));//RS=1;
LCD_data&=~(1<<(2-1));//RW=0;
Write_Random_Address_Byte(0x40,LCD_data);
LCD_data&=0X0f;//清高四位
LCD_data|=value&0xf0;//写高四位
Write_Random_Address_Byte(0x40,LCD_data);
Enable_LCD_write();
value=value<<4;//低四位移到高四位
LCD_data&=0x0f;//清高四位
LCD_data|=value&0xf0;//写低四位
Write_Random_Address_Byte(0x40,LCD_data);
Enable_LCD_write();
}
//**********************设置显示位置*********************************
voidset_position(unsignedcharx,unsignedchary)
{
unsignedcharposition;
if(y==0)
position=0x80+x;
else
position=0xc0+x;
LCD_write_command(position);
}
//**********************显示字符串*****************************
voiddisplay_string(unsignedcharx,unsignedchary,unsignedchar*s)
{
set_position(x,y);
while(*s)
{
LCD_write_data(*s);
s++;
}
}
//*************液晶初始化****************************
voidLCD_init(void)
{
LCD_write_command(0x28);
delay_nus(40);
LCD_write_command(0x28);
delay_nus(40);
Enable_LCD_write();
delay_nus(40);
LCD_write_command(0x28);//4位显示!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
LCD_write_command(0x0c);//显示开
LCD_write_command(0x01);//清屏
delay_nms
(2);
}
voidmain(void)
{
LCD_init();
display_string(4,0,"imxuheng");//显示一段文字
display_string(2,1,"HelloToday!
");//显示一段文字
while
(1);
}
程序还不够完美,自身工作与电学没什么关系,只是业余爱好鼓捣鼓捣,希望各位能够提出修改意见。