本文主要是給I2C代碼及自己做出來的視頻給大家看;主要用AT24C02來檢測是否能用;
下面是我寫i2c顯示的代碼,我建了個頭文件,方便具有i2c通信設備的使用,我現在做的mpu6050;也是直接調用這個程序就可以用了;
at24c連接圖片那里是接了P2^0,1,自己改一下就好
0.png (361.86 KB, 下載次數: 50)
下載附件
2019-3-11 00:43 上傳
b674cfd7efeb7af79232ae033456621.jpg (96.69 KB, 下載次數: 56)
下載附件
at24c連接圖片
2019-3-11 00:14 上傳
單片機源碼:
#ifndef __I2C_H__//頭文件格式 #define __I2C_H__ #define uchar unsigned char #define uint unsigned int sbit sda=P2^2; sbit scl=P2^3; /*延時約5us函數*/ void delay() {;;} /*I2C1啟動信號函數*/ void I2Cstart() { sda=1; delay(); scl=1; delay(); sda=0; delay(); } /*I2C停止信號函數*/ void I2Cstop() { sda=0; delay(); scl=1; delay(); sda=1; delay(); } /*I2C應答信號函數*/ void I2Crespons() { uchar i; scl=1; delay(); while((sda==1)&&(i<250)) //加個延時退出,防止沒應答進入死循環 i++; scl=0; delay(); } /*I2C初始化信號函數*/ void I2Cinit() { sda=1; delay(); scl=1; delay(); } /*I2C向從機寫一個字節信號函數*/ void I2Cwrite_byte(uchar date) { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay(); sda=CY; //CY是進位標志 delay(); scl=1; delay(); } scl=0; delay(); sda=1; delay(); } /*I2C向從機讀一個字節信號函數*/ uchar I2Cread_byte() { uchar i,k; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); k=(k<<1)|sda; scl=0; delay(); } return k; } /*I2C向某個從機的某個地址寫一個字節數據信號函數*/ void I2Cwrite_add(uchar salveaddress,uchar address,uchar date) { I2Cstart(); I2Cwrite_byte(salveaddress); //發送設備地址+寫信號 I2Crespons(); I2Cwrite_byte(address); //發送存儲單元地址 I2Crespons(); I2Cwrite_byte(date); //發送數據 I2Crespons(); I2Cstop(); } /*I2C向某個從機的某個地址讀一個字節數據信號函數*/ uchar I2Cread_add(uchar salveaddress,uchar address) { uchar date; I2Cstart(); I2Cwrite_byte(salveaddress); //發送設備地址+寫信號 I2Crespons(); I2Cwrite_byte(address); //發送存儲單元地址 I2Crespons(); I2Cstart(); I2Cwrite_byte(salveaddress+1); //發送設備地址+讀信號 I2Crespons(); date=I2Cread_byte(); //讀取數據 I2Cstop(); return date; } #endif
全部資料51hei下載地址:
i2c頭文件及用at24c02測試I2C通信.zip
(945.78 KB, 下載次數: 44)
2019-3-11 00:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|