我现在做了个24c02的读写程序,目前遇到了一个问题:
我的24c02已经有8个数据了,目前程序就是读出这8个数据。
但是在开机上电后,读出数据显示为8个00,再按一下复位按钮
显示的8个数据就正常了,有意思的是我再按复位按钮,显示的
数据比正常数据加了7(比如正常数据是01,显示就是08),再
复位一次再加7,不知道是什么原因。
为什么会上电读数据为全00,复位一次显示正确,复位2次又出错??
这个程序问题应该出在什么地方?是我的数据传递有问题吗?
下面是我的程序:
void main(void)
{
CY=0;
fg_SYS.data_one=1; //个位开始显示
fg_SYS.data_ten=0;
fg_SYS.data_hdrd=0;
fg_SYS.data_thsd=0;
Delay_1s();
// init_all_reg2();
// write_EEPROM_DATA();//写24c02,这个应该没有问题
EEPROM_DATA_num=0;
write_ACK();
stop_EEPROM();
read_EEPROM_DATA();
Delay_1s();
TMOD = 0x11;
TMOD|=1;
TH0=0xec;//timer0初值
TL0=0x78;
ET0=1;
TR0=1;
EA=1;
EEPROM_DATA_num=0;
INTT0_TIMES_1sec=400;
while(1)
{
if(fg_SYS.time_1s==1) //一秒更新一个数据用于显示
{
DATA_one=EEPROM_DATA_buf1[EEPROM_DATA_num]&0x0f;//显示数据低位段码
DATA_ten=(EEPROM_DATA_buf1[EEPROM_DATA_num]>>4)&0x0f;//显示数据高位段码
EEPROM_DATA_num=EEPROM_DATA_num++;
if(EEPROM_DATA_num>7) //循环显示
{
EEPROM_DATA_num=0;
}
fg_SYS.time_1s=0;
}
if(fg_SYS.time_10ms==1)//10毫秒扫描4位数码管
{
if(fg_SYS.data_one) //显示数据低4位
{
DISPLAY_SEGA_data=DATA_one;;//显示数据低位段码
NUM_1X=0;
NUM_10X=1;
NUM_100X=1;
NUM_1000X=1;
display();
fg_SYS.data_one=0;
fg_SYS.data_ten=1;
}else{
if(fg_SYS.data_ten);//显示数据高4位
{
NUM_1X=1;
NUM_10X=0;
NUM_100X=1;
NUM_1000X=1;
DISPLAY_SEGA_data=DATA_ten;;//显示数据高位段码
display();
fg_SYS.data_ten=0;
fg_SYS.data_hdrd=1;
}else{
/* if(fg_SYS.data_hdrd);//后两位显示暂时不用
{
NUM_1X=1;
NUM_10X=1;
NUM_100X=0;
NUM_1000X=1;
DISPLAY_SEGA_data=DATA_hundred;
display();
fg_SYS.data_hdrd=0;
fg_SYS.data_thsd=1;
}else{
if(fg_SYS.data_thsd)
{
NUM_1X=1;
NUM_10X=1;
NUM_100X=1;
NUM_1000X=0;
DISPLAY_SEGA_data=DATA_thousand;
display();
fg_SYS.data_thsd=0;
fg_SYS.data_one=1;
}
}
}*/
}
fg_SYS.time_10ms=0;
}
}
}
//显示程序
void display()
{
switch(DISPLAY_SEGA_data)
{
case 0: P0=0xc0; break;//显示0 //共阳
case 1: P0=0xf9; break;//显示1
case 2: P0=0xa4; break;//显示2
case 3: P0=0xb0; break;//显示3
case 4: P0=0x99; break;//显示4
case 5: P0=0x92; break;//显示5
case 6: P0=0x82; break;//显示6
case 7: P0=0xf8; break;//显示7
case 8: P0=0x80; break;//显示8
case 9: P0=0x90; break;//显示9
case 10: P0=0x88; break;//显示A
case 11: P0=0x83; break;//显示b
case 12: P0=0xc6; break;//显示c
case 13: P0=0xa1; break;//显示d
case 14: P0=0x86; break;//显示E
case 15: P0=0x8e; break;//显示F
default: P0=0x8c;//显示错误 P
}
} |