串行I2C總線E2PROMAT24CXXX的應(yīng)用_第1頁
串行I2C總線E2PROMAT24CXXX的應(yīng)用_第2頁
串行I2C總線E2PROMAT24CXXX的應(yīng)用_第3頁
串行I2C總線E2PROMAT24CXXX的應(yīng)用_第4頁
串行I2C總線E2PROMAT24CXXX的應(yīng)用_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、9.串行I2C總線E2PROMAT24CXXX勺應(yīng)用這一篇介紹I2C存儲器的使用。主要是介紹AT24CXX系列器件,它分為兩類,主要是通過被存儲容量地址來分的,一類是AT24C02AT24C10它的存儲容量從256字節(jié)到2048字節(jié)。另一類是AT24C32-AT24C1024,容量從4K128K。(理論上好像可以達(dá)到最高512K字節(jié)容量,但現(xiàn)在網(wǎng)上最高也就能看到AT24C1024也就是128K字節(jié)容量)原理:I2C總線是一種用于IC器件之間連接的二線制總線。它通過SDA(串行數(shù)據(jù)線)及SCL(串行日t鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件:不管是單片機(jī)、存儲器、LC

2、D驅(qū)動器還是鍵盤接口。I2C總線接口電路結(jié)構(gòu)如圖所示。SDAfflSCL均為雙向I/O線,通過上拉電阻接正電源。當(dāng)總線空閑時,兩根線都是高電平。連接總線的器件的輸由級必須是集電極或漏極開路,以具有線“與”功能。I2C總線的數(shù)據(jù)傳送速率在標(biāo)準(zhǔn)工作方式下為100kbit/s,在快速方式下,最高傳送速率可達(dá)400kbit/s。在I2C總線技術(shù)規(guī)范中,開始和結(jié)束信號(也稱啟動和停止信號)的定義如圖所示。當(dāng)時鐘線SCL為高電平時,數(shù)據(jù)線SDAi高電平跳變?yōu)榈碗娖蕉x為“開始”信號;當(dāng)SCL線為高電平時,SDA線發(fā)生低電平到高電平的跳變?yōu)椤敖Y(jié)束”信號。開始和結(jié)束信號都是由主器件產(chǎn)生。在開始信號以后,總線即

3、被認(rèn)為處于忙狀態(tài);在結(jié)束信號以后的一段時間內(nèi),總線被認(rèn)為是空閑的。50A1111一丁、一/rjnrI一一/一匚;一一開驚信牙%f|環(huán)京信號I2C總線的數(shù)據(jù)傳送格式是:在I2C總線開始信號后,送由的第一個字節(jié)數(shù)據(jù)是用來選擇從器件地址的,其中4-7位為器件碼,如1010就是代表串行E2PRO郵件o13位為存儲器的片選地址或存儲器內(nèi)的塊地址碼,如何區(qū)分?后面再做詳細(xì)說明,第8位為方向位(R/W)o方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件;方向位為“1”表示主器件將從從器件讀信息。開始信號后,系統(tǒng)中的各個器件將自己的地址和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一

4、致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)確定。一個字節(jié)的寫操作的過程:首先器件發(fā)出起始信號后,發(fā)送器件識別控制字節(jié),即1010A2A1A00(最低位置0,即R/W讀寫控制位為低電平0),然后等待應(yīng)答信號指示從器件被尋址。再發(fā)送一個AT24CX存儲器將要寫入的位置地址。再次等待AT24CXXS答信號以后,將發(fā)送數(shù)據(jù)字節(jié),AT24CXX接收到后寫入到剛剛指定的存儲器地址。然后主器件再次等待AT24CXX勺應(yīng)答信號。主器件最后發(fā)生停止信號。在I2C總線上每次傳送的數(shù)據(jù)字節(jié)數(shù)不限,但每一個字節(jié)必須為8位,而且每個傳送的字節(jié)后面必須跟一個認(rèn)可位(第9位),也叫應(yīng)答位

5、(ACgo數(shù)據(jù)的傳送過程如圖所示。每次都是先傳最高位,通常從器件在接收到每個字節(jié)后都會作曲響應(yīng),即釋放SCL線返回高電平,準(zhǔn)備接收下一個數(shù)據(jù)字節(jié),主器件可繼續(xù)傳送。如果從器件正在處理一個實時事件而不能接收數(shù)據(jù)時,(例如正在處理一個內(nèi)部中斷,在這個中斷處理完之前就不能接收I2C總線上的數(shù)據(jù)字節(jié))可以使時鐘SCL線保持低電平,從器件必須使SDA保持高電平,此時主器件產(chǎn)生1個結(jié)束信號,使傳送異常結(jié)束,迫使主器件處于等待狀態(tài)。當(dāng)從器件處理完畢時將釋放SCL線,主器件繼續(xù)傳送二:二二ILTUr5cL.vck.icx:-V/A_/r7A_jGT:均'力乙中Ki!*Lsa保費(fèi)心孑.!*'當(dāng)主

6、器件發(fā)送完一個字節(jié)的數(shù)據(jù)后,接著發(fā)生對應(yīng)于SCL線上的一個時鐘(ACK認(rèn)可位,在此時鐘內(nèi)主器件釋放SDA戔,一個字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號將SDA戔拉成低電平,使SDA在該時鐘的高電平期間為穩(wěn)定的低電平。從器件的響應(yīng)信號結(jié)束后,SDA線返回高電平,進(jìn)入下一個傳送周期。I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能。若一個器件不需要廣播呼叫尋址中所提供的任何數(shù)據(jù),則可以忽略該地址不作響應(yīng)。如果該器件需要廣播呼叫尋址中提供的數(shù)據(jù),則應(yīng)對地址作由響應(yīng),具表現(xiàn)為一個接收器。5.總線競爭的仲裁總線上可能桂接有多個器件,有時會發(fā)生兩個或多個主器件同時想占用總線的情況。例如,多單片機(jī)系統(tǒng)中,

7、可能在某一時刻有兩個單片機(jī)要同時向總線發(fā)送數(shù)據(jù),這種情況叫做總線競爭。I2C總線具有多主控能力,可以對發(fā)生在SDA線上的總線競爭進(jìn)行仲裁,其仲裁原則是這樣的:當(dāng)多個主器件同時想占用總線時,如果某個主器件發(fā)送高電平,而另一個主器件發(fā)送低電平,則發(fā)送電平與此時SDA總線電平不符的那個器件將自動關(guān)閉其輸由級。總線競爭的仲裁是在兩個層次上進(jìn)行的。首先是地址位的比較,如果主器件尋址同一個從器件,則進(jìn)入數(shù)據(jù)位的比較,從而確保了競爭仲裁的可靠性。由于是利用I2C總線上的信息進(jìn)行仲裁,因此不會造成信息的丟失。器件說明:AT24CXXXC歹U引腳圖如下心加2PDIPPinName管腳定義A03地址輸入SDA串行

8、數(shù)據(jù)SCL串行時鐘脈沖輸工WP寫保護(hù)NC無連接GND接地VCC電源現(xiàn)在我先來說說AT24CXX勺具體使用假設(shè)用AT89S51的P0.0做SDA總線,P0.1做SCL總線。有若干個I2C器件桂接在SDAfflSCL總線上。現(xiàn)在要對E2PROM_0存儲器進(jìn)行寫字節(jié)操作看看它是如何找到的。上面說過在發(fā)送完一個開始信號后接著發(fā)送一個字節(jié)的器件識別信號。這一個字節(jié)的47位就是器件識別碼。1010就是對應(yīng)E2PROM1件,其它器件就不再理會了。13位是器件的物理地址,也就是說如果是E2PROM它可以在I2C總線上桂接(000111)8個E2PROM在這里就得詳細(xì)說說AT24CXXk白A0,A1,A2和這個

9、器件識別字節(jié)之間的關(guān)系了。上面說過存儲器的尋址范圍是一個字節(jié),也就256個,AT24C02的存儲容量為256字字,剛剛好將一個字節(jié)的地址用完。器件電路上A0,A1,A2三個管腳通過接高電平或低電平來和AT89S51發(fā)送過來的器件識別控制字節(jié)相匹配,從而得以識別由AT89S51將要操作的那個存儲器?,F(xiàn)在AT24C04的容量是512個字節(jié),那不是一個字節(jié)的地址不夠用了嗎?其實它是將512個字節(jié)為成兩個頁,每頁256字節(jié),而頁地址就是器件識別控制字節(jié)的1位。前面說了這個13位不是和器件上的A0,A1,A2匹配來識別器件的嗎?是的,但存儲器容量超過256字節(jié)情況就有變了。AT24C04上的A0這時就廢

10、棄不用了,只用A1和A2,這樣就只能接(0011)四個AT24C04了,同樣AT24C08容量為1K字節(jié)分為4頁了,于是頁地址就是器件識別控制字節(jié)的12位,器件上的A0,A1廢棄不用,只用A2,就只能接兩個AT24C08了。AT24C16容量為2K字節(jié),分為8頁。頁地址是器件識別控制字節(jié)的13位,全用了。器件上的A0,A1,A2,就無效了,只能接一只AT24C16。型號存儲容量器件識別控制字節(jié)管腳圖AT2aC01/D21力泰B門2Q/2SC字節(jié))A.6匚A.1匚A2E霧0匚1w92r36i&VCCWFJSGLSDA101。34t褊|阿MSBLSBAT24CD4服B1512字節(jié)NC匚M匚

11、ABEGKD匚1J8三T3臺1&VCGWF1SCL3DA1010丸PQ網(wǎng)A724C089KB門口24字節(jié)NG匚KC匚g匚GNP匚1=學(xué)2736-$1WCWP3CLSt01。PCJ|rm|AT24C1616KB42048字芾)NC匚NG匚NCC弼口匚178273615VCGJ9CLSC*1Q1F1?a審拘注意:管腳圖的睨表示內(nèi)音雷曼有連接,是空腳我這么說能明白嗎?對于大容量AT24C32-1024的存儲器。器件的存儲尋址地址為兩個字節(jié),所以它的一頁為65536(64K)。AT24C3264的容量為4K字節(jié)一8K字節(jié),在一頁范圍,可以接8只器件。從AT24C128-1024的器件代號也由1

12、010改為10100,多了一位,識別控制字節(jié)的器件物理地址就少了一位,變?yōu)?2位,相應(yīng)的在器件管腳上A2也廢棄空著了,因此最多只能接四只器件。AT24C128-512只有兩位器件地址所以最多只能接四只器件。而AT24C1024的容量為128K,分為兩頁,識別控制字節(jié)的的1位為頁地址,器件的A0腳廢棄不用,只用了A1。因此只能接2只器件型號存儲容量器件識別控制字節(jié)管腳圖32K/54KBf4a8K字節(jié))眄匚A1LAirGN。匚17g279645vocJWP3SCL&4M01Q%fVWMSBLS已AT24C128/256/512128/256/512/B16K/32K/64K字節(jié)人。匚M匚N

13、CEMID匚178279645JVOCJWPJ8CL101C0A,4RjWATMC10241024KE128K字節(jié)NG匚*匚NCC6WDE1Je£73&15口VTC1WP3SCLJ&W1a100AP0FVW注意:管腳圖的此表示內(nèi)部沒有連接,是空腳.卜面我們進(jìn)行具體的制做先準(zhǔn)備好器件如下圖我用的是AT24C16原先的板子如下圖|廣,*'BWiIInr_>_BB.BB4!焊好后。£3/0£/2fffl817:99SDASOL好!下面我們進(jìn)行調(diào)試:插上主電源。但AT24C16的電源短路帽不接,在短路帽兩個針之間接上萬用表的電流檔檢查是否有短

14、路和靜態(tài)電流的大小。實測靜態(tài)電流幾乎為零,改變兩個數(shù)據(jù)線的電平時,電流會有所上升,說明電路基本正?!,F(xiàn)在我們接上電源短路帽把AT24C16電源接好。將兩個數(shù)據(jù)線用跳線接到P1.6和P1.7口上(接到哪個口上可以自己選的)。注意分清哪個是SDA哪個是SCL別弄錯了。把LCD12864裝上,后面我們就要進(jìn)行軟件的調(diào)試了后面一篇,我們進(jìn)行軟件件部分的調(diào)試。先將源代碼附上。前面部分LCD12864的代碼基本不變,添加上AT24C16的代碼。/LCD12864*/連線表:CPU=89S51SysClock=12MHz/RS=P2.0R/W=P2.1E=P2.2CS1=P2.3CS2=P2.4/DB0-D

15、B7=P3.0-P3.7/Reset=InBoard/*/24c16/*/連線表:CPU=89S51SysClock=12MHz*/SDA=P1.6SCL=P1.7/*#include<reg52.h>#include<stdlib.h>#include<intrins.h>#include<stdio.h>#include<math.h>#defineucharunsignedchar*/#defineuintunsignedint/*LCD12864#defineDataPortP3/LCD128*64I/O信號管腳sbitRS=

16、P2A0;/數(shù)據(jù)指令sbitRW=P2A1;/讀寫sbit=P2A2;/使能sbitCSL=P2A3;/左片選sbitCSR=P2A4;/右片選ucharPage;/頁地址ucharCol;/列地址ucharcodeBMP1;/一幅圖ucharcodeHZK_12;/12X12陣點(diǎn)字模ucharcodeASC_5x7;/5X7陣點(diǎn)字模ucharstr4;/*AT24C16*/sbitSDA=P1A6;/數(shù)據(jù)sbitSCL=P1A7;/時鐘/*/*LCD12864函數(shù)定義*/voidBusyL(void);voidBusyR(void);voidCheckBusy(void);voidDelay

17、(uintMS);voidLocatexy(void);向07轉(zhuǎn)換成左、右屏的的/將整屏/左屏檢測忙/右屏檢測忙/讀取忙信號/延時/將屏幕橫向0-12縱X、YvoidWriteCommandL(ucharCommandByte);/向左屏寫入指令voidWriteCommandR(ucharCommandByte);/向右屏寫入指令ucharReadData(void);/讀數(shù)據(jù)voidWriteData(ucharDataByte);/寫數(shù)據(jù)voidLcmClear(void);/清屏voidLcmInit(void);/初始化voidLcmPutBMP(uchar*puts);/顯示一幅圖

18、voidLcmReverseBMP(void);反顯voidLcmPutHZ_12(ucharx,uchary,ucharHZcode);/在屏幕上任意點(diǎn)顯示一個12X12漢字uchar*uchartostr(unsignedcharunm);/將值轉(zhuǎn)成字符串voidLcmPutAsc(ucharasc);/顯示一個5X7的ASC字符voidLcmPutstr(ucharrow,uchary,uchar*str);/在設(shè)定位置顯示字符串voidLcmPutpoint(ucharro,ucharlie,ucharcolour);/在設(shè)定位置顯示一個點(diǎn)*AT24C16函數(shù)定義*/*向總線上發(fā)送n字

19、節(jié)數(shù)*/bitwrite_nbyte(ucharblock_addr,ucharaddr,uchar*s,ucharnumb);/*從總線上讀取n個字節(jié)數(shù)*/bitread_nbyte(ucharblock_addr,ucharaddr,uchar*s,ucharnumb);/*說明:block_addr存儲器的塊地址選0-8addr存儲器的存儲地址*s般是用在數(shù)組的首地址numb要寫入的字節(jié)數(shù)*/*/*/*檢查Busy/*/voidBusyL(void)CSL=1;CSR=0;CheckBusy();voidBusyR(void)CSL=0;CSR=1;CheckBusy();voidChe

20、ckBusy(void)RS=0;/指令RW=1;DataPort=0xFF;/輸出0xff以便讀取正確E=1;_nop_();while(0);/DataPort&0x80);/StatusReadBit7=BUSYE=0;_nop_();/*/*根據(jù)設(shè)定的坐標(biāo)數(shù)據(jù),定位LCM上的下一個操作單元位置*/*/voidLocatexy(void)ucharx,y;*/switch(Col&0xc0)/*col.and.0xC0/*條件分支執(zhí)行*/*/指令/寫/設(shè)置頁面地址case0:BusyL();break;/*左區(qū)*/case0x40:BusyR();break;/*右區(qū)*/

21、x=Col&0x3F|0x40;/*col.and.0x3f.or.SetYAddress*/y=Page&0x07|0xB8;/*row.and.0x07.or.setPageCheckBusy();/*waittingforenable*/RS=0;RW=0;DataPort=y;E=1;_nop_();E=0;_nop_();CheckBusy();/*waittingforenable*/RS=0;RW=0;DataPort=x;/設(shè)置列地址E=1;_nop_();E=0;_nop_();/*/*/*寫指令/*/voidWriteCommandL(ucharComman

22、dByte)BusyL();DataPort=CommandByte;/指令RS=0;RW=0;E=1;_nop_();E=0;_nop_();voidWriteCommandR(ucharCommandByte)BusyR();DataPort=CommandByte;/指令RS=0;RW=0;E=1;_nop_();E=0;_nop_();/*/*/*讀數(shù)據(jù)/*/ucharReadData(void)ucharDataByte;Locatexy();/*坐標(biāo)定位,返回時保留分區(qū)狀態(tài)不變*/*數(shù)據(jù)輸出*/*讀入*/*/Locatexy();/*坐標(biāo)定位,返回時保留分區(qū)狀態(tài)不變*/RS=1;R

23、W=1;DataPort=0xFF;/輸出0xff以便讀取正確E=1;/*讀入到LCM*/_nop_();DataByte=DataPort;/*數(shù)據(jù)讀出到數(shù)據(jù)口P1*/E=0;_nop_();returnDataByte;/*/*寫數(shù)據(jù)/*/voidWriteData(ucharDataByte)RS=1;RW=0;/*數(shù)據(jù)輸出*/*寫輸出*/DataPort=DataByte;/*數(shù)據(jù)輸出到數(shù)據(jù)*/E=1;/*寫入到LCM*/_nop_();E=0;_nop_();voidLcmClear(void)Page=0;Col=0;for(Page=0;Page<8;Page+)for(C

24、ol=0;Col<128;Col+)WriteData(0);voidLcmInit(void)Delay(200);/等待復(fù)位WriteCommandL(0x3f);/開顯示W(wǎng)riteCommandR(0x3f);WriteCommandL(0xc0);/設(shè)置起始地址=0WriteCommandR(0xc0);WriteCommandL(0x3f);/開顯示W(wǎng)riteCommandR(0x3f);LcmClear();Col=0;Page=0;Locatexy();voidLcmPutBMP(uchar*puts)uintX=0;Page=0;Col=0;for(Page=0;Page

25、<8;Page+)for(Col=0;Col<128;Col+)eData(putsX);X+;voidLcmReverseBMP(void)uchartemp;Page=0;Col=0;for(Page=0;Page<8;Page+)for(Col=0;Col<128;Col+)temp=ReadData();/空讀一次temp=ReadData();temp=temp;eData(temp);voidLcmPutHZ_12(ucharx,uchary,ucharHZcode)ucharoffset,Rd,Wt,m,tmp,i;uintn;if(x<117&am

26、p;y<53)Page=(y&0x38)>>3;Col=x;n=0x18*HZcode;offset=y&0x07;if(offset<5)for(i=12;i>0;i-)Rd=ReadData();Rd=ReadData();m=HZK_12n;Wt=Rd&(Oxff>>(8-offset)|(m«offset);WriteData(Wt);Page+;n+;tmp=m;m=HZK_12n;Rd=ReadData();Rd=ReadData();Wt=tmp»(8-offset)|(m«offse

27、t)|(Rd&(0xff«(offset+4);WriteData(Wt);Col+;Page-;n+;)elseRd=ReadData();Rd=ReadData();m=HZK_12n;Wt=Rd&(0xff>>(8-offset)|(m<<offset);WriteData(Wt);Page+;n+;tmp=m;m=HZK_12n;Wt=tmp>>(8-offset)|(m<<offset);WriteData(Wt);Page+;n+;Rd=ReadData();Rd=ReadData();Wt=m>>

28、;(8-offset)|(Rd&(0xff<<(offset-4);WriteData(Wt);Page=Page-2;恢復(fù)位置Col+;/修正下一個漢字的起始位置uchar*uchartostr(ucharunm)ucharx00,xx,x0,x,n;x00=unm/100;xx=unm%100;x0=xx/10;x=xx%10;n=0;if(x00!=0)strn=x00+48;/值加48即為字符n+;if(!(x00=0&x0=0)strn=x0+48;n+;strn=x+48;n+;strn='0'returnstr;voidLcmPutAs

29、c(ucharasc)ucharj;uintx;x=5*(asc-32);for(j=0;j<5;j+)Writx+;Col+eData(ASC_5x7x);+;WriteData(0x00);Col+;voidLcmPutstr(ucharrow,uchary,uchar*str)unsignedchar*x;x=str;Page=row;Col=y;while(*x!='0')LcmPutAsc(*x);x+;voidLcmPutpoint(ucharro,ucharlie,ucharcolour)/畫點(diǎn)函數(shù)if(ro<64)&(lie<128)u

30、charmodbyte,outByte;ucharoffsetbit;Col=lie;/列等于liePage=(ro&0x38)>>3;/頁等于行數(shù)row與00111000B再右移3位offsetbit=ro&0x07;/偏移量為行數(shù)與00000111modbyte=1;modbyte<<=offsetbit;/輸出位的模00000001左移offsetbit位outByte=ReadData();outByte=ReadData();if(colour=0)modbyte=modbyte;outByte=modbyte&outByte;/輸出位

31、不影響其它位elseoutByte=modbyte|ReadData();/輸出位不影響其它位WriteData(outByte);voidDelay(uintMS)ucharus,usn;while(MS!=0)usn=2;/for12Mwhile(usn!=0)us=0xf6;while(us!=0)us-;usn-;MS-;/下面是24c016的函數(shù)*/連線表:CPU=89C51SysClock=12MHz*/SDL=P1.6SCL=P1.7/*/*起始信號*/voidstart_iic()SDA=1;SCL=1;_nop_();_nop_();SDA=0;_nop_();_nop_()

32、;SCL=0;/*/*停止信號*/voidstop_iic()SDA=0;SCL=1;_nop_();_nop_();SDA=1;_nop_();_nop_();SCL=0;/*voidack_iic()/*產(chǎn)生應(yīng)答信號*/SDA=0;SCL=1;_nop_();_nop_();SCL=0;SDA=1;/*/*產(chǎn)生非應(yīng)答信號*/voidnack_iic()SDA=1;SCL=1;_nop_();_nop_();SCL=0;SDA=0;/*/*向總線上發(fā)送一個字節(jié)數(shù)據(jù)*/write_byte(ucharc)uchari;for(i=0;i<8;i+)if(c&0x80)SDA=1;

33、SCL=1;_nop_();_nop_();SCL=0;c=c<<1;SDA=1;SCL=1;_nop_();_nop_();if(SDA=1)F0=0;elseF0=1;SCL=0;/*/*從總線上讀取一個字節(jié)數(shù)據(jù)*/ucharread_byte()uchari;ucharr=0;SDA=1;for(i=0;i<8;i+)r=r<<1;SCL=1;_nop_();_nop_();if(SDA=1)r+;SCL=0;returnr;/*/*向總線上發(fā)送n字節(jié)數(shù)據(jù)*/bitwrite_nbyte(ucharblock_addr,ucharaddr,uchar*s,u

34、charnumb)/*block_addr存儲器的塊地址選0-8addr存儲器的存儲地址*s一般是用在數(shù)組的首地址numb要寫入的字節(jié)數(shù)*uchari,slave;start_iic();slave=0xa0|(block_addr<<1);write_byte(slave);if(F0=0)return0;write_byte(addr);if(F0=0)return0;for(i=0;i<numb;i+)write_byte(*s);if(F0=0)return0;s+;stop_iic();return(1);/*/*從總線上讀取n個字節(jié)數(shù)據(jù)*/bitread_nbyt

35、e(ucharblock_addr,ucharaddr,uchar*s,ucharnumb)*變量說明:block_addr存儲器的塊地址選0-8addr存儲器的存儲地址*s一般是用在數(shù)組的首地址numb要寫入的字節(jié)數(shù)*/uchari,slave;start_iic();slave=0xa0|(block_addr<<1);write_byte(slave);if(F0=0)return0;write_byte(addr);if(F0=0)return0;start_iic();slave=0xa1|(block_addr<<1);write_byte(slave);i

36、f(F0=0)return0;for(i=0;i<numb-1;i+)*s=read_byte();ack_iic();s+;*s=read_byte();nack_iic();stop_iic();return(1);/*/voidMain(void)ucharx,i;uchar*ascii;ucharabcd9;LcmInit();LcmClear();ascii=abcd;/write_nbyte(0,0,ascii,8);read_nbyte(0,0,ascii,8);while(1)LcmClear();LcmPutBMP(BMP1);Delay(3000);LcmClear(

37、);/LcmReverseBMP();Delay(1000);/LcmClear();/*x=0;for(i=0;i<8;i+)LcmPutHZ_12(x,i*7,i);x=x+16;*/LcmPutstr(3,40,ascii);LcmPutstr(5,40,"AT24C16!");Delay(5000);unsignedcharcodeBMP1=/字節(jié)倒序/-調(diào)入了一幅圖像:E:!Program!BmpSample12864.bmp/寬度x高度=12640x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

38、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x9F,0xCF,0xDF,0x9F,0x9E,0x3E,0xFF,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFA,0xFC,0xF8,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

39、x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xEF,0xCF,0xDF,0x9F,0x0F,0x1F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0

40、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

41、x00,0x10,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFB,0xFF,0xFF,0xFF,0xFF,0xFE,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0

42、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x3F,0x37,0x37,0x37,0x27,0x63,0x43,0x03,0x03,0x03,0x03,0x03,0x07,0x67,0x27,0x0F,0x0F,0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0

43、x00,0x10,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x00,0x00,0x00,0

44、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x0F,0x07,0x07,0x03,0x03,0x03,0x03,0x02,0xC0,0xAC,0xBF,0xA0,0x80,0x00,0x00,0x00,0x02,0x02,0x06,0x06,0x04,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0

45、xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x3F,0x3F,0x3D,0x7D,0xF8,0xF0,0xF0,0xC0,0x00,0x00,0x00,0x08,0x8C,0xFC,0xFE,0xEE,0xE6,0xC2,0xC0,0x1F,0x1F,0x87,0x0D,0x7D,0x70,0x00,0x00,0x00,0x00,0x00,0

46、x00,0x00,0x00,0x80,0xC0,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xE0,0x00,0x00,0x00,0x02,0xE7,0xE7,0xE7,0xE7,0xC3,0xC3,0xC1,0x82,0x87,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0

47、xFF,0xFF,0xFC,0xF8,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0x1F,0x1F,0x1F,0x1B,0xF9,0xF9,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x83,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0

48、x03,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0E,0x0C,0x0C,0x00,0x01,0x00,0x00,0x80,0xC0,0xF0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0

49、xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xCF,0xDE,0xD4,0xC2,0x82,0x80,0x80,0x83,0xC7,0xC7,0x0F,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF4,0xFC,0xFC,0xFC,0xFC,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論