大家?guī)兔σ黄鹩懻撘幌?這是一個at24c04的程序,在編譯完后,第二次上電卻從初始化開始而不是從24c04的讀出繼續(xù)。
請大家?guī)兔χ笇б幌拢业闹饕康木褪钱斘业诙侮P(guān)掉主電源后繼續(xù)上一次的顯示。謝謝!!!!
程序;//按鍵次數(shù)顯示
/*按鍵:ad0809,da0832即s17和s21必須關(guān)閉
先把s12,s13,s14打到左邊,為了斷開與adc0809 */
#include<AT89X51.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,tt,temp,b,num;
uchar table[]={
0x3f,0x06,0x5b,
0x4f,0x66,
0x6d,0x7d,0x07,
0x7f,0x6f
};
sbit k13=P1^7; //按鍵
sbit lcd=P2^7; //標志燈
sbit wp=P1^0;
sbit scl=P1^1;
sbit sda=P1^2;
void delayus()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化
{
wp=0; //wp為寫保護位
scl=1;
delayus(); //
sda=1;
delayus(); //
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //開總開關(guān)
ET0=1; //開分開關(guān)
TR0=1; //啟動
}
void star()
{
sda=1;
scl=1;
delayus();
sda=0;
delayus();
}
void stop()
{
sda=0;
scl=1;
delayus();
sda=1;
delayus();
}
void yingda()
{
uchar t0;
scl=1;
delayus();
while((sda==1)&&(t0<250))t0++;
scl=0;
delayus();
}
void write_byte(uchar byte)
{
uchar temp,writenum;
temp=byte;
for(writenum=8;writenum>0;writenum--)
{
temp=temp<<1;
scl=0;
delayus();
sda=CY;
scl=1;
delayus();
scl=0;
delayus();
}
scl=0;
delayus();
sda=1;
}
uchar read_byte()
{
uchar readnum,rad;
scl=0;
sda=1;
delayus();
for(readnum=8;readnum>0;readnum--)
{
scl=1;
rad=(rad<<1)|sda ;
scl=0;
delayus();
}
return(rad);
}
void write(uchar add,uchar date)
{
star();
write_byte(0xa0);
yingda();
write_byte(add);
yingda();
write_byte(date);
yingda();
stop();
delayms(5);
}
uchar read(uchar add)
{
uchar shuju ;
star();
write_byte(0xa0);
yingda();
write_byte(add);
yingda();
star();
write_byte(0xa1);
yingda();
shuju=read_byte();
stop();
return(shuju);
}
void main()
{
init();
for(a=0;a<10;a++)
{
write(a,table[a]);
}
//write(a,0x00);
for(b=0;b<10;b++)
{
table=read(b);
}
while(1)
{
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
P2=0x01;
P0=table[num];
if(tt==20)
{
tt=0;
num++;
write(num,table[num]);
if(num==10)
num=0;
}
}