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

有什么做设计的兼职网站网站开发 私活

有什么做设计的兼职网站,网站开发 私活,建设企业网站的需求分析,深圳做微网站IIC简介 I2C(IIC,Inter#xff0d;Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线#xff0c;可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送#xff0c;高速IIC总线一般可达…IIC简介 I2C(IIC,InterIntegrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送高速IIC总线一般可达400kbps以上。 IIC是半双工通信方式。 多主机I2C总线系统结构 I2C协议 空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态即释放总线由两条信号线各自的上拉电阻把电平拉高。 开始信号 起始信号当SCL为高期间SDA由高到低的跳变启动信号是一种电平跳变时序信号而不是一个电平信号。 停止信号 停止信号当SCL为高期间SDA由低到高的跳变停止信号也是一种电平跳变时序信号而不是一个电平信号。 应答信号 发送器每发送一个字节就在时钟脉冲9期间释放数据线由接收器反馈一个应答信号。 应答信号为低电平时规定为有效应答位ACK简称应答位表示接收器已经成功地接收了该字节应答信号为高电平时规定为非应答位NACK一般表示接收器接收该字节没有成功。 对于反馈有效应答位ACK的要求是接收器在第9个时钟脉冲之前的低电平期间将SDA线拉低并且确保在该时钟的高电平期间为稳定的低电平。 如果接收器是主控器则在它收到最后一个字节后发送一个NACK信号以通知被控发送器结束数据发送并释放SDA线以便主控接收器发送一个停止信号P。 数据的有效性 I2C总线进行数据传送时时钟信号为高电平期间数据线上的数据必须保持稳定只有在时钟线上的信号为低电平期间数据线上的高电平或低电平状态才允许变化。 即数据在SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。 数据传输  在I2C总线上传送的每一位数据都有一个时钟脉冲相对应或同步控制即在SCL串行时钟的配合下在SDA上逐位地串行传送每一位数据。数据位的传输是边沿触发。 EEPROM(24C02 总容量是2562K/8)个字节。 接口IIC 正点原子开发板 在硬件上设置了 A0A1A20 如果A2A1A00; 那么: 读的时候 Device Address0xA1 写的时候 Device Address0xA0 24C02字节写时序 24C02读时序 myiic.h #ifndef __MYIIC_H #define __MYIIC_H #include sys.h //IO方向设置 #define SDA_IN() {GPIOB-MODER~(3(9*2));GPIOB-MODER|09*2;} //PB9输入模式 #define SDA_OUT() {GPIOB-MODER~(3(9*2));GPIOB-MODER|19*2;} //PB9输出模式 //IO操作函数 #define IIC_SCL PBout(8) //SCL #define IIC_SDA PBout(9) //SDA #define READ_SDA PBin(9) //输入SDA //IIC所有操作函数 void IIC_Init(void); //初始化IIC的IO口 void IIC_Start(void); //发送IIC开始信号 void IIC_Stop(void); //发送IIC停止信号 void IIC_Send_Byte(u8 txd); //IIC发送一个字节 u8 IIC_Read_Byte(unsigned char ack);//IIC读取一个字节 u8 IIC_Wait_Ack(void); //IIC等待ACK信号 void IIC_Ack(void); //IIC发送ACK信号 void IIC_NAck(void); //IIC不发送ACK信号void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data); u8 IIC_Read_One_Byte(u8 daddr,u8 addr); #endif myiic.c #include myiic.h #include delay.h//初始化IIC void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟//GPIOB8,B9初始化设置GPIO_InitStructure.GPIO_Pin GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd GPIO_PuPd_UP;//上拉GPIO_Init(GPIOB, GPIO_InitStructure);//初始化IIC_SCL1;IIC_SDA1; } //产生IIC起始信号 void IIC_Start(void) {SDA_OUT(); //sda线输出IIC_SDA1; IIC_SCL1;delay_us(4);IIC_SDA0;//START:when CLK is high,DATA change form high to low delay_us(4);IIC_SCL0;//钳住I2C总线准备发送或接收数据 } //产生IIC停止信号 void IIC_Stop(void) {SDA_OUT();//sda线输出IIC_SCL0;IIC_SDA0;//STOP:when CLK is high DATA change form low to highdelay_us(4);IIC_SCL1; IIC_SDA1;//发送I2C总线结束信号delay_us(4); } //等待应答信号到来 //返回值1接收应答失败 // 0接收应答成功 u8 IIC_Wait_Ack(void) {u8 ucErrTime0;SDA_IN(); //SDA设置为输入 IIC_SDA1;delay_us(1); IIC_SCL1;delay_us(1); while(READ_SDA){ucErrTime;if(ucErrTime250){IIC_Stop();return 1;}}IIC_SCL0;//时钟输出0 return 0; } //产生ACK应答 void IIC_Ack(void) {IIC_SCL0;SDA_OUT();IIC_SDA0;delay_us(2);IIC_SCL1;delay_us(2);IIC_SCL0; } //不产生ACK应答 void IIC_NAck(void) {IIC_SCL0;SDA_OUT();IIC_SDA1;delay_us(2);IIC_SCL1;delay_us(2);IIC_SCL0; } //IIC发送一个字节 //返回从机有无应答 //1有应答 //0无应答 void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL0;//拉低时钟开始数据传输for(t0;t8;t){ IIC_SDA(txd0x80)7;txd1; delay_us(2); //对TEA5767这三个延时都是必须的IIC_SCL1;delay_us(2); IIC_SCL0; delay_us(2);} } //读1个字节ack1时发送ACKack0发送nACK u8 IIC_Read_Byte(unsigned char ack) {unsigned char i,receive0;SDA_IN();//SDA设置为输入for(i0;i8;i ){IIC_SCL0; delay_us(2);IIC_SCL1;receive1;if(READ_SDA)receive; delay_us(1); } if (!ack)IIC_NAck();//发送nACKelseIIC_Ack(); //发送ACK return receive; } 24cxx.h #ifndef __24CXX_H #define __24CXX_H #include myiic.h #define AT24C01 127 #define AT24C02 255 #define AT24C04 511 #define AT24C08 1023 #define AT24C16 2047 #define AT24C32 4095 #define AT24C64 8191 #define AT24C128 16383 #define AT24C256 32767 //Mini STM32开发板使用的是24c02所以定义EE_TYPE为AT24C02 #define EE_TYPE AT24C02u8 AT24CXX_ReadOneByte(u16 ReadAddr); //指定地址读取一个字节 void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite); //指定地址写入一个字节 void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len);//指定地址开始写入指定长度的数据 u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len); //指定地址开始读取指定长度数据 void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite); //从指定地址开始写入指定长度的数据 void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead); //从指定地址开始读出指定长度的数据u8 AT24CXX_Check(void); //检查器件 void AT24CXX_Init(void); //初始化IIC #endif 24cxx.c #include 24cxx.h #include delay.h //初始化IIC接口 void AT24CXX_Init(void) {IIC_Init();//IIC初始化 } //在AT24CXX指定地址读出一个数据 //ReadAddr:开始读数的地址 //返回值 :读到的数据 u8 AT24CXX_ReadOneByte(u16 ReadAddr) { u8 temp0; IIC_Start(); if(EE_TYPEAT24C16){IIC_Send_Byte(0XA0); //发送写命令IIC_Wait_Ack();IIC_Send_Byte(ReadAddr8);//发送高地址 }else IIC_Send_Byte(0XA0((ReadAddr/256)1)); //发送器件地址0XA0,写数据 IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr%256); //发送低地址IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(0XA1); //进入接收模式 IIC_Wait_Ack(); tempIIC_Read_Byte(0); IIC_Stop();//产生一个停止条件 return temp; } //在AT24CXX指定地址写入一个数据 //WriteAddr :写入数据的目的地址 //DataToWrite:要写入的数据 void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite) { IIC_Start(); if(EE_TYPEAT24C16){IIC_Send_Byte(0XA0); //发送写命令IIC_Wait_Ack();IIC_Send_Byte(WriteAddr8);//发送高地址 }else IIC_Send_Byte(0XA0((WriteAddr/256)1)); //发送器件地址0XA0,写数据 IIC_Wait_Ack(); IIC_Send_Byte(WriteAddr%256); //发送低地址IIC_Wait_Ack(); IIC_Send_Byte(DataToWrite); //发送字节 IIC_Wait_Ack(); IIC_Stop();//产生一个停止条件 delay_ms(10); } //在AT24CXX里面的指定地址开始写入长度为Len的数据 //该函数用于写入16bit或者32bit的数据. //WriteAddr :开始写入的地址 //DataToWrite:数据数组首地址 //Len :要写入数据的长度2,4 void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len) { u8 t;for(t0;tLen;t){AT24CXX_WriteOneByte(WriteAddrt,(DataToWrite(8*t))0xff);} }//在AT24CXX里面的指定地址开始读出长度为Len的数据 //该函数用于读出16bit或者32bit的数据. //ReadAddr :开始读出的地址 //返回值 :数据 //Len :要读出数据的长度2,4 u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len) { u8 t;u32 temp0;for(t0;tLen;t){temp8;tempAT24CXX_ReadOneByte(ReadAddrLen-t-1); }return temp; } //检查AT24CXX是否正常 //这里用了24XX的最后一个地址(255)来存储标志字. //如果用其他24C系列,这个地址要修改 //返回1:检测失败 //返回0:检测成功 u8 AT24CXX_Check(void) {u8 temp;tempAT24CXX_ReadOneByte(255);//避免每次开机都写AT24CXX if(temp0X55)return 0; else//排除第一次初始化的情况{AT24CXX_WriteOneByte(255,0X55);tempAT24CXX_ReadOneByte(255); if(temp0X55)return 0;}return 1; }//在AT24CXX里面的指定地址开始读出指定个数的数据 //ReadAddr :开始读出的地址 对24c02为0~255 //pBuffer :数据数组首地址 //NumToRead:要读出数据的个数 void AT24CXX_Read(u16 ReadAddr,u8 *pBuffer,u16 NumToRead) {while(NumToRead){*pBufferAT24CXX_ReadOneByte(ReadAddr); NumToRead--;} } //在AT24CXX里面的指定地址开始写入指定个数的数据 //WriteAddr :开始写入的地址 对24c02为0~255 //pBuffer :数据数组首地址 //NumToWrite:要写入数据的个数 void AT24CXX_Write(u16 WriteAddr,u8 *pBuffer,u16 NumToWrite) {while(NumToWrite--){AT24CXX_WriteOneByte(WriteAddr,*pBuffer);WriteAddr;pBuffer;} } main.c #include sys.h #include delay.h #include usart.h #include led.h #include lcd.h #include 24cxx.h #include key.h //要写入到24c02的字符串数组 const u8 TEXT_Buffer[]{Explorer STM32F4 IIC TEST}; #define SIZE sizeof(TEXT_Buffer) int main(void) { u8 key;u16 i0;u8 datatemp[SIZE]; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168); //初始化延时函数uart_init(115200); //初始化串口波特率为115200LED_Init(); //初始化LED LCD_Init(); //LCD初始化 KEY_Init(); //按键初始化 AT24CXX_Init(); //IIC初始化 POINT_COLORRED; LCD_ShowString(30,50,200,16,16,Explorer STM32F4); LCD_ShowString(30,70,200,16,16,IIC TEST); LCD_ShowString(30,90,200,16,16,ATOMALIENTEK);LCD_ShowString(30,110,200,16,16,2023/11/30); LCD_ShowString(30,130,200,16,16,KEY1:Write KEY0:Read); //显示提示信息 while(AT24CXX_Check())//检测不到24c02{LCD_ShowString(30,150,200,16,16,24C02 Check Failed!);delay_ms(500);LCD_ShowString(30,150,200,16,16,Please Check! );delay_ms(500);LED0!LED0;//DS0闪烁}LCD_ShowString(30,150,200,16,16,24C02 Ready!); POINT_COLORBLUE;//设置字体为蓝色 while(1){keyKEY_Scan(0);if(keyKEY1_PRES)//KEY1按下,写入24C02{LCD_Fill(0,170,239,319,WHITE);//清除半屏 LCD_ShowString(30,170,200,16,16,Start Write 24C02....);AT24CXX_Write(0,(u8*)TEXT_Buffer,SIZE);LCD_ShowString(30,170,200,16,16,24C02 Write Finished!);//提示传送完成}if(keyKEY0_PRES)//KEY0按下,读取字符串并显示{LCD_ShowString(30,170,200,16,16,Start Read 24C02.... );AT24CXX_Read(0,datatemp,SIZE);LCD_ShowString(30,170,200,16,16,The Data Readed Is: );//提示传送完成LCD_ShowString(30,190,200,16,16,datatemp);//显示读到的字符串}i;delay_ms(10);if(i20){LED0!LED0;//提示系统正在运行 i0;} } } 实验效果 说明先按下KEY0查看EEPROM所存内容再按下KEY1写入新内容最后再次按下KEY0查看内容是否变更为所写新内容 IIC实验效果
http://www.pierceye.com/news/429035/

相关文章:

  • 外贸网站的公司介绍响应式布局代码例子
  • 校园网站的意义保定建设厅网站
  • 网站域名注册后怎么打开网站ip安装wordpress
  • 山西太原做网站网站开发上线流程
  • 江门网站建设多少钱网页服务器一年多少钱
  • 网站开发属于什么行业农商网站建设个人总结
  • 网站建设业务开展方案昆明市城市基本建设档案馆网站
  • 湖南网站托管做招聘网站排名
  • 主机屋免费网站空间网站建设安全标准
  • .net cms网站管理系统生态养殖网站模板
  • 国外网站一般公司网站是什么设计师做
  • 备案停止网站网站建设研究课题
  • 个人网站开发是学什么语言网站建设 总体思路
  • 网站怎么留住用户在什么地方可以接到做网站的活
  • jsp页面如何做网站pv统计wordpress4.7.10
  • 澄海网站建设用asp做网站怎么美观
  • 未满18岁能申请网站备案吗网站做qq链接
  • 网络公司网站开发互联网技术专业学什么
  • 校园网站建设详细的设计方案php网站开发实战
  • 网站设计广州量计价格网站可信度建设
  • 门业网站 源码做企业网站必须要座机吗
  • 广东网站开发推荐wordpress快速加载
  • php网站开发外包北京网站建设迈程网络
  • 微信开发者平台取消授权seo资源网站排名
  • 将网站源码下载下来如何使用网站seo链接购买
  • 可信网站认证必须做苏州那里可以建网站
  • 手机网站底部代码有名的网站建设
  • 做一个网站需要多长时间网站制作有哪些种类
  • 做微信推送的网站小刘网站建设
  • 18款禁用软件app网站入口台州网站推广排名