当前位置: 首页 > news >正文

邯郸哪有做网站的公司ie兼容所有网站

邯郸哪有做网站的公司,ie兼容所有网站,厦门网站建设商家,微网站建设企划书目录 🎁I2C总线 ​编辑 🎁代码 🏳️‍🌈main.c 🏳️‍🌈i2.c 🎆代码分析 🎁I2C总线 I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距…

目录

🎁I2C总线

​编辑

🎁代码

🏳️‍🌈main.c

🏳️‍🌈i2.c

🎆代码分析


🎁I2C总线

I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化了PCB布线,降低了系统成本,提高了系统可靠性,因此在各个领域得到了广泛应用。
 

 

🎁代码

🏳️‍🌈main.c

/**************************************************************************************
*		              EEPROM-IIC实验												  *
实现现象:下载程序后数码管后4位显示0,按K1保存显示的数据,按K2读取上次保存的数据,按K3显示数据加一,按K4显示数据清零。最大能写入的数据是255.注意事项:由于P3.2口跟红外线共用,所以做按键实验时为了不让红外线影响实验效果,最好把红外线先取下来。																				  
***************************************************************************************/#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
#include "i2c.h"	typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;	 //定义按键端口char num=0;
u8 disp[4];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{while(i--);	
}/*******************************************************************************
* 函数名         :Keypros()
* 函数功能		 :按键处理函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void Keypros()
{if(k1==0){delay(1000);  //消抖处理if(k1==0){At24c02Write(1,num);   //在地址1内写入数据num}while(!k1);}if(k2==0){delay(1000);  //消抖处理if(k2==0){num=At24c02Read(1);	  //读取EEPROM地址1内的数据  保存  在num中}while(!k2);}if(k3==0){delay(100);  //消抖处理if(k3==0){num++;	   //数据   加1if(num>255)num=0;}while(!k3);}if(k4==0){delay(1000);  //消抖处理if(k4==0){num=0;		 //数据   清零}while(!k4);}		
}/*******************************************************************************
* 函数名         :datapros()
* 函数功能		 :数据处理函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void datapros()
{disp[0]=smgduan[num/1000];//千位disp[1]=smgduan[num%1000/100];//百位disp[2]=smgduan[num%1000%100/10];//个位disp[3]=smgduan[num%1000%100%10];		
}/*******************************************************************************
* 函数名         :DigDisplay()
* 函数功能		 :数码管显示函数
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/
void DigDisplay()
{u8 i;for(i=0;i<4;i++){switch(i)	 //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0; break;//显示第0位case(1):LSA=1;LSB=0;LSC=0; break;//显示第1位case(2):LSA=0;LSB=1;LSC=0; break;//显示第2位case(3):LSA=1;LSB=1;LSC=0; break;//显示第3位	}P0=disp[i];//发送数据delay(100); //间隔一段时间扫描	P0=0x00;//消隐}		
}/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	while(1){Keypros();	 //按键处理函数datapros();	 //数据处理函数DigDisplay();//数码管显示函数		}		
}

🏳️‍🌈i2.c

#include"i2c.h"/*******************************************************************************
* 函数名         : Delay10us()
* 函数功能		   : 延时10us
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/void Delay10us()
{unsigned char a,b;for(b=1;b>0;b--)for(a=2;a>0;a--);}
/*******************************************************************************
* 函数名         : I2cStart()
* 函数功能		 : 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 起始之后SDA和SCL都为0
*******************************************************************************/void I2cStart()
{SDA=1;Delay10us();SCL=1;Delay10us();//建立时间是SDA保持时间>4.7usSDA=0;Delay10us();//保持时间是>4usSCL=0;			Delay10us();		
}
/*******************************************************************************
* 函数名         : I2cStop()
* 函数功能		 : 终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿
* 输入           : 无
* 输出         	 : 无
* 备注           : 结束之后保持SDA和SCL都为1;表示总线空闲
*******************************************************************************/void I2cStop()
{SDA=0;Delay10us();SCL=1;Delay10us();//建立时间大于4.7usSDA=1;Delay10us();		
}
/*******************************************************************************
* 函数名         : I2cSendByte(unsigned char dat)
* 函数功能		 : 通过I2C发送一个字节。在SCL时钟信号高电平期间,保持发送信号SDA保持稳定
* 输入           : num
* 输出         	 : 0或1。发送成功返回1,发送失败返回0
* 备注           : 发送完一个字节SCL=0,SDA=1
*******************************************************************************/unsigned char I2cSendByte(unsigned char dat)
{unsigned char a=0,b=0;//最大255,一个机器周期为1us,最大延时255us。		for(a=0;a<8;a++)//要发送8位,从最高位开始{SDA=dat>>7;	 //起始信号之后SCL=0,所以可以直接改变SDA信号dat=dat<<1;Delay10us();SCL=1;Delay10us();//建立时间>4.7usSCL=0;Delay10us();//时间大于4us		}SDA=1;Delay10us();SCL=1;while(SDA)//等待应答,也就是等待从设备把SDA拉低{b++;if(b>200)	 //如果超过2000us没有应答发送失败,或者为非应答,表示接收结束{SCL=0;Delay10us();return 0;}}SCL=0;Delay10us();return 1;		
}
/*******************************************************************************
* 函数名         : I2cReadByte()
* 函数功能		   : 使用I2c读取一个字节
* 输入           : 无
* 输出         	 : dat
* 备注           : 接收完一个字节SCL=0,SDA=1.
*******************************************************************************/unsigned char I2cReadByte()
{unsigned char a=0,dat=0;SDA=1;			//起始和发送一个字节之后SCL都是0Delay10us();for(a=0;a<8;a++)//接收8个字节{SCL=1;Delay10us();dat<<=1;dat|=SDA;//由低位开始存Delay10us();SCL=0;Delay10us();}return dat;		
}/*******************************************************************************
* 函数名         : void At24c02Write(unsigned char addr,unsigned char dat)
* 函数功能		   : 往24c02的一个地址写入一个数据
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/void At24c02Write(unsigned char addr,unsigned char dat)
{I2cStart();I2cSendByte(0xa0);//发送写器件地址   0为写  1为读I2cSendByte(addr);//发送要写入内存地址I2cSendByte(dat);	//发送数据I2cStop();
}
/*******************************************************************************
* 函数名         : unsigned char At24c02Read(unsigned char addr)
* 函数功能		   : 读取24c02的一个地址的一个数据
* 输入           : 无
* 输出         	 : 无
*******************************************************************************/unsigned char At24c02Read(unsigned char addr)
{unsigned char num;I2cStart();I2cSendByte(0xa0); //发送写器件地址I2cSendByte(addr); //发送要读取的地址I2cStart();I2cSendByte(0xa1); //发送读器件地址num=I2cReadByte(); //读取数据I2cStop();return num;	
}

🎆代码分析

void At24c02Write(unsigned char addr,unsigned char dat)
{
    I2cStart();
    I2cSendByte(0xa0);//发送写器件地址   0为写  1为读
    I2cSendByte(addr);//发送要写入内存地址
    I2cSendByte(dat);    //发送数据
    I2cStop();
}

如下图所示,器件地址的高四位是固定的(是0x) 下面三位接了地,为0,

最后一位如果是0,那么为写,如果是1,那么为读


 unsigned char At24c02Read(unsigned char addr)
{
    unsigned char num;
    I2cStart();
    I2cSendByte(0xa0); //发送写器件地址
    I2cSendByte(addr); //发送要读取的地址
    I2cStart();
    I2cSendByte(0xa1); //发送读器件地址
    num=I2cReadByte(); //读取数据
    I2cStop();
    return num;    
}

代码At24c02Read(1);   传入了1作为At24c02Read(unsigned char addr)的参数addr

addr进入 At24c02Read()函数后作为I2cSendByte(addr);//发送要写入内存地址

为什么addr是一个十进制的数,但是可以作为地址呢

AT24C02 EEPROM 芯片支持 8 位地址编址,其中低 5 位用于指示要读写的具体存储单元。因此,addr 参数可以设置为 1,对应的二进制数是 0000 0001

 

http://www.yayakq.cn/news/377299/

相关文章:

  • 天津的网站建设公司哪家好建网站哪家好北京
  • php语言网站开发网站下拉单设计欣赏
  • 做网站百度收录泛微oa办公系统网页版
  • 邢台哪儿做网站便宜个人小程序制作流程
  • 网站建设点击打开指定网页房地产网站做百度推广
  • 我们网站百度快照显示违规内容广州网站建设 易点
  • 创建公司需要什么杭州seo关键词优化哪家好
  • 营销单页网站制作微信分销网站建设费用
  • 政务网站建设云计算中心无人视频在线观看免费播放影院
  • 牡丹区建设局网站世界新闻最新消息
  • 集团网站建设新闻网站开发 高职课本
  • 电脑上怎样进入中国建设银行网站怎么用手机创造网站
  • 网站建设捌金手指花总二七安徽道遂建设工程有限公司网站
  • 影视主题wordpress湖州网站seo优化
  • 门户网站建设分工的通知ai做漫画头像网站
  • 没有做网站经验可以学seo吗网站vps无法登陆
  • 广州哪里可以做网站网站建设及维护 东营
  • 深圳公明网站建设公司营销型网站建设制作推广
  • 站长号查询入口站长工具如何在手机上学编程
  • 衡水网站制美团如何进行网站的建设和维护
  • 怎样网站设计成都市公园城市建设管理局网站
  • 更改网站伪静态稳赚导师免费赚钱微信号
  • 多终端网站网页广告素材
  • 蓬莱网站建设哪家好wordpress 上传到域名
  • 腾讯云域名备案需要提供网站建设方案书哪家网站专门做折扣销售
  • 如何 套用模板做网站wordpress百度地图插件下载
  • 如何用本地视频做网站长沙岳麓区房价新楼盘房价
  • 做一个网站需要多少钱 怎么做中国知名网站排行榜
  • 网站建设公司怎么开wordpress多语言版本号
  • 钱网站制作sgs网站开发公司