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

html5的网站软件开发工具的范围是什么

html5的网站,软件开发工具的范围是什么,丝绸之路网站建设意义,如何提高网站打开速度目录 AT24C02数据存储 准备工作 代码讲解 I2C.c 模拟起始位置的时序 模拟发送一个字节的时序 模拟接收应答的时序 模拟接收一个字节的时序 模拟发送应答的时序 模拟结束位置的时序 I2C.h AT24C02.c 字节写#xff1a;在WORD ADDRESS#xff08;字地址#xff…目录 AT24C02数据存储 准备工作 代码讲解 I2C.c 模拟起始位置的时序 模拟发送一个字节的时序 模拟接收应答的时序 模拟接收一个字节的时序 模拟发送应答的时序 模拟结束位置的时序 I2C.h  AT24C02.c 字节写在WORD ADDRESS字地址处写入数据DATA 随机读读出在WORD ADDRESS处的数据DATA AT24C02.h main.c 上一节讲了AT24C02和I2C相关的工作原理这一节开始代码演示 准备工作 新创建一个工程AT24C02数据存储 把要用到的程序模块添加进来这些程序模块都是我前面的博客里演示过的了 然后新建文件main.c,  AT24C02.c,  AT24C02.h, I2C.c, I2C.h 代码讲解 接下来就开始代码讲解 I2C.c 首先我们先写I2C.c 在这个文件里面我们是按照上一篇博客所讲的各部分时序来逐个定义函数函数体的内容就是模拟每一部分时序写的。 首先我们得根据原理图重新定义一下引脚 #include REGX52.Hsbit I2C_SCLP2^1;//将P2^1重命名为I2C_SCL sbit I2C_SDAP2^0;//将P2^0重命名为I2C_SDA 模拟起始位置的时序 void I2C_Start(void) {I2C_SDA1;I2C_SCL1;I2C_SDA0;//SCL高电平期间SDA从高电平切换到低电平I2C_SCL0; } 模拟发送一个字节的时序 void I2C_SendByte(unsigned char Byte) {unsigned char i;for(i0;i8;i)//一个字节循环8次发送8位数据{//SCL低电平期间主机将数据位依次放到SDA线上高位在前I2C_SDAByte(0x80i);//从最高位开始取出依次右移一位直到取到最低位I2C_SCL1;//然后拉高SCL从机将在SCL高电平期间读取数据位I2C_SCL0;//发送完一个字节后拉低SCL下降沿} } 注意SCL当VCC等于5V的情况下是1000kHz1MHz而我们单片机的IO口翻转一次最快也就1微秒大于0.4微秒就是500Hz由此可见它的频率比IO口翻转一次的频率还要快所以即使我们拉高SCL立马又拉低也不会影响它的最大时钟它也能很快读取到数据。 模拟接收应答的时序 unsigned char I2C_ReceiveAck(void) {unsigned char AckBit;I2C_SDA1;//主机接收应答之前先把SDA拉高I2C_SCL1;//在SCL位高电平时主机检测从机是否应答//接下来我们不管从机的时序是怎么变化的//所以这里我们没有在代码中体现从机是拉低了SDA还是默认SDA就是高电平//我们的单片机是主机24C02是从机。//主机和从机的程序是不一样的我们只写主机从机是主动检测的//从机读取数据的时候是程序自动完成的//我们只需要把主机的时序模拟出来就好了。AckBitI2C_SDA;//主机接收从机的应答//如果从机不想应答或者从机不存在就默认SDA还是高电平//从机应答的话就拉低了SDA赋值给AckBitI2C_SCL0;return AckBit; } 模拟接收一个字节的时序 上图SDA紫色部分就是从机控制总线的时候 unsigned char I2C_ReceiveByte(void) {unsigned char i,Byte0x00;I2C_SDA1;//接收之前把SDA释放for(i0;i8;i)//一个字节循环8次读取8位数据{//SCL低电平期间从机将数据位依次放到SDA线上高位在前I2C_SCL1;//然后拉高SCL主机将在SCL高电平期间读取数据位if(I2C_SDA){Byte|(0x80i);}//从最高位开始读依次右移一位直到读到最低位I2C_SCL0;}return Byte; } 模拟发送应答的时序 void I2C_SendAck(unsigned char AckBit) {I2C_SDAAckBit;//主机发送应答给从机I2C_SCL1;//SCL高电平期间从机检测主机是否应答I2C_SCL0; } 模拟结束位置的时序 void I2C_Stop(void) {I2C_SDA0;//不管主机/从机是否应答都要拉低SDA。I2C_SCL1;I2C_SDA1;//SCL高电平期间SDA从低电平切换到高电平 } I2C.h  最后在I2C.h文件中声明一下这六个函数  #ifndef __I2C_H__ #define __I2C_H__void I2C_Start(void); void I2C_Stop(void); void I2C_SendByte(unsigned char Byte); unsigned char I2C_ReceiveByte(void); void I2C_SendAck(unsigned char AckBit); unsigned char I2C_ReceiveAck(void);#endifAT24C02.c 接下来写AT24C02.c AT24C02.c的内容主要是按我上一篇博客讲过的这个流程图来逐个调用I2C.c中的六个函数 字节写在WORD ADDRESS字地址处写入数据DATA 随机读读出在WORD ADDRESS处的数据DATA这其实是一种复合格式 上一篇博客我写过AT24C02的固定地址为1010可配置地址本开发板上为000所以从机的写地址SLAVE ADDRESSW为0xA0从机的读地址SLAVE ADDRESSR为0xA1 所以我们可以先重定义从机的写地址将从机的写地址重定义为AT24C02_ADDRESS然后从机的读地址我们到时候直接给字节的最低位置1就可以了 从机的写地址0xA0AT24C02_ADDRESS1010 0000 从机的读地址AT24C02_ADDRESS|0x011010 0000|0000 00011010 00010xA1 #include REGX52.H #include I2C.h#define AT24C02_ADDRESS 0xA0 //将从机的写地址重定义为AT24C02_ADDRESS 字节写在WORD ADDRESS字地址处写入数据DATA 按照字节写的流程图写函数体 void AT24C02_WriteByte(unsigned char WordAddress,Data)//Data的类型和wordAddress一样 {I2C_Start();//起始位置I2C_SendByte(AT24C02_ADDRESS);//发送从机地址I2C_ReceiveAck();//接收应答I2C_SendByte(WordAddress);//发送字节地址I2C_ReceiveAck();//接收应答I2C_SendByte(Data);//发送数据I2C_ReceiveAck();//接收应答I2C_Stop();//结束位置 } 随机读读出在WORD ADDRESS处的数据DATA 按照字节写的流程图写函数体 unsigned char AT24C02_ReadByte(unsigned char WordAddress) {unsigned char Data;I2C_Start();//写的起始位置I2C_SendByte(AT24C02_ADDRESS);//发送从机地址I2C_ReceiveAck();//接收应答I2C_SendByte(WordAddress);//发送字节地址I2C_ReceiveAck();//接收应答I2C_Start();//读的起始位置I2C_SendByte(AT24C02_ADDRESS|0x01);//发送从机地址将从机的写地址的最低位置1I2C_ReceiveAck();//接收应答//前面说过从机接收了什么数据怎么接收的数据我们在代码中不体现出来//我们只写主机的程序DataI2C_ReceiveByte();//我们只要把从机里面那个指定的字节地址处的数据读出来赋值给DataI2C_SendAck(1);//读取完一个字节可以不用再应答从机I2C_Stop();//结束位置return Data;//返回读出来的数据 } AT24C02.h 声明一下这两个函数 #ifndef __AT24C02_H__ #define __AT24C02_H__void AT24C02_WriteByte(unsigned char WordAddress,Data); unsigned char AT24C02_ReadByte(unsigned char WordAddress);#endif main.c 接下来我们在主程序里实现在WORD ADDRESS字地址处写入数据DATA然后读出在WORD ADDRESS处的数据DATA最后在液晶屏上显示我们写入并读出来的数据结合独立按键的功能完成这个效果 先定义两个变量 #include REGX52.H #include LCD1602.h #include Key.h #include AT24C02.h #include Delay.hunsigned char KeyNum;//键码 unsigned int Num;//初值16位数据范围是0~65535 主程序请认真结合注释理清每一句代码的逻辑意思 void main() {LCD_Init();LCD_ShowNum(1,1,Num,5);while(1){KeyNumKey();if(KeyNum1) //K1按键Num自增{Num;//第一次就按K1的时候由0变成1LCD_ShowNum(1,1,Num,5);}if(KeyNum2) //K2按键Num自减{Num--;//第一次就按K2的时候由0变成65535LCD_ShowNum(1,1,Num,5);}if(KeyNum3) //K3按键向AT24C02写入数据{AT24C02_WriteByte(0,Num%256);//在字地址0处写入Num的低八位//%256是16进制取低8位的方法//因为Num是unsigned int型占2个字节即16位数据//所以把Num的低8位取出来写入Delay(5);//写进去不能立马读出来ROM一般要2~3ms才能写完//手册上的写周期是5ms意味着我们每次写入之后需要Delay 5msAT24C02_WriteByte(1,Num/256);在字地址1处写入Num的高八位// 或256是16进制取高8位的方法Delay(5);LCD_ShowString(2,1,Write OK);Delay(1000);//延时1000ms1sLCD_ShowString(2,1, );//第2行第1列清屏}if(KeyNum4) //K4按键从AT24C02读取数据{NumAT24C02_ReadByte(0);//低八位的字地址是0把低八位数据读出来赋值给NumNum|AT24C02_ReadByte(1)8;//高八位的字地址1把八位数据读出来每个左移8就是高八位LCD_ShowNum(1,1,Num,5);LCD_ShowString(2,1,Read OK );Delay(1000);LCD_ShowString(2,1, );}} }注意 写进去立马读出来能读到吗 不能 为什么不能 我们看一下手册上的写周期是5ms 这个写周期意味着我们每次写入之后需要Delay 5ms写的数据帧stop一旦结束它内部要执行一些操作把数据写出去。所以ROM要比RAM慢一些因为ROM有个写入时间它这个是最长5ms经过实测写个数据大概两三毫秒就能写完所以我们每次写入之后需要Delay 5ms。 效果展示 效果请看视频 AT24C02数据存储 以上就是本篇内容 之后有时间还会补充一个“秒表定时器扫描按键数码管”的示例代码敬请关注 源码会放在评论区自取如有问题可评论区留言。
http://www.zqtcl.cn/news/300844/

相关文章:

  • 用备案的网站做违法网站wordpress个性404
  • 中国制造网官方网站下载安装我国做民宿的网站
  • 英文网站seo广州市软件开发有限公司
  • 锦州网站建设渠道山西做网站的公司有哪些
  • 4线城市搞网站开发丹灶网站建设公司
  • 青岛网站建设seo优化wordpress分类标题自定义
  • 网站开发本地环境在海南注册公司需要多少钱
  • 济南网站开发去哪儿旅行app下载安装
  • 大城 网站北京做网站男生工资
  • 赣州网站建设百家号免费软件网
  • 在合肥做网站多少钱网站开发外包平台
  • 百度指数查询平台网站建设SEO优化哪家好
  • 网站怎么在成都备案中企动力如何
  • 免费数据统计网站app推广拉新一手渠道
  • 网站推广效果不好原因zac seo博客
  • 高端网站设计合肥网站建设个人网站建设公
  • 廊坊建站模板系统做效果图的网站
  • 建网站打开需要验证四川省成都市建设厅官网
  • 网站文章列表如何排版珠海建设工程信息网站
  • 郑州个人做网站建设银行招聘网站
  • 杭州网站设计公司联系亿企邦网站怎么上百度
  • 网站建设的未来网站不备案访问
  • 网站改版效果图怎么做网站建设的五个基本要素
  • 河南建站网站做o2o网站需要多少钱
  • 重庆企业网站定制开发公司wordpress用户页
  • 电子商务网站seo网站规划与设计方向
  • 外贸双语网站源码wordpress 柚子
  • 隆昌市住房和城乡建设厅网站html5网页成品代码
  • 泉州丰泽建设局网站wordpress设置logo和公司名
  • 网页与网站设计实验总结网上商城互联网网站开发