完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #define unchar unsigned char ***it SCL=P2^0; ***it SDA=P2^1; ***it A0=ACC^0; unchar jishu,ad_data; /********************** COM ***********************/ void init_com()//初始化串口 T1 {TMOD=0x21; SCON=0X40; PCON=0X00; TH1=0XFD; TL1=0XFD; TR1=1; } /********************** DELAY nop ***********************/ void delay() { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } void delays(unsigned int i) { for(;i>0;i--); } /********************* START *************************/ void i2c_start() { SCL=1; SDA=1; delay(); //确定总线空闲 SDA=0; delay();//起始保持4.7us 以上延时差 SCL=0; } /********************* STOP *************************/ void i2c_stop() { SDA=0; _nop_(); SCL=1; delay();//结束保持4.0us 以上延时差 SDA=1; delay(); } /****************** W ****************************/ void i2c_w(unchar w_data) {ACC=w_data; for(jishu=8;jishu>0;jishu--) { if(ACC&0x80) SDA=1; else SDA=0; _nop_(); //确保SDA保持稳定 SCL=1; //拉高SCL发送一位 delay(); SCL=0; delay(); ACC=w_data; ACC<<=(8-jishu); } } /********************* R *************************/ /*********** 重要:read后 必须紧跟ack或noack 3.4us ***********/ void i2c_r() { //SDA=1; //读入应答信号(拉高IO口) for(jishu=8;jishu>1;jishu--) { delay(); SCL=1; //拉高SCL接收一位 A0=SDA; delay(); ACC<<=1; SCL=0; } delay(); SCL=1; //拉高SCL接收一位 A0=SDA; delay(); ACC<<=1; ad_data=ACC; } /********************* ack *************************/ void i2c_ack() { SCL=0; SDA=0;//发送应答位 *************************************** delay(); SCL=1; delay(); SCL=0;//发完 delay(); } /********************* noack *************************/ void i2c_noack() { SCL=0; SDA=1;//发送应答位 *************************************** delay(); SCL=1; delay(); SCL=0;//发完 delay(); } /********************* main *************************/ void main() { init_com(); while(1) {i2c_start(); i2c_w(0x90); //addr SCL=1; //////// 等待应答 delay(); ///////// SCL=0; ///////// delay(); ////////// i2c_w(0x00); //cmd SCL=1; //////// 等待应答 delay(); ///////// SCL=0; ///////// delay(); ////////// /********************/ SDA=1; _nop_(); i2c_start(); i2c_w(0x91); //addr SCL=1; //////// 等待应答 delay(); ///////// SCL=0; ///////// delay(); ////////// i2c_r(); i2c_noack(); i2c_stop(); SBUF=ad_data; delays(100000); } } |
|
相关推荐
1个回答
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
180 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
587 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
549 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
548 浏览 0 评论
1051 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 17:56 , Processed in 0.572262 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号