{
I2C_SDA = ACK
I2C_SCL = 1
while(I2C_SCL == 0) // Synchronize clock
delay4us()
I2C_SCL = 0
}
i2c有现成的库,你在lcd的网站上或者是单片机网上可以下到,然后按照lcd的pdf对它初始话,我给个简单的几个函数,可以实现初始化下面3个就是lcd的初始化配置,下面3个函数是找到的i2c库代码,你按照这个lcd的pdf进行对应的修改就行
#define pcf8576 0x70
ISendByte(pcf8576,0x48) //设置背级方式
ISendByte(pcf8576,0x70) //设置闪烁
ISendByte(pcf8576,0x60) //设置器件子地址
你可以把lcd当成一个接口,向这个接口地址发送数据就可以让它进行对应的 *** 作,这个是我写过的lcd显示模块,pcf8576是lcd的地址,这个你可以在lcd的pdf里找到
显示的话,就是向对应的lcd寄存器写入数据,比如要显示第一个数字,就是将lcd的显示数据里修改,然后发送显示数据到lcd的对应寄存器里,下面的lcdnum就是8576的显示数据数组
void Refresh_LCD()
{
ISendByte(pcf8576,0x60)
ISendStr(pcf8576,0x00,lcdnum,9)
}
void Start_I2c()
{
SDA=1 /*发送起始条件的数据信号*/
_Nop()
SCL=1
_Nop() /*起始条件建立时间大于4.7us,延时*/
_Nop()
_Nop()
_Nop()
_Nop()
SDA=0 /*发送起始信号*/
_Nop() /* 起始条件锁定时间大于4μs*/
_Nop()
_Nop()
_Nop()
_Nop()
SCL=0 /*钳住I2C总线,准备发送或接收数据 */
_Nop()
_Nop()
}
/*******************************************************************
结束总线函数
函数原型: void Stop_I2c()
功能: 结束I2C总线,即发送I2C结束条件.
********************************************************************/
void Stop_I2c()
{
SDA=0 /*发送结束条件的数据信号*/
_Nop() /*发送结束条件的时钟信号*/
SCL=1 /*结束条件建立时间大于4μs*/
_Nop()
_Nop()
_Nop()
_Nop()
_Nop()
SDA=1 /*发送I2C总线结束信号*/
_Nop()
_Nop()
_Nop()
_Nop()
}
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c() /*启动总线*/
SendByte(sla) /*发送器件地址*/
if(ack==0)
return(0)
SendByte(c) /*发送数据*/
if(ack==0)
return(0)
Stop_I2c()/*结束总线*/
return(1)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)