AT24C02EEPROM芯片《實現(xiàn)對其讀和寫》
并可以保證在系統(tǒng)掉電后,重新加電時,可以讀出上次掉電瞬間所保存的值。
本文引用地址:http://m.butianyuan.cn/article/201612/324253.htm演示方法: 下載程序后,數(shù)碼管開始顯示自加數(shù)值。片刻后,關閉學習板
電源,然后打開,會發(fā)現(xiàn)數(shù)碼管上顯示的數(shù)值是斷電瞬間所顯
示的數(shù)值。(也即由AT24C02EEPROM芯片所記憶的數(shù)值。)
//試驗AT24C02EEPROM芯片程序
#include
#include
#define uint unsigned int
#define uchar unsigned char
unsigned char sec,num; //定義計數(shù)值,每過1秒,sec加1
unsigned int times; //定時中斷次數(shù)
bit write=0; //寫24C02的標志;
sbit sda=P2^0; //IO口定義
sbit scl=P2^1;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char j,k;
void delay(unsigned char i) //延時程序
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //數(shù)碼管編碼
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void nop()
{
_nop_();
_nop_();
}
void display(uchar a,uchar b) //顯示程序
{
dula=0;
P0=table[a]; //顯示百位
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay(5);
dula=0;
P0=table[b]; //顯示十位
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay(5);
}
/////////24C02讀寫驅(qū)動程序////////////////////
void delay1(unsigned char m)
{ unsigned int n;
for(n=0;n } void init() //24c02初始化子程序 { scl=1; nop(); sda=1; nop(); } void start() //啟動I2C總線 { sda=1; nop(); scl=1; nop(); sda=0; nop(); scl=0; nop(); } void stop() //停止I2C總線 { sda=0; nop(); scl=1; nop(); sda=1; nop(); } void writebyte(unsigned char j) //寫一個字節(jié) { unsigned char i,temp; temp=j; for (i=0;i<8;i++) { temp=temp<<1; scl=0; nop(); sda=CY; //temp左移時,移出的值放入了CY中 nop(); scl=1; //待sda線上的數(shù)據(jù)穩(wěn)定后,將scl拉高 nop(); } scl=0; nop(); sda=1; nop(); }
評論