|
adc0809測(cè)量范圍為5V,如果大于5V,就要分壓;
自動(dòng)切換量程,就是先采集分壓之后的電壓,如果過(guò)小,就通過(guò)繼電器換路,進(jìn)行直接測(cè)量
電路原理圖如下:
NHQ$$XGKU9UV7LH[~{DY.png (194.49 KB, 下載次數(shù): 35)
下載附件
電路仿真圖
2018-7-19 20:31 上傳
單片機(jī)源碼:
- #include<regx51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define Duan P2
- #define Wei P1
- sbit START=P0^0;
- sbit EOC=P0^1;
- sbit max=P0^2;
- unsigned char code smg_duan[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char code smg_duan1[] ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
- unsigned char code smg_wei[] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- void delay_ms(int t){
- int i;
- for(t;t>0;t--)
- for(i=110;i>0;i--);
- }
- void display(long num)
- {
- long num1[8],i;
- num1[7] = num/10000000;
- num1[6] = (num/1000000)%10;
- num1[5] = (num/100000)%10;
- num1[4] = (num/10000)%10;
- num1[3] = (num/1000)%10;
- num1[2] = (num/100)%10;
- num1[1] = (num/10)%10;
- num1[0] = num%10;
- for(i=0;i<8;i++){
- Wei = smg_wei[i];
- if(i==4)
- Duan = smg_duan1[num1[i]];
- else
- Duan = smg_duan[num1[i]];
- delay_ms(1);
- }
- }
- void main(){
- uint ad_value;
- long dis;
- while(1){
- max=0;
- display(dis);
- START = 0;
- START = 1;
- _nop_();
- _nop_();
- START = 0; //產(chǎn)生下降沿,啟動(dòng)AD
- while(!EOC);
- P3=0xff;
- ad_value=P3;
- dis=(ad_value)*196.0784*20;
- if(dis<=5) //直接測(cè)量
- {
- max=1;
- display(dis);
- START = 0;
- START = 1;
- _nop_();
- _nop_();
- START = 0; //產(chǎn)生下降沿,啟動(dòng)AD
- while(!EOC);
- P3=0xff;
- ad_value=P3;
- dis=(ad_value)*196.0784;
- }
-
- //display(dis);
- //delay_ms(10);
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|