網路城邦
上一篇 回創作列表 下一篇  字體:
I2C 24c02讀存取對應位址之資料
2015/05/22 18:46:57瀏覽830|回應0|推薦0

I2C 24c02讀存取對應位址之資料

    修改LY-51S單晶片學習器的I2C 24C02之範例程式,讓使用者可以依按鍵的加減位址來讀取24C02記憶體內的指定位址之資料內容.

    獨立按鍵區KEY2  : 位址值加一

    獨立按鍵區KEY3  : 位址值減一

    獨立按鍵區KEY4  : 資料值加一

    獨立按鍵區KEY5  : 資料值減一

    所顯示的的值均以十進位方式顯示,以下是主程式

 

/*-----------------------------------------------

  名稱:I2C協定 24c02依位址去讀存取內容資料,並顯示之

  內容:用按鍵加減操作一個數位,數位變化後寫入24c02,

        用操作位址加減,去讀取對應位址的資料

------------------------------------------------*/ 

#include                

#include "i2c.c"

#include "delay.c"

#include "display.c"

 

sbit KEY_ADD=P3^3;  //定義按鍵輸入埠

sbit KEY_DEC=P3^4;

sbit KEY_ADR_P=P3^1; //位址增加

sbit KEY_ADR_N=P3^2; //位址減少

unsigned int i2c_adr=0;

/*-----------------------------------------------

                  主程式

------------------------------------------------*/ 

main()

{

    unsigned char num=0;

    Init_Timer0();

 

    IRcvStr(0xae,i2c_adr,&num,1);                              

                

    KEY_ADD=1; //按鍵輸入埠電平置於H

    KEY_DEC=1;

    i2c_adr=127;

   while (1)         //主迴圈

    {

        if(!KEY_ADR_P)

        {    DelayMs(10); //延時去除按鍵抖動,一般10-20ms

            if(!KEY_ADR_P)

            {

                while(!KEY_ADR_P)

                {  

                    if(i2c_adr<255) o:p="">

                    {

                        i2c_adr++;

                    }

                A:

                if(!KEY_ADR_P) goto A;    //等待按鍵鬆開

                }              

            }

        }

        if(!KEY_ADR_N)

        {    DelayMs(10); //延時去除按鍵抖動,一般10-20ms

            if(!KEY_ADR_N)

            {

                while(!KEY_ADR_N)

                {  

                    if(i2c_adr>0)

                    {

                        i2c_adr--;

                    }

                B:

                if(!KEY_ADR_N) goto B;    //等待按鍵鬆開

                }

            }

        }

 

        if(!KEY_ADD) //如果檢測到低電平,說明按鍵按下

        {

            DelayMs(10); //延時去除按鍵抖動,一般10-20ms

            if(!KEY_ADD)     //再次確認按鍵是否按下,沒有按下則退出

            {

                while(!KEY_ADD);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待

               {

                       if(num<999) span="" style="mso-spacerun: yes;" data-mce-style="mso-spacerun: yes;">    //加一操作

                {

                          num++;

                          ISendStr(0xae,i2c_adr,&num,1);  //寫入24c02 

                          DelayMs(10);

                     }

                }

           }

        }

        if(!KEY_DEC)  //如果檢測到低電平,說明按鍵按下

        {

            DelayMs(10); //延時去除按鍵抖動,一般10-20ms

            if(!KEY_DEC)     //再次確認按鍵是否按下,沒有按下則退出

           {

                while(!KEY_DEC);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待

               {

                  if(num>0)  //減一操作

                      {

                          num--;

                          ISendStr(0xae,i2c_adr,&num,1);  //寫入24c02

                          DelayMs(10);

                      }

                }

           }

        }

    IRcvStr(0xae,i2c_adr,&num,1);       //再次讀取位址內的資料

     TempData[0]=dofly_DuanMa[i2c_adr/100];        //顯示位址值

     TempData[1]=dofly_DuanMa[(i2c_adr%100)/10];

     TempData[2]=dofly_DuanMa[(i2c_adr%100)%10];

    TempData[3]=dofly_DuanMa[10];

    TempData[4]=dofly_DuanMa[num/100];          //顯示資料內容

     TempData[5]=dofly_DuanMa[(num%100)/10];

     TempData[6]=dofly_DuanMa[(num%100)%10];

      //主迴圈中添加其他需要一直工作的程式 

    }

}

( 興趣嗜好其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=PYANG&aid=23438715