电能表程序 子函数 疑问

2020-01-20 19:06发布

//================================================
//函数功能:根据指针读出要显示的数据
//
//==============================================
void refreshdisp_formtable(void)
{ uint8 i;
  uint8 xdata *point;
  uint8 temp_type,num_data;
  for(i=0;i<8;i++)
     { disp_buffer[i]=0;           //显示缓存                 ?
           tempLCD[i]=0;                                //?
         }
  data_addr.word[1]=dis_table[curent_dispoint].data_ID;         //获取数据ID号                          //读写地址         //显示内容列表//共82项
  if(addr_from_coreID(0,data_addr.word[1])!=0);
     { data_addr.word[1]=(*ID_coretalbpoint[0]).dataaddr;           //数据存贮地址
       temp_type=(*ID_coretalbpoint[0]).stortype;         //数据存贮类型
     }
  data_addr.word[1]=data_addr.word[1]+dis_table[curent_dispoint].offset;    //计算偏移量        //偏移
  num_data=dis_table[curent_dispoint].datalong;                                //数据长度
  Read_data(temp_type,num_data);                                           //获取显示数据
  swap_higtlow(wr_buff,num_data);                                           //数组高低位互换  高低位互换
  for(i=0;i<num_data;i++)  
     { disp_buffer[2*i]=wr_buff[i]&0x0f;
           disp_buffer[2*i+1]=(wr_buff[i]>>4)&0x0f;
         }
  for(i=0;i<6;i++)                                                  //最后一位小数不显示
     disp_buffer[i]=disp_buffer[i+1];
  num_data=6;                                                       //显示数据个数
  for(i=0;i<4;i++)                                                  //高位为0,不显示
     { if(disp_buffer[5-i]==0)
               { disp_buffer[5-i]=0xff;
                     num_data--;
                   }
           else
               { break;
                   }
         }
  for(i=0;i<num_data;i++)
     { if(i<3)
              { if(disp_buffer[i]!=0xff)
                      { tempLCD[i]|=LCD_NNumber[disp_buffer[i]]>>4;
                tempLCD[i+1]|=LCD_NNumber[disp_buffer[i]]<<4;
                          }
                   }
           else
             {
                   tempLCD[i+1]=LCD_NNumber[disp_buffer[i]];
                 }
         }
         //        tempLCD[2]|=0x08;
//        tempLCD[2]|=0x08;                                            //kw
  tempLCD[1]|=0x08;                                            //小数点
  if(mark_mode_jiaobiao)                                //判断是否为厂内模式
  {
          mark_flash=!mark_flash;
        if(mark_flash)   tempLCD[0]|=0x08;            //1000 0000
  }
  else
            tempLCD[0]|=0x08;                                            //h
  for(i=0;i<7;i++)                                                 //刷新显示
     {  point=LCD_DISaddr[i];
           *point=tempLCD[i];
         }
         
}
这个部分是用指针来刷新显示的,对其中的程序不是很理解,请各个帮解释下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。