以下は、符号なしint関数get_ADC_value()
によって設定された特定の周波数で2多重化7セグメントディスプレイを駆動しようとするC(PIC18F8722マイクロプロセッサ用)で書いた主な機能です。ディスプレイには現在の多重化周波数も表示されます。この周波数範囲は、Iがint
からfloat
への暗黙的な変換があると思いしかし働かない範囲LAB_FminとLAB_Fmaxになるように#define
によって設定されget_ADC_value()
増加するにつれてスケーリングしなければならない、または0から255Cでfloatを使用する/使用しないで割り算
このコードに減少しますfreq =
。
このエラーを浮動小数点数で修正し、整数型(int
、char
...)のみを使用して代替を見つけることが課題です。
while (1) {
unsigned int x, y, z;
float freq, delay;
x = get_ADC_value();
y = x & 0b00001111;
z = (x & 0b11110000) >> 4 ;
freq = LAB_Fmin + (((LAB_Fmax) - (LAB_Fmin))/ 255)*x ;
delay = 1/(freq*1000); // convert hZ to ms delay accurately
LATF = int_to_SSD(y);
LATH = 0b11111110; //enable 7seg U1
for (unsigned int i = 0; i<(delay) ; i++){
Delay10TCYx(250); //1ms delay
}
LATF = int_to_SSD(z);
LATH = 0b11111101; //enable 7seg U2
for (unsigned int j = 0; j<(delay) ; j++){
Delay10TCYx(250); //1ms delay
}
}
1hzは1000msecの遅延、2Hzは500msecなので、遅延計算は 'delay = 1000/freq'であるはずです。 – user3386109
@MitchWheat:あなたの答えは受け入れないでください。他の、新しい、答えが出てくるかもしれないかどうかをしばらく待つのは良いことです。それは3時間だけです!私は215k - repのユーザーがそれを知っていると思います。 –
私は自分の答えを受け入れるよう求めていません。ポスターは任意の回答を受け入れることができます。私は218Kのユーザーがそれを理解すると期待しています! –