哪位大神做过msp430的段码LCD显示,下面那个for小循环是什...

2019-07-15 16:20发布

void Disp_Signed_Long(long Value)
{
  unsigned int i;
  unsigned long Output;
  char fNeg = 0;

  if (Value < 0)                                // Test for negative value
  {
    Value = -Value;                             // Negate value
    fNeg = 1;                                   // Set negative flag
  }

  for (i = 32, Output = 0; i; i--)              // BCD Conversion, 32-Bit
  {
    Output = __bcd_add_long(Output, Output);    //功能:两个 32 位 BCD 格式的数相加,返回和。
   
    if (Value & 0x80000000)
      Output = __bcd_add_long(Output, 1);     
   
    Value <<= 1;
  }

  if (fNeg)                                     // Display neg sign?
    Output |= 0x80000000;                       // Bit 31 indicates neg. number

  Disp_BCD(Output);
}




value是AD转换之后采集到的数值
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
阿信509
1楼-- · 2019-07-15 19:22
 精彩回答 2  元偷偷看……
goodluckydog
2楼-- · 2019-07-15 22:31
阿信509 发表于 2014-7-25 16:33
那个是不是标志位啊?

请具体说明一下,AD转换后的值是一个16位数,这样变换后的ouput是什么
阿信509
3楼-- · 2019-07-16 02:35
具体还要看Disp_BCD(Output)函数里的定义,结合上下文才行
goodluckydog
4楼-- · 2019-07-16 03:44
阿信509 发表于 2014-7-25 19:32
具体还要看Disp_BCD(Output)函数里的定义,结合上下文才行

//------------------------------------------------------------------------------
// Displays the BCD number 'Value' on the LCD display
//------------------------------------------------------------------------------
void Disp_BCD(unsigned long Value)
{

  LCDM5=LCD_Tab1[Value & 0x0f];
  Value >>= 4;
  LCDM4=LCD_Tab1[Value & 0x0f];
  Value >>= 4;
  LCDM3=LCD_Tab3[Value & 0x0f];

  LCDM2=LCD_Tab2[Value & 0x0f];
  Value >>= 4;
  LCDM2 |= LCD_Tab3[Value & 0x0f];
  LCDM1=LCD_Tab2[Value & 0x0f];

  if(p_to_p)
    LCDM1 |=0x08;

  LCDM4 |= 0x10;                                //小数点
}




goodluckydog
5楼-- · 2019-07-16 08:08
阿信509 发表于 2014-7-25 16:33
那个是不是标志位啊?

应该是数值的转化
yanyu131588
6楼-- · 2019-07-16 12:32
 精彩回答 2  元偷偷看……

一周热门 更多>