資源簡介
24LC02EEPROM源程序代碼,編譯便可下載使用,顯示開機次數,數碼管顯示
代碼片段和文件信息
/*********************************************************************
//名稱:24LC02存儲EEPROM
//功能:數碼管顯示開機次數
//作者:張紀寬
//時間:2011/07/28
//*******************************************************************/
#include?
#include?
#define?uint?unsigned?int
#define?uchar?unsigned?char
sbit?scl=P1^3;??//24c02?SCL
sbit?sda=P1^4;??//24c02?SDA
uchar??tablewe[]={0x000x010x020x030x040x050x060x07}; ??? ???
uchar??tableduan[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f
???????????????0x770x7c0x390x5e0x790x71};//將數據存放在程序存儲器內
uchar?t;
//===============長延時===================================================
void?delay_chang(uint?z)
{
uint?xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//===============短延時2us=================================================
void?delay_duan(void)
{
_nop_();
_nop_();
}
//===============顯示函數===================================================
void?display(uchar?iuchar?j)
{ ???
?????
?? ?????P0=tableduan[i];//送段選?共陰顯示0
?????P2=tablewe[j];
?????delay_chang(2);
}
/********************************************************************
I2C執行的幾個步驟
1:總線初始化
2:啟動信號
3:應答信號
4:停止信號
5:寫一個字節
6:讀一個字節
7:終止信號
/*************************************************
/********************************************************************
*?名稱?:?x24c02_init()
*?功能?:?總線初始化子程序
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?x24c02_init(void)?
{
scl?=?1;
delay_duan();
sda?=?1;
delay_duan();
}
//將總線都拉高以釋放總線
/********************************************************************
*?名稱?:?start(void)
*?功能?:?啟動I2C總線
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?start(void)
{
sda?=?1;
delay_duan();?
scl?=?1;?
delay_duan();
sda?=?0;?
delay_duan();?
//scl?=?0;?
//delay_duan();
}
//SCL在高電平期間,SDA一個下降沿啟動信號
/********************************************************************
*?名稱?:?response()
*?功能?:?應答信號
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?respons()?
{
uchar?i=0;
scl=1;
delay_duan();
while((sda==1)&&(i<255))?//若在一段時間內沒有收到從期間的應答,主器件默認從器件收到數據不在等待應答
i++; ??//如果不加此延時退出,一旦器件沒有發送應答信號,程序將永遠停在這里
scl=0;
delay_duan();
}
//scl在高電平期間,sda被從設備拉為低電平表示應答
/********************************************************************
*?名稱?:?stop()
*?功能?:?停止I2C總線
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?stop
評論
共有 條評論