51單片機IIC總線程序_第1頁
51單片機IIC總線程序_第2頁
51單片機IIC總線程序_第3頁
51單片機IIC總線程序_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/=頭文件加載=#include /加載52系列單片機頭文件/=端口聲明=sbit CLK=P36; /74hc574時鐘信號線sbit G=P24; /74hc574使能sbit IIC_SDA=P26; /聲明IIC總線的數(shù)據(jù)線接在單片機的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/=函數(shù)聲明=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);/=主函數(shù)=void main() /主函數(shù)unsigned char Data=2,addr=0x01; /-系統(tǒng)初始化- IIC_Init();/初始化IIC總線。 /P1=0x7f;/LED8先亮。 while(1) /死循環(huán) IIC_single_byte_write(0xa0,0x02,Data);/保存LED的狀態(tài) delay(50000);/延時約0.5S Data=IIC_single_byte_read(0xa0,0x0

4、2);/讀出LED的狀態(tài)if(Data10)Data+;elseData=0;display(Data);delay(50000);/延時約0.5S /=功能子函數(shù)=void delay(unsigned int t)/延時函數(shù) while(t)t-; /延時循環(huán)計數(shù)/-void delay_IIC(void) /IIC總線限速延時函數(shù)。/該函數(shù)是空函數(shù),延時4個機器周期。;/-void IIC_Init(void)/IIC總線初始化函數(shù) IIC_SDA=1;/釋放IIC總線的數(shù)據(jù)線。 IIC_SCL=1;/釋放IIC總線的時鐘線。/-void IIC_start(void)/IIC總線產(chǎn)生起

5、始信號函數(shù) IIC_SDA=1;/拉高數(shù)據(jù)線 IIC_SCL=1;/拉高時鐘線 delay_IIC(); IIC_SDA=0;/在時鐘線為高電平時,拉低數(shù)據(jù)線,產(chǎn)生起始信號。 delay_IIC(); IIC_SCL=0;/拉低時鐘線/-void IIC_stop(void) /IIC總線產(chǎn)生停止信號函數(shù) IIC_SDA=0;/拉低數(shù)據(jù)線 delay_IIC(); IIC_SCL=1;/拉高時鐘線。 delay_IIC(); IIC_SDA=1;/時鐘時線為高電平時,拉高數(shù)據(jù)線,產(chǎn)生停止信號。 delay_IIC();/-bit IIC_Tack(void)/接收應(yīng)答信號函數(shù) bit ack;

6、/定義一個位變量,來暫存應(yīng)答狀態(tài)。 IIC_SDA=1;/釋放數(shù)據(jù)總線,準備接收應(yīng)答信號。 delay_IIC(); IIC_SCL=1;/拉高時鐘線。 delay_IIC(); ack=IIC_SDA;/讀取應(yīng)答信號的狀態(tài)。 delay_IIC(); IIC_SCL=0;/拉低時鐘線。 delay_IIC(); return ack;/返回應(yīng)答信號的狀態(tài),0表示應(yīng)答,1表示非應(yīng)答。/-void IIC_write_byte(unsigned char Data)/向IIC總線寫入一個字節(jié)的數(shù)據(jù)函數(shù) unsigned char i; for(i=0;i8;i+)/有8位數(shù)據(jù) IIC_SDA=D

7、ata&0x80;/寫最高位的數(shù)據(jù) delay_IIC(); IIC_SCL=1; /拉高時鐘線,將數(shù)寫入到設(shè)備中。 delay_IIC(); IIC_SCL=0;/拉低時鐘線,允許改變數(shù)據(jù)線的狀態(tài) delay_IIC(); Data=Data1;/數(shù)據(jù)左移一位,把次高位放在最高位,為寫入次高位做準備 /-unsigned char IIC_read_byte()/從IIC總線讀取一個字節(jié)的數(shù)據(jù)函數(shù) unsigned char i; unsigned char Data; /定義一個緩沖寄存器。 for(i=0;i8;i+)/有8位數(shù)據(jù) IIC_SCL=1;/拉高時鐘線,為讀取下一位數(shù)據(jù)做準備

8、。 delay_IIC(); Data=Data1;/將緩沖字節(jié)的數(shù)據(jù)左移一位,準備讀取數(shù)據(jù)。 delay_IIC(); if(IIC_SDA)/如果數(shù)據(jù)線為高平電平。 Data=Data|0x1;/則給緩沖字節(jié)的最低位寫1。 IIC_SCL=0;/拉低時鐘線,為讀取下一位數(shù)據(jù)做準備。 delay_IIC(); return Data;/返回讀取的一個字節(jié)數(shù)據(jù)。/-void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data)/向任意地址寫入一個字節(jié)數(shù)據(jù)函數(shù) IIC_start();/

9、產(chǎn)生起始信號 IIC_write_byte(Daddr);/寫入設(shè)備地址(寫) IIC_Tack();/等待設(shè)備的應(yīng)答 IIC_write_byte(Waddr);/寫入要操作的單元地址。 IIC_Tack();/等待設(shè)備的應(yīng)答。 IIC_write_byte(Data);/寫入數(shù)據(jù)。 IIC_Tack();/等待設(shè)備的應(yīng)答。 IIC_stop();/產(chǎn)生停止符號。/-unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr)/從任意地址讀取一個字節(jié)數(shù)據(jù)函數(shù) unsigned char Data;/定義一個緩沖寄存器。 IIC_start();/產(chǎn)生起始信號 IIC_write_byte(Daddr);/寫入設(shè)備地址(寫) IIC_Tack();/等待設(shè)備的應(yīng)答 IIC_write_byte(Waddr);/寫入要操作的單元地址。 IIC_Tack();/等待設(shè)備的應(yīng)答。 IIC_start();/產(chǎn)生起始信號 IIC_write_byte(Daddr+1);/寫入設(shè)備地址(讀)。 IIC_Tack();/等待設(shè)備的應(yīng)答。 Data=IIC_read_byte();/寫入數(shù)據(jù)。 IIC_sto

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論