




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* I2Cint.c 文件*/ #include “I2CINT.h“ #include “LPC17xx.h“ #define DELAY_TIME 5 #define SDA (1 FIODIR1 |=SDA #define SDA_1() LPC_GPIO0-FIOSET1 |=SDA #define SDA_0() LPC_GPIO0-FIOCLR1 |=SDA #define SCL (1 FIODIR1 |= SCL #define SCL_1() LPC_GPIO0-FIOSET1 |= SCL #define SCL_0() LPC_GPIO0-FIOCLR1 |= SCL #define SDA_INT() LPC_GPIO0-FIODIR1 volatile INT8U address; volatile INT8U data; /* * * Function name: myDelay * Descriptions: * input parameters: * */ void myDelay(INT32U ulTime) INT32U i; i = 0; while (ulTime-) for (i = 0; i PINSEL0 LPC_PINCON-PINSEL4 SDA_OUT(); SCL_OUT(); LED_on(); DELAY(50000); LED_off(); void I2C_Start(void) SDA_1(); SCL_1(); DELAY(DELAY_TIME); SDA_0(); DELAY(DELAY_TIME); SCL_0(); DELAY(DELAY_TIME); void I2C_Stop(void) SDA_0(); SCL_1(); DELAY(DELAY_TIME); SDA_1(); DELAY(DELAY_TIME); /*0* */ void SEND_0(void) SDA_0(); DELAY(DELAY_TIME); SCL_1(); DELAY(DELAY_TIME); SCL_0(); DELAY(DELAY_TIME); /*1* */ void SEND_1(void) SDA_1(); DELAY(DELAY_TIME); SCL_1(); DELAY(DELAY_TIME); SCL_0(); DELAY(DELAY_TIME); void I2C_Acknowledge(void) SDA_0(); DELAY(DELAY_TIME); SCL_1(); DELAY(DELAY_TIME); SCL_0(); DELAY(DELAY_TIME); void Check_Acknowledge(void) SDA_INT(); DELAY(DELAY_TIME); SCL_0(); DELAY(DELAY_TIME); SCL_1(); DELAY(DELAY_TIME); ack = LPC_GPIO0-FIOPIN1 SCL_0(); DELAY(DELAY_TIME); SDA_OUT(); if (ack=0) else while (1) LED_on(); LED_off(); /* * * Function name: I2C_WriteNByte * Returned value: NONE * */ void I2C_WriteNByte(INT8U sla,INT8U suba_type_one, INT8U suba,INT8U suba_type_two,INT8U *p,INT8U *s, INT8U num) INT8U N; INT8U DEC; INT8U DECy; INT8U nz; INT8U ny; INT8U i; /用来判断能否写满一页 INT8U j; /第几轮写入数据 INT8U k; (num-k)是写入数据的字节数 INT8U n; DEC=(*p)*16+(*(p+1); /16 进制转 10 进制 DECy=16-DEC%16; /第一轮写入时所剩空间的大小 if(numDECy) /计算换页次数 n=1; else n=0; nz=(num-DECy)/16; if(num-DECy)%16)0) ny=1; else ny=0; /计算换页次数 N=n+nz+ny; /页写次数 N 换页次数 N-1 for(;N0;N-) INT8U bit,a; suba_type_one=8; suba_type_two=8; j+; I2C_Start(); /发送起始信号 for(;suba_type_one=1;suba_type_one-) /发送从机地址 address = (sla(suba_type_one-1) if (address=1) SEND_1(); else SEND_0(); Check_Acknowledge();/检测从机应答信号 for(;suba_type_two=1;suba_type_two-) /发送从机子地址 address = (suba(suba_type_two-1) if (address=1) SEND_1(); else SEND_0(); Check_Acknowledge(); if(j=1) /第一次跳页的从机子地址 suba=suba+(DECy)%256); else suba=suba+0x10; /第 n+1 次跳页的从机子地址(n=1 ) i=(num-16)0)?(num-16):0);/如果未写入的数据能够写满一页则写 一页否则全部写入 if(j=1) if(numDECy) /第一轮时要写入的字节数大于所剩空间的 大小则写入所剩空间个数个数据 k=(num-DECy); else k=0; /第一轮时要写入的字节数小于等于所剩空间的 大小则写入全部数据 else k=i; /第 n+1 次写入数据时( n=1) for(;numk;num-) bit=8; a= *s+; for(;bit=1;bit-) data = (a(bit-1) if (data=1) SEND_1(); else SEND_0(); Check_Acknowledge(); I2C_Stop(); myDelay(200); /写周期延迟时间 /* * * Function name: I2C_ReadNByte * */ void I2C_ReadNByte (INT8U sla,INT8U suba_type_one, INT8U suba,INT8U suba_type_two, INT8U *s, INT8U num) INT8U temp; INT8U sla_r; sla_r=sla+1; I2C_Start(); for(;suba_type_one=1;suba_type_one-) /伪写指令 address = (sla(suba_type_one-1) if (address=1) SEND_1(); else SEND_0(); Check_Acknowledge(); for(;suba_type_two=1;suba_type_two-) address = (suba(suba_type_two-1) if (address=1) SEND_1(); else SEND_0(); Check_Acknowledge(); I2C_Start(); suba_type_one=8; for(;suba_type_one=1;suba_type_one-) /读指令 address = (sla_r(suba_type_one-1) if (address=1) SEND_1(); else SEND_0(); Check_Acknowledge(); for(;num0;num-) INT8U b8; INT8U a; INT8U i; i=8; for (; i=1; i-) SDA_INT(); DELAY(DELAY_TIME); SCL_0(); DELAY(DELAY_TIME); SCL_1(); DELAY(DELAY_TIME); temp=LPC_GPIO0-FIOPIN1; a=(temp b8-i=(aFIODIR |= BEEP #define BEEP_OFF() LPC_GPIO0-FIOSET |= BEEP #define BEEP_ON() LPC_GPIO0-FIOCLR |= BEEP #define AT24C02 0xA4 int main(void) INT8U Data_Buf32,Receive_Buf32,Address_dec2; INT8U i; SystemInit(); BEEP_INIT(); BEEP_ON(); myDelay(200); BEEP_OFF(); GPIOInit( ); Address_dec0=0; /子地址 高四位 Address_dec1=0; /子地址 低四位 for (i = 0; i 32; i+) Data_Bufi = (i+0) ; I2C_WriteNByte(AT24C02, 8, 0x00,8,Address_dec, Data_Buf, 32); /(从机地址,位数从机子地址,位数,子地址数组,发送数据数组,发送字节数) I2C_ReadNByte (AT24C02, 8, 0x00,8, R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语跨学科教学的创新策略与实践路径
- 2025至2030年双匀浆辊流箱项目投资价值分析报告
- 推动银行数字化转型提升智能化服务水平的关键策略与实施路径
- 提升人才培养质量的实施路径
- 抽水蓄能电站项目初步设计报告
- 农作物功能性开发的试题及答案
- 患者安全考试试题及答案
- 细化每一步福建事业单位考试试题及答案
- 车体安全测试题及答案解析
- 高校辅导员如何加强学生自律性试题及答案
- 防流感班会课件
- 2025安徽蚌埠市国有资本运营控股集团有限公司招聘4人笔试参考题库附带答案详解
- 《寓言故事中的对比》群文阅读(教学设计)-2023-2024学年统编版语文三年级下册
- 2024年中国资源循环集团有限公司招聘笔试真题
- 2025届3月高三山东潍坊一模英语试题
- 行政管理本科毕业论文-数字政府背景下地方政府治理效能研究
- 家庭营养师课件
- 铁路护路工作培训
- 玉兰采购及包栽包活合同范本
- 电信运营商网络升级计划
- 2025年全国国家版图知识竞赛(中小学组)题库及答案
评论
0/150
提交评论