c-如何使用switch语句在7段显示器上显示数字



所以,这可能是一个微控制器的问题,但我的代码有问题,所以我想可能有人至少可以给我一个提示。我正在尝试将一个电位计连接到一个7段显示器上,它可以接收2V(最小(到3.3V(最大(。如何将ATD(电位计(值连接到开关箱?

void light7segment(unsigned int cnt)       //convert ATD value
{


}

上面的代码是一个函数,它将接受ATD值,并在light7segment中使用set_7segment((中的case语句。

void main ()
{
unsigned int i;


//Insert Application Software Here
for (;;){     
i= Atd0.atddr[8].d10;       //get ATD value

light7segment(i);   // display ATD value on 7-seg

}

for (;;);
}


void set_7segment(unsigned char number) 
{
switch (number) 
{
case 0 : 
Pim.pth.byte=0b00111111;      //display 0 in 7-seg
break;  
case 1 : 
Pim.pth.byte=0b00000110;      //display 1 in 7-seg
break;
case 2 : 
Pim.pth.byte=0b01011011;      //display 2 in 7-seg
break;
case 3 : 
Pim.pth.byte=0b01001111;      //display 3 in 7-seg
break;
case 4 : 
Pim.pth.byte=0b01100110;      //display 4 in 7-seg
break;
case 5 : 
Pim.pth.byte=0b01101101;      //display 5 in 7-seg
break;
case 6 : 
Pim.pth.byte=0b01111101;      //display 6 in 7-seg
break;
case 7 : 
Pim.pth.byte=0b00100111;      //display 7 in 7-seg
break;
case 8 : 
Pim.pth.byte=0b01111111;      //display 8 in 7-seg
break;                                        
case 9 : 
Pim.pth.byte=0b01101111;      //display 9 in 7-seg
break;
case 10 :
Pim.pth.byte=0b00000000;      //turn off 7-seg
break;  
default:
break;
}
return; 
}

你的问题不是很清楚——它似乎更像是";如何将当前pot值映射到范围0..10">

由于10对应于OFF,我假设您只想将数字化锅值0映射到10。在这种情况下,需要将1..max_pot_value映射到0..9,尽管我们只将0...max_pot_value映射到该范围上,并对0进行特殊处理。

这样做的方法是取你的最大罐值,然后除以10——这就得到了每个桶的大小。然后你把你的收入除以这个桶的大小。假设您的ATD值为0..2047,则存储桶大小为2041,因此从0203的所有内容都映射到0,从204407映射到1,等等。

#define MAX_POT_VALUE 2047 // replace with the actual max value
void light_7segment( unsigned int cnt )
{
unsigned int stepSize = MAX_POT_VALUE / 10;
unsigned int map = cnt ? cnt/stepSize : 10; // if cnt != 0, then map = cnt/stepSize, otherwise map = 10
set_7segment( (unsigned char) map );
}

就我个人而言,我会使用查找表而不是switch语句:

void set_7segment( unsigned char number )
{
unsigned char segValue[11] = {
0b00111111,
0b00000110,
...
};
Pim.pth.byte = segValue[number];
}

但无论哪种方式都有效。


  1. 整数除法产生一个整数结果-1/2 == 03/2 == 1等。

最新更新