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];
//主迴圈中添加其他需要一直工作的程式
}
}
限會員,要發表迴響,請先登入


