I2C总线读写程序通用.doc

上传人:豆**** 文档编号:33561047 上传时间:2022-08-11 格式:DOC 页数:4 大小:23KB
返回 下载 相关 举报
I2C总线读写程序通用.doc_第1页
第1页 / 共4页
I2C总线读写程序通用.doc_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《I2C总线读写程序通用.doc》由会员分享,可在线阅读,更多相关《I2C总线读写程序通用.doc(4页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、/=头文件加载=#include /加载52系列单片机头文件/=端口声明=sbit CLK=P36; /74hc574时钟信号线sbit G=P24; /74hc574使能sbit IIC_SDA=P26; /声明IIC总线的数据线接在单片机的P2.5端口。sbit IIC_SCL=P25; /声明IIC总线的时钟线接在单片机的P2.7端口。unsigned char tabl=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0BF,0x8C;/0,1,2,3,4,5,6,7,8,9,-,P/=函数声明=void display(unsi

2、gned char aa);void delay(unsigned int t);void delay_IIC(void);void IIC_Init(void);void IIC_start(void);void IIC_stop(void);bit IIC_Tack(void);void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data);unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Wa

3、ddr);void IIC_write_byte(unsigned char Data);unsigned char IIC_read_byte(void);/=主函数=void main() /主函数unsigned char Data=2,addr=0x01; /-系统初始化- IIC_Init();/初始化IIC总线。 /P1=0x7f;/LED8先亮。 while(1) /死循环 IIC_single_byte_write(0xa0,0x02,Data);/保存LED的状态 delay(50000);/延时约0.5S Data=IIC_single_byte_read(0xa0,0x0

4、2);/读出LED的状态if(Data10)Data+;elseData=0;display(Data);delay(50000);/延时约0.5S /=功能子函数=void delay(unsigned int t)/延时函数 while(t)t-; /延时循环计数/-void delay_IIC(void) /IIC总线限速延时函数。/该函数是空函数,延时4个机器周期。;/-void IIC_Init(void)/IIC总线初始化函数 IIC_SDA=1;/释放IIC总线的数据线。 IIC_SCL=1;/释放IIC总线的时钟线。/-void IIC_start(void)/IIC总线产生起

5、始信号函数 IIC_SDA=1;/拉高数据线 IIC_SCL=1;/拉高时钟线 delay_IIC(); IIC_SDA=0;/在时钟线为高电平时,拉低数据线,产生起始信号。 delay_IIC(); IIC_SCL=0;/拉低时钟线/-void IIC_stop(void) /IIC总线产生停止信号函数 IIC_SDA=0;/拉低数据线 delay_IIC(); IIC_SCL=1;/拉高时钟线。 delay_IIC(); IIC_SDA=1;/时钟时线为高电平时,拉高数据线,产生停止信号。 delay_IIC();/-bit IIC_Tack(void)/接收应答信号函数 bit ack;

6、/定义一个位变量,来暂存应答状态。 IIC_SDA=1;/释放数据总线,准备接收应答信号。 delay_IIC(); IIC_SCL=1;/拉高时钟线。 delay_IIC(); ack=IIC_SDA;/读取应答信号的状态。 delay_IIC(); IIC_SCL=0;/拉低时钟线。 delay_IIC(); return ack;/返回应答信号的状态,0表示应答,1表示非应答。/-void IIC_write_byte(unsigned char Data)/向IIC总线写入一个字节的数据函数 unsigned char i; for(i=0;i8;i+)/有8位数据 IIC_SDA=D

7、ata&0x80;/写最高位的数据 delay_IIC(); IIC_SCL=1; /拉高时钟线,将数写入到设备中。 delay_IIC(); IIC_SCL=0;/拉低时钟线,允许改变数据线的状态 delay_IIC(); Data=Data1;/数据左移一位,把次高位放在最高位,为写入次高位做准备 /-unsigned char IIC_read_byte()/从IIC总线读取一个字节的数据函数 unsigned char i; unsigned char Data; /定义一个缓冲寄存器。 for(i=0;i8;i+)/有8位数据 IIC_SCL=1;/拉高时钟线,为读取下一位数据做准备

8、。 delay_IIC(); Data=Data1;/将缓冲字节的数据左移一位,准备读取数据。 delay_IIC(); if(IIC_SDA)/如果数据线为高平电平。 Data=Data|0x1;/则给缓冲字节的最低位写1。 IIC_SCL=0;/拉低时钟线,为读取下一位数据做准备。 delay_IIC(); return Data;/返回读取的一个字节数据。/-void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data)/向任意地址写入一个字节数据函数 IIC_start();/

9、产生起始信号 IIC_write_byte(Daddr);/写入设备地址(写) IIC_Tack();/等待设备的应答 IIC_write_byte(Waddr);/写入要操作的单元地址。 IIC_Tack();/等待设备的应答。 IIC_write_byte(Data);/写入数据。 IIC_Tack();/等待设备的应答。 IIC_stop();/产生停止符号。/-unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr)/从任意地址读取一个字节数据函数 unsigned char Data;/定义

10、一个缓冲寄存器。 IIC_start();/产生起始信号 IIC_write_byte(Daddr);/写入设备地址(写) IIC_Tack();/等待设备的应答 IIC_write_byte(Waddr);/写入要操作的单元地址。 IIC_Tack();/等待设备的应答。 IIC_start();/产生起始信号 IIC_write_byte(Daddr+1);/写入设备地址(读)。 IIC_Tack();/等待设备的应答。 Data=IIC_read_byte();/写入数据。 IIC_stop();/产生停止符号。 /-返回读取的数据- return Data;/返回读取的一个字节数据。/-void display(unsigned char aa)P2=0xf0; G=0; /74hc574使能CLK=0; /n产生上升沿,数据写入74hc574P0=tablaa;/n给数码CLK=1; /=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com