📄 i2c.txt
字号:
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
/***********************************************************************/
void I2C_write_byte(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
/***********************************************************************/
unsigned char I2C_read_byte(void)
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte ((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
/************************************************************************/
void AT24C02_write(unsigned char address,unsigned char
*buf,unsigned char Nbyte)
{
I2C_start();
I2C_write_byte(WRITE24C02);
TestAck();
I2C_write_byte(address);
TestAck();
for(;Nbyte!=0;Nbyte--)
{
I2C_write_byte(*buf);
TestAck();
buf++;
}
I2C_stop();
delay_ms(10);//在每个函数之间加延时
}
/************************************************************************/
void AT24C02_read(unsigned char address,unsigned char
*buf,unsigned char Nbyte)
{
I2C_start();
I2C_write_byte(WRITE24C02);
TestAck();
I2C_write_byte(address);
TestAck();
I2C_start();
I2C_write_byte(READ24C02);
TestAck();
while(Nbyte!=1)
{
*buf=I2C_read_byte();
I2C_send_ack();
buf++;
Nbyte--;
}
*buf=I2C_read_byte();
I2C_send_noack();
I2C_stop();
}
/**************LCD1602的初始化***************************/
void LCD_init(void)
{
LCD_send_command(LCD_DISPLAY_DOUBLE_LINE);
LCD_send_command(LCD_AC_AUTO_INCREMENT LCD_MOVE_DISENABLE);
LCD_send_command(LCD_DISPLAY_ON LCD_CURSOR_OFF);
LCD_send_command(LCD_CLEAR_SCREEN);
}
/***********************检测LCD状态*********************************/
void LCD_check_busy(void)
{
do
{
LCD_EN=0;
LCD_RS=0;
LCD_RW=1;
LCDIO=0xff;
LCD_EN=1;
}
while(LCD_BUSY==1);
LCD_EN=0;
}
/************LCD1602写命令*******************************/
void LCD_send_command(uchar command)
{
LCD_check_busy();
LCD_RS=LOW;
LCD_RW=LOW;
LCD_EN=HIGH;
LCDIO=command;
LCD_EN=LOW;
}
/********************************************************/
/*****************LCD1602写数据**************************/
void LCD_send_data(uchar dat)
{
LCD_check_busy();
LCD_RS=HIGH;
LCD_RW=LOW;
LCD_EN=HIGH;
LCDIO=dat;
LCD_EN=LOW;
}
/***********************LCD1602显示字符*********************************/
void LCD_write_char(uchar x,uchar y,uchar dat)
{
unsigned char address;
if (y == LINE1)
address = LINE1_HEAD + x;
else
address = LINE2_HEAD + x;
LCD_send_command(address);
LCD_send_data(dat);
}
/******************LCD1602显示字符串*********************/
void LCD_write_string(uchar x,uchar y,uchar *Data)
{
if(y==LINE1)
{
if(x<LINE_LENGTH)
{
LCD_send_command(LINE1_HEAD+x);
for(;x<LINE_LENGTH&&*Data!=''''\0'''';x++)
{
LCD_send_data(*(Data++));
}
if(*Data!=''''\0'''')
{
x=0;
y=LINE2;
}
}
}
if(y==LINE2)
{
LCD_send_command(LINE2_HEAD+x);
for(;x<LINE_LENGTH&&*Data!=''''\0'''';x++)
{
LCD_send_data(*(Data++));
}
}
}
/****************************************************************/
/********************延时函数***********************************/
/***************************************************************/
void delay_ms(uint n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=0;j<1140;j++)
;
}
/*********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -