现在要用STC12C5202AD中的EEPROM记录一个3位数,个十百分别记录在3个EEPROM现在的问题是在显示的程序中出现了问题,下面两种显示方式
按位循环显示,数码管显示数据完全正确
void main(void)
{
EA=1;
SP=0x70;
P1M1=0x00;
P1M0=0xff;
Delay_1s();
TMOD = 0x11;
TMOD|=1;
TH0=0xf6;//timer0初值
TL0=0x3c;
// init_all_reg();
// write_EEPROM_DATA(); //eeprom中已经有数据
read_EEPROM_DATA(); //读eeprom,读出数据正确
EEPROM_num=0;
TIME_hundred=EEPROM_data[EEPROM_num];
EEPROM_num=EEPROM_num++;
TIME_ten=EEPROM_data[EEPROM_num];
EEPROM_num=EEPROM_num++;
TIME_one=EEPROM_data[EEPROM_num];
fg_SYS.DISPLAY_one=1;//个位显示标志
ET0=1;
TR0=1;
while(1)
{
EEPROM_num=0;
DISPLAY_data_H=EEPROM_data[EEPROM_num]&0x0f;
// DISPLAY_data_H=TIME_hundred;
NUM_1X=0;
NUM_10X=1;
NUM_100X=1;
display_h();
Delay_1s();
EEPROM_num=EEPROM_num++;
DISPLAY_data_H=EEPROM_data[EEPROM_num]&0x0f;
// DISPLAY_data_H=TIME_ten;
NUM_1X=1;
NUM_10X=0;
NUM_100X=1;
display_h();
Delay_1s();
EEPROM_num=EEPROM_num++;
DISPLAY_data_H=EEPROM_data[EEPROM_num]&0x0f;
// DISPLAY_data_H=TIME_one;
NUM_1X=1;
NUM_10X=1;
NUM_100X=0;
display_h();
Delay_1s();
EEPROM_num=0;
}
}
定时扫描显示,刷新一位10毫秒,结果数码管没有任何信息
两个程序完全用一样的初始化程序就是while(1)里面程序不同
while(1)
{
if(fg_SYS.time_10ms==1)
{
fg_SYS.time_10ms=0;
if(fg_SYS.DISPLAY_one==1)
{
DISPLAY_data_H=TIME_one;
NUM_1X=0;
NUM_10X=1;
NUM_100X=1;
display_h();
fg_SYS.DISPLAY_one=0;
fg_SYS.DISPLAY_ten=1;
}else{
if(fg_SYS.DISPLAY_ten==1)
{
NUM_1X=1;
NUM_10X=0;
NUM_100X=1;
DISPLAY_data_H=TIME_ten;
display_h();
fg_SYS.DISPLAY_ten=0;
fg_SYS.DISPLAY_hdr=1;
}else{
if(fg_SYS.DISPLAY_hdr==1)
{
NUM_1X=1;
NUM_10X=1;
NUM_100X=0;
DISPLAY_data_H=TIME_hundred;
display_h();
fg_SYS.DISPLAY_hdr=0;
fg_SYS.DISPLAY_one=1;
}
}
}
}
}
//定时10ms中断
void INT_timer0(void) interrupt 1
{
TH0=0xf6;//timer0初值
TL0=0x3c;
fg_SYS.time_10ms=1;
}
//读eeprom
void read_EEPROM_DATA()
{
EEPROM_addr=0x30;
for(EEPROM_num=0;EEPROM_num<3;EEPROM_num++)
{
IAP_ADDRH=0x02;
IAP_ADDRL=EEPROM_addr;
IAP_CONTR=ENABLE_IAP;
IAP_CMD=IAP_BYTE_READ;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
nop();
EEPROM_data[EEPROM_num]=IAP_DATA;
IAP_CONTR=0x00;
IAP_CMD=0x00;
EEPROM_addr++;
}
IAP_TRIG=0xff;
IAP_ADDRH=0xff;
IAP_ADDRL=0xff;
}
//写eeprom
void write_EEPROM_DATA()
{
EEPROM_addr=0x30;
for(EEPROM_num=0;EEPROM_num<3;EEPROM_num++)
{
IAP_DATA=EEPROM_data[EEPROM_num];
IAP_ADDRH=0x02;
IAP_ADDRL=EEPROM_addr;
IAP_CONTR=ENABLE_IAP;
IAP_CMD=IAP_BYTE_WRITE;
IAP_TRIG=0x5a;
IAP_TRIG=0xa5;
nop();
nop();
nop();
nop();
IAP_CONTR=0x00;
IAP_CMD=0x00;
EEPROM_addr++;
Delay_10ms();
}
IAP_TRIG=0x00;
IAP_ADDRH=0xff;
IAP_ADDRL=0xff;
}
大家帮我看下是什么问题 |