要計算兩路電壓的dB差,不在規格值時報警。
下面這種寫法,編譯沒有報錯,數碼管上也沒有數字顯示出來。
高手幫忙看看問題出在哪。
感謝!
- //測量VR電壓\dB程序
- void Voltage_VR(void)
- {
- P1M0=0x32;P1M1=0x09; //P1.1、P1.4、P1.5推挽(測試兩端),P1.0、P1.3為高阻
- ADCA=0;ADCC=0;ADCB=0;ADCD=1;ADCE=1;//AL、BL、CL、OH,P1.5
- ADKA=0;ADKB=0;//aL、bL、cL
- Delay500us(); //延時等待穩定
- VinA=ADC_V(0x00); //讀取第0通道,R2層電壓,1-2端
- Delay500us(); //延時等待穩定
- VinB=ADC_V(0x03); //讀取第0通道,R1層電壓,1-2端
-
- // 判斷電壓,進行dB計算
- dBA=(float)20*log(VinA/VCC);
- dBB=(float)20*log(VinB/VCC);
- dB=dBA-dBB;
- if(dB>=-2.9 && VinA<=5100)
- {
- count=0; //計數清0
- }
- else if(dB<=2.9 && VinA<=5100)//else if(Vin>=4950 && Vin<=5000)
- {
- count=0; //計數清0
- }
- else //以上各分支條件都不成立,說明產品有缺陷
- {
- count++;
- if(count>=2)//當到達10ms
- {
- LEDG=1; //綠燈熄
- LEDR=0; //紅燈亮
- alarm=1;
- while(alarm & RST)//取下VR或按RST鍵退出死循環,但報錯發生在不取下VR的情況下按RST鍵復檢當前檔位
- {
- VR=exist_VR(0x05); //第5通道測量VR存在
- if(VR>=4000)alarm=0;//判斷VR沒有裝,退出死循環
- if(count2==0)//閃爍周期250ms
- {
- dis_buf[0]=~(table[dB%10]);
- dis_buf[1]=~(table[dB/10%10]|0x80);
- dis_buf[2]=~(table[25]);//'U'
- dis_buf[3]=~(table[VinA/10%10]);
- dis_buf[4]=~(table[VinA/100%10]);
- dis_buf[5]=~(table[VinA/1000%10]|0x80);//加小數點
- dis_buf[6]=~(table[25]);//'U'
- dis_buf[7]=~(table[VinB/10%10]);
- dis_buf[8]=~(table[VinB/100%10]);
- dis_buf[9]=~(table[VinB/1000%10]|0x80);//加小數點
- DisplayScan();
- }
- if(count2==125)
- {
- dis_buf[0]=~(table[16]);//不顯示
- dis_buf[1]=~(table[16]);
- dis_buf[2]=~(table[16]);
- dis_buf[3]=~(table[16]);
- dis_buf[4]=~(table[16]);
- dis_buf[5]=~(table[16]);
- dis_buf[6]=~(table[16]);
- dis_buf[7]=~(table[16]);
- dis_buf[8]=~(table[16]);
- dis_buf[9]=~(table[16]);
- DisplayScan();
- }
- Delay_ms(1);
- count2=++count2%250;
- }
- count2=0;
- }
- }
- LEDG=0; //綠燈亮
- LEDR=1; //紅燈熄
- dis_buf[0]=~(table[dB%10]);
- dis_buf[1]=~(table[dB/10%10]|0x80);
- dis_buf[2]=~(table[25]);//'U'
- dis_buf[3]=~(table[VinA/10%10]);
- dis_buf[4]=~(table[VinA/100%10]);
- dis_buf[5]=~(table[VinA/1000%10]|0x80);//加小數點
- dis_buf[6]=~(table[25]);//'U'
- dis_buf[7]=~(table[VinB/10%10]);
- dis_buf[8]=~(table[VinB/100%10]);
- dis_buf[9]=~(table[VinB/1000%10]|0x80);//加小數點
- DisplayScan(); //顯示電壓值
- }
復制代碼
|