完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
/**********定时器0中断服务程序***************/
void timer0(void) interrupt 1 { uint j; TI=1; TH0=(65536-9174)/256;//定时10ms TL0=(65536-9174)%256; SBUF='a';while(!TI);TI=0; LED=1; Delay280us();//延时0.28ms abc=Read_AD_Data(0xe4); //开启ADC采集 FlagStar=1; for(j=0;j<5;j++); TR0=0; EA=0; LED=0; //关闭传感器LED } /************************************************************** 中值滤波 算法:先进行排序,然后将数组的中间值作为当前值返回。 **************************************************************/ uchar Error_Correct(uchar *str,uchar num) { uchar i=0; uchar j=0; uchar Temp=0; //排序 for(i=0;i for(j=i+1;j if(str[i] Temp=str[i]; str[i]=str[j]; str[j]=Temp; } } } //去除误差,取中间值 return str[num/2]; } void pm() //加入主循环 { uint Temp; if(FlagStar==1) { num++; ADC_Get[num]=abc; SBUF=ADC_Get[num];while(!TI);TI=0; if(num>9) { num=0; DUST=Error_Correct(ADC_Get,10);//求取10次AD采样的值 DUST_Value=(DUST/256.0)*5000; //转化成电压值mv DUST_Value=DUST_Value*0.17-0.1; //固体悬浮颗粒浓度计算 Y=0.17*X-0.1 X--采样电压 // if(DUST_Value<0) DUST_Value=0; // if(DUST_Value>19600) DUST_Value=760; //限位 DUST=(uint)DUST_Value; Temp=Data%10000; TxBuf[0]=Temp/1000+0x30;//千位 SBUF=TxBuf[0];while(!TI);TI=0; Temp%=1000; TxBuf[1]='.';SBUF=TxBuf[1];while(!TI);TI=0; TxBuf[2]=Temp/100+0x30;//百位 SBUF=TxBuf[2];while(!TI);TI=0; Temp%=100; TxBuf[3]=Temp/10+0x30;//十位 SBUF=TxBuf[3];while(!TI);TI=0; TxBuf[4]=Temp%10+0x30;//龌 SBUF=TxBuf[4];while(!TI);TI=0; } TH0=(65536-9174)/256;//定时10ms TL0=(65536-9174)%256; TR0=1; //开启定时器0 EA=1; FlagStar=0; } } |
|
相关推荐
1个回答
|
|
|
AD转换用的是XPT2046 12位转换芯片
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
24 浏览 0 评论
567 浏览 0 评论
735 浏览 0 评论
901 浏览 0 评论
840 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17069 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 14:07 , Processed in 1.413100 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2465