收藏 分享(赏)

I2C总线读写程序通用.doc

上传人:精品资料 文档编号:11146876 上传时间:2020-02-09 格式:DOC 页数:4 大小:25.50KB
下载 相关 举报
I2C总线读写程序通用.doc_第1页
第1页 / 共4页
I2C总线读写程序通用.doc_第2页
第2页 / 共4页
I2C总线读写程序通用.doc_第3页
第3页 / 共4页
I2C总线读写程序通用.doc_第4页
第4页 / 共4页
亲,该文档总共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

2、display(unsigned 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,unsi

3、gned char Waddr);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.5SData=IIC_single_byte_re

4、ad(0xa0,0x02);/读出 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_st

5、art(void)/IIC 总线产生起始信号函数 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)/接收应答信号函数

6、bit ack;/定义一个位变量,来暂存应答状态。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_SD

7、A=Data/写最高位的数据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;/拉高时钟线,为读取下一位数据做准备。delay_IIC

8、();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();/产生起始信号IIC_write_by

9、te(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;/定义一个缓冲寄存器。IIC_start();/产生起始信

10、号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; /=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报