打印
[国产单片机]

一个关于STC12C5202AD显示EEPROM数据的问题

[复制链接]
1753|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xialvfire|  楼主 | 2010-9-8 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在要用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;
}

大家帮我看下是什么问题

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝