利用简单的电阻分压原理自动测量电阻
1.直接展示while循环函数 2.需要外接继电器完成工作 3.采用PF(1)-PF(6)控制继电器
while (1)///直接显示while循环的内容{ if((temp<0.8196&&i!=1)||temp>=3.2)///一直在判断要检测的电阻值是否分压合适。如果太大或太小,需要换档 { i=6; PFout(1)=0; PFout(6)=1;///我采用的换档方法是从高到低 (从6档到1档),这里换档是6档 adcx=Get_Adc_Average(ADC_Channel_1,10); LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 temp=(float)adcx*(3.3/4095); cons=temp; adcx=cons; LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 cons-=adcx; cons*=1000; LCD_ShowxNum(172,150,temp,3,16,0X80); if(temp>0.8196&&temp<3.2)//如果6档使电压满足的话就直接转为UPD测量函数 goto UPD; delay_ms(1000); for(i=5;i>1;i--)//如果6档不满足的话就会到这个for循环 从6档 检测到 1 档 哪个适合用哪个测量 {
m=i+1; PFout(m)=0; PFout(i)=1; adcx=Get_Adc_Average(ADC_Channel_1,10); LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 temp=(float)adcx*(3.3/4095); cons=temp; adcx=temp; LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值 cons-=adcx; cons*=1000; LCD_ShowxNum(172,150,temp,3,16,0X80); if(temp>0.8&&temp<3.2)//此处就为哪个挡位适合 在哪个挡位跳for循环 进行测量函数(UPD就是测量函数) break; delay_ms(1000); } } upd: //根据挡位不同进行不同的计算 得出电阻 {
switch(i) {
case(1): if(temp>2) // 1 dang temp1=temp+temp/60;//+temp/10; temp1=temp; break; case(2):// 2dang temp1=temp+temp/100; if(temp>2) temp1=temp+temp/60; break; case(3): //3dang temp1=temp+temp/100; if(temp>2&&temp<=2.7) temp1=temp+temp/60; else if (temp>2.7) temp1=temp+temp/40; break; case(4): //4dang temp1=temp+temp/100; if (temp>1.5&&temp<=2) temp1=temp+temp/50; else if(temp>2&&temp<=2.4) temp1=temp+temp/60; else if (temp>2.4) temp1=temp+temp/40; break; case(5)://5dang temp1=temp+temp/45; if(temp>2&&temp<2.7) temp1=temp+temp/40; else if(temp>=2.7) temp1=temp+temp/30; break; case(6)://6dang temp1=temp+temp/100; if(temp>2&&temp<2.5) temp1=temp+temp/50; else if(temp>=2.5) temp1=temp+temp/10; break; } }}