iiczongxian.c

来自「C51 程序练习」· C语言 代码 · 共 107 行

C
107
字号
#include <reg52.h>
#define uchar unsigned char
sbit sda=P2^1;
sbit scl=P2^0;
void delay()
{;;}//空语句5ms左右
void star()
{
	sda=1;
	delay();
	scl=1;
	delay();
	sda=0;
	delay();//起始信号
}
void stop()
{
	sda=0;
	delay();
	scl=1;
	delay();
	sda=1;
	delay();//停止信号
}
void respons()//应答信号
{
	uchar i;
	scl=1;
	delay();
	while((sda==1)&(i<250))i++;
	scl=0;
	delay();
}
void init()
{
	sda=1;
	scl=1;
}
void write_byte(uchar date)//写入字节
{
	uchar i,temp;
	temp=date;
	for(i=0;i<8;i++)//8次
		{
			temp=temp<<1;//左移一位
			scl=0;
			delay();
			sda=CY;
			delay();
			scl=1;
			delay();
			
		}
	scl=0;
	delay();
	sda=1;//总线释放
	delay();
}
uchar read_byte()
{
	uchar i,j,k;
	scl=0;
	delay();
	sda=1;
	delay();
	for(i=0;i<0;i++)
	{
		scl=1;
		delay();
		if(sda==1)
			j=1;
		else
			j=0;
		k=(k<<1)|j;//l左移一位与j或运算
		scl=0;
		delay();
		
	}
	delay();
	return k;
}
void main()
{
	init();//初始化拉高
	star();//起始
	write_byte(0xa0);//器件地址写入1010 000 0器件地址
	respons();//应答
	write_byte(3);//地址数据
	respons();//应答
	write_byte(0xfe);//写数据
	respons();
	stop();

	star();
	write_byte(0xa0);
	respons();
	write_byte(3);
	respons();
	star();
	write_byte(0xa1);//读
	respons();
	P1=read_byte();//读数据
	stop();
	while(1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?