☆9串行I2C總線E2PROM_第1頁(yè)
☆9串行I2C總線E2PROM_第2頁(yè)
☆9串行I2C總線E2PROM_第3頁(yè)
☆9串行I2C總線E2PROM_第4頁(yè)
☆9串行I2C總線E2PROM_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、處于忙狀態(tài);在結(jié)束信號(hào)以后的一段時(shí)間內(nèi),總線被認(rèn)為是空閑的。I2C總線的數(shù)據(jù)傳送格式是:在I2C總線開(kāi)始信號(hào)后,送出的第一個(gè)字節(jié)數(shù)據(jù)是用來(lái)選擇從器件地址的,其中47位為器件碼,如1010就是代表串行E2PROM器件。13位為存儲(chǔ)器的片選地址或存儲(chǔ)器內(nèi)的塊地址碼,如何區(qū)分?后面再做詳細(xì)說(shuō)明,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,即主器件把信息寫到所選擇的從器件;方向位為“1”表示主器件將從從器件讀信息。開(kāi)始信號(hào)后,系統(tǒng)中的各個(gè)器件將自己的地址和主器件送到總線上的地址進(jìn)行比較,如果與主器件發(fā)送到總線上的地址一致,則該器件即為被主器件尋址的器件,其接收信息還是發(fā)送信息則由第8位(R/W)

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

5、個(gè)字節(jié)后都會(huì)作出響應(yīng),即釋放SCL線返回高電平,準(zhǔn)備接收下一個(gè)數(shù)據(jù)字節(jié),主器件可繼續(xù)傳送。如果從器件正在處理一個(gè)實(shí)時(shí)事件而不能接收數(shù)據(jù)時(shí),(例如正在處理一個(gè)內(nèi)部中斷,在這個(gè)中斷處理完之前就不能接收I2C總線上的數(shù)據(jù)字節(jié))可以使時(shí)鐘SCL線保持低電平,從器件必須使SDA保持高電平,此時(shí)主器件產(chǎn)生1個(gè)結(jié)束信號(hào),使傳送異常結(jié)束,迫使主器件處于等待狀態(tài)。當(dāng)從器件處理完畢時(shí)將釋放SCL線,主器件繼續(xù)傳送。當(dāng)主器件發(fā)送完一個(gè)字節(jié)的數(shù)據(jù)后,接著發(fā)出對(duì)應(yīng)于SCL線上的一個(gè)時(shí)鐘(ACK)認(rèn)可位,在此時(shí)鐘內(nèi)主器件釋放SDA線,一個(gè)字節(jié)傳送結(jié)束,而從器件的響應(yīng)信號(hào)將SDA線拉成低電平,使SDA在該時(shí)鐘的高電平期間為

6、穩(wěn)定的低電平。從器件的響應(yīng)信號(hào)結(jié)束后,SDA線返回高電平,進(jìn)入下一個(gè)傳送周期。I2C總線還具有廣播呼叫地址用于尋址總線上所有器件的功能。若一個(gè)器件不需要廣播呼叫尋址中所提供的任何數(shù)據(jù),則可以忽略該地址不作響應(yīng)。如果該器件需要廣播呼叫尋址中提供的數(shù)據(jù),則應(yīng)對(duì)地址作出響應(yīng),其表現(xiàn)為一個(gè)接收器。5總線競(jìng)爭(zhēng)的仲裁總線上可能掛接有多個(gè)器件,有時(shí)會(huì)發(fā)生兩個(gè)或多個(gè)主器件同時(shí)想占用總線的情況。例如,多單片機(jī)系統(tǒng)中,可能在某一時(shí)刻有兩個(gè)單片機(jī)要同時(shí)向總線發(fā)送數(shù)據(jù),這種情況叫做總線競(jìng)爭(zhēng)。I2C總線具有多主控能力,可以對(duì)發(fā)生在SDA線上的總線競(jìng)爭(zhēng)進(jìn)行仲裁,其仲裁原則是這樣的:當(dāng)多個(gè)主器件同時(shí)想占用總線時(shí),如果某個(gè)主

7、器件發(fā)送高電平,而另一個(gè)主器件發(fā)送低電平,則發(fā)送電平與此時(shí)SDA總線電平不符的那個(gè)器件將自動(dòng)關(guān)閉其輸出級(jí)??偩€競(jìng)爭(zhēng)的仲裁是在兩個(gè)層次上進(jìn)行的。首先是地址位的比較,如果主器件尋址同一個(gè)從器件,則進(jìn)入數(shù)據(jù)位的比較,從而確保了競(jìng)爭(zhēng)仲裁的可靠性。由于是利用I2C總線上的信息進(jìn)行仲裁,因此不會(huì)造成信息的丟失。器件說(shuō)明:AT24CXXX系列引腳圖如下現(xiàn)在我先來(lái)說(shuō)說(shuō)AT24CXX的具體使用 假設(shè)用AT89S51的P0.0做SDA總線,P0.1做SCL總線。有若干個(gè)I2C器件掛接在SDA和SCL總線上?,F(xiàn)在要對(duì)E2PROM_01存儲(chǔ)器進(jìn)行寫字節(jié)操作看看它是如何找到的。上面說(shuō)過(guò)在發(fā)送完一個(gè)開(kāi)始信號(hào)后接著發(fā)送一個(gè)

8、字節(jié)的器件識(shí)別信號(hào)。這一個(gè)字節(jié)的47位就是器件識(shí)別碼。1010就是對(duì)應(yīng)E2PROM器件,其它器件就不再理會(huì)了。13位是器件的物理地址,也就是說(shuō)如果是E2PROM,它可以在I2C總線上掛接(000111)8個(gè)E2PROM。在這里就得詳細(xì)說(shuō)說(shuō)AT24CXX上的A0,A1,A2和這個(gè)器件識(shí)別字節(jié)之間的關(guān)系了。上面說(shuō)過(guò)存儲(chǔ)器的尋址范圍是一個(gè)字節(jié),也就256個(gè),AT24C02的存儲(chǔ)容量為256字字,剛剛好將一個(gè)字節(jié)的地址用完。器件電路上A0,A1,A2三個(gè)管腳通過(guò)接高電平或低電平來(lái)和AT89S51發(fā)送過(guò)來(lái)的器件識(shí)別控制字節(jié)相匹配,從而得以識(shí)別出AT89S51將要操作的那個(gè)存儲(chǔ)器。現(xiàn)在AT24C04的容量

9、是512個(gè)字節(jié),那不是一個(gè)字節(jié)的地址不夠用了嗎?其實(shí)它是將512個(gè)字節(jié)為成兩個(gè)頁(yè),每頁(yè)256字節(jié),而頁(yè)地址就是器件識(shí)別控制字節(jié)的1位。前面說(shuō)了這個(gè)13位不是和器件上的A0,A1,A2匹配來(lái)識(shí)別器件的嗎?是的,但存儲(chǔ)器容量超過(guò)256字節(jié)情況就有變了。AT24C04上的A0這時(shí)就廢棄不用了,只用A1和A2,這樣就只能接(0011)四個(gè)AT24C04了,同樣AT24C08容量為1K字節(jié)分為4頁(yè)了,于是頁(yè)地址就是器件識(shí)別控制字節(jié)的12位,器件上的A0,A1廢棄不用,只用A2,就只能接兩個(gè)AT24C08了。AT24C16容量為2K字節(jié),分為8頁(yè)。頁(yè)地址是器件識(shí)別控制字節(jié)的13位,全用了。器件上的A0,A

10、1,A2,就無(wú)效了,只能接一只AT24C16。我這么說(shuō)能明白嗎?對(duì)于大容量AT24C321024的存儲(chǔ)器。器件的存儲(chǔ)尋址地址為兩個(gè)字節(jié),所以它的一頁(yè)為65536(64K)。AT24C3264的容量為4K字節(jié)8K字節(jié),在一頁(yè)范圍,可以接8只器件。從AT24C1281024的器件代號(hào)也由1010改為10100,多了一位,識(shí)別控制字節(jié)的器件物理地址就少了一位,變?yōu)?2位,相應(yīng)的在器件管腳上A2也廢棄空著了,因此最多只能接四只器件。AT24C128512只有兩位器件地址所以最多只能接四只器件。而AT24C1024的容量為128K,分為兩頁(yè),識(shí)別控制字節(jié)的的1位為頁(yè)地址,器件的A0腳廢棄不用,只用了A1

11、。因此只能接2只器件。 下面我們進(jìn)行具體的制做先準(zhǔn)備好器件如下圖 ,我用的是AT24C16原先的板子如下圖焊好后。好!下面我們進(jìn)行調(diào)試:插上主電源。但AT24C16的電源短路帽不接,在短路帽兩個(gè)針之間接上萬(wàn)用表的電流檔檢查是否有短路和靜態(tài)電流的大小。實(shí)測(cè)靜態(tài)電流幾乎為零,改變兩個(gè)數(shù)據(jù)線的電平時(shí),電流會(huì)有所上升,說(shuō)明電路基本正?!,F(xiàn)在我們接上電源短路帽把AT24C16電源接好。將兩個(gè)數(shù)據(jù)線用跳線接到P1.6和P1.7口上(接到哪個(gè)口上可以自己選的)。注意分清哪個(gè)是SDA哪個(gè)是SCL。別弄錯(cuò)了。把LCD12864裝上,后面我們就要進(jìn)行軟件的調(diào)試了。后面一篇,我們進(jìn)行軟件件部分的調(diào)試。先將源代碼附上

12、。前面部分LCD12864的代碼基本不變,添加上AT24C16的代碼。/LCD12864/*/連線表: CPU=89S51 SysClock=12MHz */RS=P2.0 R/W=P2.1 E=P2.2 CS1=P2.3 CS2=P2.4 */DB0-DB7=P3.0-P3.7 /Reset=InBoard */*/24c16/*/連線表: CPU=89S51 SysClock=12MHz */SDA=P1.6 SCL=P1.7/*#include #include #include #include #include #define uchar unsigned char#define u

13、int unsigned int/*LCD12864引腳定義*/ #define DataPort P3 /LCD128*64 I/O 信號(hào)管腳sbit RS =P20; /數(shù)據(jù)指令sbit RW =P21; /讀寫sbit E =P22; /使能sbit CSL =P23; /左片選sbit CSR =P24; /右片選 uchar Page; /頁(yè) 地址uchar Col; /列 地址 uchar code BMP1; /一幅圖uchar code HZK_12; /1212陣點(diǎn)字模uchar code ASC_5x7; /57陣點(diǎn)字模uchar str4;/*AT24C16引腳定義*/

14、sbit SDA =P16; /數(shù)據(jù)sbit SCL =P17; /時(shí)鐘/*/*LCD12864函數(shù)定義*/void BusyL(void); /左屏檢測(cè)忙void BusyR(void); /右屏檢測(cè)忙void CheckBusy(void); /讀取忙信號(hào)void Delay(uint MS); /延時(shí)void Locatexy(void); /將屏幕橫向0-12縱向07轉(zhuǎn)換成左、右屏的的X、Yvoid WriteCommandL( uchar CommandByte ); /向左屏寫入指令void WriteCommandR( uchar CommandByte ); /向右屏寫入指令u

15、char ReadData( void ); /讀數(shù)據(jù)void WriteData( uchar DataByte ); /寫數(shù)據(jù)void LcmClear( void ); /清屏void LcmInit( void ); /初始化void LcmPutBMP( uchar *puts ); /顯示一幅圖void LcmReverseBMP( void ); /將整屏反顯void LcmPutHZ_12( uchar x,uchar y,uchar HZcode ); /在屏幕上任意點(diǎn)顯示一個(gè)1212漢字uchar * uchartostr(unsigned char unm); /將值轉(zhuǎn)成

16、字符串void LcmPutAsc( uchar asc ); /顯示一個(gè)57的ASC字符void LcmPutstr( uchar row,uchar y,uchar * str ); /在設(shè)定位置顯示字符串void LcmPutpoint( uchar ro,uchar lie,uchar colour ); /在設(shè)定位置顯示一個(gè)點(diǎn)/*AT24C16函數(shù)定義*/*向總線上發(fā)送n字節(jié)數(shù)*/bit write_nbyte(uchar block_addr,uchar addr,uchar *s,uchar numb);/*從總線上讀取n個(gè)字節(jié)數(shù)*/bit read_nbyte(uchar bl

17、ock_addr,uchar addr,uchar *s,uchar numb);/*說(shuō)明:block_addr 存儲(chǔ)器的塊地址選0-8addr 存儲(chǔ)器的存儲(chǔ)地址*s 一般是用在數(shù)組的首地址numb 要寫入的字節(jié)數(shù)*/*/*檢查Busy */*/void BusyL(void) CSL= 1; CSR= 0; CheckBusy(); void BusyR(void) CSL= 0; CSR= 1; CheckBusy(); void CheckBusy(void) RS = 0; /指令 RW = 1;DataPort= 0xFF; /輸出0xff以便讀取正確 E = 1; _nop_();

18、 while(0);/DataPort & 0x80); /Status Read Bit7 = BUSY E = 0; _nop_(); /*/*根據(jù)設(shè)定的坐標(biāo)數(shù)據(jù),定位LCM上的下一個(gè)操作單元位置 */*/void Locatexy(void) uchar x,y; switch (Col&0xc0) /* col.and.0xC0 */ /*條件分支執(zhí)行 */ case 0: BusyL();break;/*左區(qū) */ case 0x40: BusyR();break;/*右區(qū) */ x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*

19、/ y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */ CheckBusy(); /* waitting for enable */ RS = 0; /指令 RW = 0; /寫 DataPort = y; /設(shè)置頁(yè)面地址 E = 1; _nop_(); E = 0; _nop_(); CheckBusy(); /* waitting for enable */ RS = 0; RW = 0; DataPort = x; /設(shè)置列地址 E = 1; _nop_(); E = 0; _nop_(); /*/*寫指令 */*/void WriteC

20、ommandL( uchar CommandByte ) BusyL(); DataPort = CommandByte; RS = 0; /指令 RW = 0; E = 1; _nop_(); E = 0; _nop_(); void WriteCommandR( uchar CommandByte ) BusyR(); DataPort = CommandByte; RS = 0; /指令 RW = 0; E = 1; _nop_(); E = 0; _nop_(); /*/*讀數(shù)據(jù) */*/uchar ReadData( void ) uchar DataByte; Locatexy()

21、; /*坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變 */ RS = 1; /*數(shù)據(jù)輸出*/ RW = 1; /*讀入 */ DataPort = 0xFF; /輸出0xff以便讀取正確 E = 1; /*讀入到LCM*/ _nop_(); DataByte = DataPort; /*數(shù)據(jù)讀出到數(shù)據(jù)口P1 */ E = 0; _nop_(); return DataByte; /*/*寫數(shù)據(jù) */*/void WriteData( uchar DataByte ) Locatexy(); /*坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變 */ RS = 1; /*數(shù)據(jù)輸出*/ RW = 0; /*寫輸出 */ Da

22、taPort = DataByte; /*數(shù)據(jù)輸出到數(shù)據(jù)口 */ E = 1; /*寫入到LCM*/ _nop_(); E = 0; _nop_(); void LcmClear( void ) Page = 0; Col = 0; for(Page=0;Page8;Page+) for(Col=0;Col128;Col+) WriteData(0); void LcmInit( void ) Delay(200); /等待復(fù)位 WriteCommandL(0x3f); /開(kāi)顯示 WriteCommandR(0x3f); WriteCommandL(0xc0); /設(shè)置起始地址=0 Write

23、CommandR(0xc0); WriteCommandL(0x3f); /開(kāi)顯示 WriteCommandR(0x3f); LcmClear(); Col = 0; Page= 0; Locatexy();void LcmPutBMP( uchar *puts ) uint X=0; Page = 0; Col = 0; for(Page=0;Page8;Page+) for(Col=0;Col128;Col+) WriteData( putsX ); X+; void LcmReverseBMP( void ) uchar temp; Page = 0; Col = 0; for(Page

24、=0;Page8;Page+) for(Col=0;Col128;Col+) temp = ReadData(); /空讀一次 temp = ReadData(); temp = temp; WriteData(temp); void LcmPutHZ_12( uchar x,uchar y,uchar HZcode ) uchar offset,Rd,Wt,m,tmp,i; uint n; if(x117&y3; Col=x; n = 0x18*HZcode; offset=y&0x07; if(offset0;i-) Rd=ReadData(); Rd=ReadData(); m=HZK_

25、12n; Wt=Rd&(0xff(8-offset)|(m(8-offset)|(moffset)|(Rd&(0xff0;i-) Rd=ReadData(); Rd=ReadData(); m=HZK_12n; Wt=Rd&(0xff(8-offset)|(m(8-offset)|(m(8-offset)|(Rd&(0xff(offset-4); WriteData(Wt); Page=Page-2;/恢復(fù)位置 Col+; /修正下一個(gè)漢字的起始位置 uchar * uchartostr(uchar unm)uchar x00,xx,x0,x,n;x00=unm/100;xx=unm%100;

26、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; return str;void LcmPutAsc( uchar asc ) uchar j; uint x; x = 5*(asc-32); for(j=0;j5;j+) WriteData(ASC_5x7x); x+; Col+; WriteData(0x00); Col+;void LcmPutstr( uchar row,uchar y,uchar * str ) u

27、nsigned char * x; x=str;Page=row;Col=y;while(*x!=0) LcmPutAsc( *x ); x+;void LcmPutpoint( uchar ro,uchar lie,uchar colour ) /畫點(diǎn)函數(shù) if(ro64)&(lie3; /頁(yè)等于行數(shù)row與00111000B再右移3位 offsetbit=ro&0x07; /偏移量為行數(shù)與00000111 modbyte=1; modbyte= offsetbit; /輸出位的模00000001左移offsetbit位 outByte=ReadData(); outByte=ReadDat

28、a(); if(colour=0) modbyte=modbyte; outByte=modbyte&outByte; /輸出位不影響其它位 else outByte=modbyte|ReadData(); /輸出位不影響其它位 WriteData(outByte); void Delay(uint MS) uchar us,usn; while(MS!=0) usn = 2; /for 12M while(usn!=0) us=0xf6; while (us!=0)us-; usn-; MS-; /下面是24c016的函數(shù)/*/連線表: CPU=89C51 SysClock=12MHz */

29、SDL=P1.6 SCL=P1.7/*/*起始信號(hào)*/void start_iic()SDA=1;SCL=1;_nop_();_nop_();SDA=0;_nop_();_nop_();SCL=0;/*/*停止信號(hào)*/void stop_iic()SDA=0;SCL=1;_nop_();_nop_();SDA=1;_nop_();_nop_();SCL=0;/*/*產(chǎn)生應(yīng)答信號(hào)*/void ack_iic()SDA=0;SCL=1;_nop_();_nop_();SCL=0;SDA=1;/*/*產(chǎn)生非應(yīng)答信號(hào)*/void nack_iic()SDA=1;SCL=1;_nop_();_nop_(

30、);SCL=0;SDA=0;/*/*向總線上發(fā)送一個(gè)字節(jié)數(shù)據(jù)*/write_byte(uchar c)uchar i;for(i=0;i8;i+) if(c&0x80) SDA=1; else SDA=0; SCL=1; _nop_(); _nop_(); SCL=0; c=c1;SDA=1;SCL=1;_nop_();_nop_();if(SDA=1) F0=0;else F0=1;SCL=0;/*/*從總線上讀取一個(gè)字節(jié)數(shù)據(jù)*/uchar read_byte()uchar i;uchar r=0;SDA=1;for(i=0;i8;i+) r=r1; SCL=1; _nop_(); _nop

31、_(); if(SDA=1) r+; SCL=0;return r;/*/*向總線上發(fā)送n字節(jié)數(shù)據(jù)*/bit write_nbyte(uchar block_addr,uchar addr,uchar *s,uchar numb)/*block_addr 存儲(chǔ)器的塊地址選0-8addr 存儲(chǔ)器的存儲(chǔ)地址*s 一般是用在數(shù)組的首地址numb 要寫入的字節(jié)數(shù)*/uchar i,slave;start_iic();slave=0xa0|(block_addr1);write_byte(slave);if(F0=0) return 0;write_byte(addr);if(F0=0) return

32、0;for(i=0;inumb;i+) write_byte(*s); if(F0=0) return 0; s+;stop_iic();return (1);/*/*從總線上讀取n個(gè)字節(jié)數(shù)據(jù)*/bit read_nbyte(uchar block_addr,uchar addr,uchar *s,uchar numb)/*變量說(shuō)明:block_addr 存儲(chǔ)器的塊地址選0-8addr 存儲(chǔ)器的存儲(chǔ)地址*s 一般是用在數(shù)組的首地址numb 要寫入的字節(jié)數(shù)*/uchar i,slave;start_iic();slave=0xa0|(block_addr1);write_byte(slave);

33、if(F0=0) return 0;write_byte(addr);if(F0=0) return 0;start_iic();slave=0xa1|(block_addr1);write_byte(slave);if(F0=0) return 0;for(i=0;inumb-1;i+) *s=read_byte(); ack_iic(); s+;*s=read_byte();nack_iic();stop_iic();return (1);/*/void Main( void ) uchar x,i; uchar *ascii; uchar abcd9; LcmInit(); LcmCle

34、ar(); ascii=abcd; /write_nbyte(0,0,ascii,8); read_nbyte(0,0,ascii,8); while(1) LcmClear(); LcmPutBMP(BMP1); Delay(3000); LcmClear(); /LcmReverseBMP(); Delay(1000); /LcmClear(); /* x=0; for(i=0;i8;i+) LcmPutHZ_12(x,i*7,i); x=x+16; */ LcmPutstr( 3,40,ascii ); LcmPutstr( 5,40,AT24C16! ); Delay(5000); u

35、nsigned char code BMP1= /字節(jié)倒序/- 調(diào)入了一幅圖像:E:!Program!BmpSample12864.bmp /寬度x高度=1264 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,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,0xF

36、F,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,0x00, 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,0

37、x7F,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,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

38、, 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,0x00, 0x10,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0

39、xFF,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,0x00,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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論