<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機 EEPROM 24c02 I2C代碼封裝保存實(shí)現流水燈

51單片機 EEPROM 24c02 I2C代碼封裝保存實(shí)現流水燈

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
這里把EEPROM 24c02封裝起來(lái),今后可以直接調用,其連線(xiàn)方式為:SDA-P2.1;SCL-P2.0;WP-VCC

>_<:i2c.c

本文引用地址:http://dyxdggzs.com/article/201611/318336.htm
1 /*--2 名稱(chēng):IIC協(xié)議 3 內容:函數是采用軟件延時(shí)的方法產(chǎn)生SCL脈沖,固對高晶振頻率要作 一定的修改....(本例是1us機器4 周期,即晶振頻率要小于12MHZ)5 */  6 #include "i2c.h"7 #define  _Nop()  _nop_()  //定義空指令8 bit ack;                  //應答標志位9 sbit SDA=P2^1;10 sbit SCL=P2^0;11 /*12 uS延時(shí)函數,含有輸入參數 unsigned char t,無(wú)返回值13 unsigned char 是定義無(wú)符號字符變量,其值的范圍是14 0~255 這里使用晶振12M,精確延時(shí)請使用匯編,大致延時(shí)15 長(cháng)度如下 T=tx2+5 uS 16 */17 void DelayUs2x(unsigned char t)18 {   19     while(--t);20 }21 /*22 mS延時(shí)函數,含有輸入參數 unsigned char t,無(wú)返回值23 unsigned char 是定義無(wú)符號字符變量,其值的范圍是24 0~255 這里使用晶振12M,精確延時(shí)請使用匯編25 */26 void DelayMs(unsigned char t)27 {28     while(t--)29     {30         //大致延時(shí)1mS31         DelayUs2x(245);32         DelayUs2x(245);33     }34 }35 /*36 啟動(dòng)總線(xiàn)37 */38 void Start_I2c()39 {40     SDA=1;   //發(fā)送起始條件的數據信號41     _Nop();42     SCL=1;43     _Nop();    //起始條件建立時(shí)間大于4.7us,延時(shí)44     _Nop();45     _Nop();46     _Nop();47     _Nop();    48     SDA=0;     //發(fā)送起始信號49     _Nop();    //起始條件鎖定時(shí)間大于4μ50     _Nop();51     _Nop();52     _Nop();53     _Nop();       54     SCL=0;    //鉗住I2C總線(xiàn),準備發(fā)送或接收數據55     _Nop();56     _Nop();57 }58 /*59 結束總線(xiàn)60 */61 void Stop_I2c()62 {63     SDA=0;    //發(fā)送結束條件的數據信號64     _Nop();   //發(fā)送結束條件的時(shí)鐘信號65     SCL=1;    //結束條件建立時(shí)間大于4μ66     _Nop();67     _Nop();68     _Nop();69     _Nop();70     _Nop();71     SDA=1;    //發(fā)送I2C總線(xiàn)結束信號72     _Nop();73     _Nop();74     _Nop();75     _Nop();76 }77 /*-78 字節數據傳送函數               79 函數原型: void  SendByte(unsigned char c);80 功能:  將數據c發(fā)送出去,可以是地址,也可以是數據,發(fā)完后等待應答,并對81 此狀態(tài)位進(jìn)行操作.(不應答或非應答都使ack=0 假)     82 發(fā)送數據正常,ack=1; ack=0表示被控器無(wú)應答或損壞。83 */84 void  SendByte(unsigned char c)85 {86     unsigned char BitCnt;87     for(BitCnt=0;BitCnt<8;BitCnt++)  //要傳送的數據長(cháng)度為8位88     {89         if((c<

>_<:i2c.h

1 /*--2   名稱(chēng):IIC協(xié)議 頭文件3 */  4 #ifndef __I2C_H__5 #define __I2C_H__           6 #include           //頭文件的包含7 #include 8 #define  _Nop()  _nop_()        //定義空指令9 /*--10  uS延時(shí)函數,含有輸入參數 unsigned char t,無(wú)返回值11  unsigned char 是定義無(wú)符號字符變量,其值的范圍是12  0~255 這里使用晶振12M,精確延時(shí)請使用匯編,大致延時(shí)13  長(cháng)度如下 T=tx2+5 uS 14 */15 void DelayUs2x(unsigned char t);16 /*17  mS延時(shí)函數,含有輸入參數 unsigned char t,無(wú)返回值18  unsigned char 是定義無(wú)符號字符變量,其值的范圍是19  0~255 這里使用晶振12M,精確延時(shí)請使用匯編20 */21 void DelayMs(unsigned char t);22 /*23                     啟動(dòng)總線(xiàn)24 */25 void Start_I2c();26 /*27                     結束總線(xiàn)28 */29 void Stop_I2c();30 /*-31                  字節數據傳送函數               32 函數原型: void  SendByte(unsigned char c);33 功能:  將數據c發(fā)送出去,可以是地址,也可以是數據,發(fā)完后等待應答,并對34      此狀態(tài)位進(jìn)行操作.(不應答或非應答都使ack=0 假)     35      發(fā)送數據正常,ack=1; ack=0表示被控器無(wú)應答或損壞。36 */37 void  SendByte(unsigned char c);38 /*-39                  字節數據傳送函數               40 函數原型: unsigned char  RcvByte();41 功能:  用來(lái)接收從器件傳來(lái)的數據,并判斷總線(xiàn)錯誤(不發(fā)應答信號),42      發(fā)完后請用應答函數。  43 */    44 unsigned char  RcvByte();45 /*-46                      應答子函數47 原型:  void Ack_I2c(void);48 -*/49 void Ack_I2c(void);50 /*-51                      非應答子函數52 原型:  void NoAck_I2c(void);53 -*/54 void NoAck_I2c(void);55 /*-56                     向無(wú)子地址器件發(fā)送字節數據函數               57 函數原型: bit  ISendByte(unsigned char sla,ucahr c);  58 功能:     從啟動(dòng)總線(xiàn)到發(fā)送地址,數據,結束總線(xiàn)的全過(guò)程,從器件地址sla.59            如果返回1表示操作成功,否則操作有誤。60 注意:    使用前必須已結束總線(xiàn)。61 -*/62 bit ISendByte(unsigned char sla,unsigned char c);63 64 /*-65                     向有子地址器件發(fā)送多字節數據函數               66 函數原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  67 功能:     從啟動(dòng)總線(xiàn)到發(fā)送地址,子地址,數據,結束總線(xiàn)的全過(guò)程,從器件68           地址sla,子地址suba,發(fā)送內容是s指向的內容,發(fā)送no個(gè)字節。69            如果返回1表示操作成功,否則操作有誤。70 注意:    使用前必須已結束總線(xiàn)。71 -*/72 bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);73 /*-74                     向無(wú)子地址器件讀字節數據函數               75 函數原型: bit  IRcvByte(unsigned char sla,ucahr *c);  76 功能:     從啟動(dòng)總線(xiàn)到發(fā)送地址,讀數據,結束總線(xiàn)的全過(guò)程,從器件地77           址sla,返回值在c.78            如果返回1表示操作成功,否則操作有誤。79 注意:    使用前必須已結束總線(xiàn)。80 -*/81 bit IRcvByte(unsigned char sla,unsigned char *c);82 /*-83                     向有子地址器件讀取多字節數據函數               84 函數原型: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  85 功能:     從啟動(dòng)總線(xiàn)到發(fā)送地址,子地址,讀數據,結束總線(xiàn)的全過(guò)程,從器件86           地址sla,子地址suba,讀出的內容放入s指向的存儲區,讀no個(gè)字節。87            如果返回1表示操作成功,否則操作有誤。88 注意:    使用前必須已結束總線(xiàn)。89 -*/90 bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);91 #endif

>_<:下面是main函數中如何調用封裝好的函數來(lái)實(shí)現流水燈的效果的:
>_<:流水燈8個(gè)的連線(xiàn)這里用的是P1

1 /*--2 名稱(chēng):IIC協(xié)議 24c02存儲花樣燈程序3 內容:將表格內容寫(xiě)入24c02,然后批量刪除這些數據,4 并從24c02中讀取數據并顯示5 */  6 #include                 7 #include "i2c.h"8 /*9 花樣燈表格10 */11 unsigned char      dat[]={0x7f,0xbf,0xdf,0xef,12 0xf7,0xfb,0xfd,0xfe,13 0xff,0xff,0x00,0x00,14 0x55,0x55,0xaa,0xaa15 };//ram允許情況可以無(wú)限添加16 /*17   主函數18 */19 main()20 {21     //bit flag;22     unsigned char i;23     ISendStr(0xae,80,dat,16);            //寫(xiě)入24c0224     DelayMs(1);                          //寫(xiě)入后必須延時(shí)等待24c02內部25     //燒錄數據處理完畢方可繼續其他操作26     for(i=0;i<16;i++)                    //清除數據27         dat[i]=0;28     IRcvStr(0xae,80,dat,16);             //從24c02讀出數據 29     while(1)30     {31         for(i=0;i<16;i++)              //查表32         {33             DelayMs(200);34             P1=dat[i];35         }36     }37 }



關(guān)鍵詞: 51單片機EEPROMI2C流水

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>