找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2785|回复: 3
打印 上一主题 下一主题
收起左侧

2017年电赛水情题目程序 超声波很准

[复制链接]
跳转到指定楼层
楼主
ID:94133 发表于 2017-11-7 20:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己做的,不太完整。超声波很准


所有资料51hei提供下载:
1号水情板.rar (321.52 KB, 下载次数: 26)

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "key.h"
  5. #include "usart.h"
  6. #include "exti.h"
  7. #include "timer.h"
  8. #include "UltrasonicWave.h"
  9. #include "lcd12864.h"
  10. #include "adc.h"
  11. extern float temp2;
  12. float temp3;
  13. int num1,num2,num3;
  14. ///////////////////////////////////***************************************************//////////////////////////////////////////////////////////
  15. u16 Wtemp,Wtemp1;
  16. float AD,AD1,ad1,PH,fPH,fU;
  17. u16 ph,U,u;
  18. /////////////////////////////////****************************************************///////////////////////////////////////////////////////////
  19. u16 i,j,n;
  20. void PHnum(void);
  21. int main(void)
  22. {
  23. // SystemInit();
  24.         delay_init(72);                  //延时初始化
  25.         NVIC_Configuration();
  26.         uart_init(9600);         //串口初始化
  27.         LED_Init();                            //LED端口初始化
  28.         KEY_Init();               //按键端口初始化
  29.         Timerx_Init(0xffff,71);   //10Khz的计数频率,计数到5000为500ms
  30.         UltrasonicWave_Configuration();               //对超声波模块初始化
  31.         Adc_Init();
  32.         LCD_init();
  33.         LCD_Putstring(1,2,"水情检测系统");
  34.         LCD_Putstring(3,1,"PH  :");
  35.         LCD_Putstring(3,2,"值");
  36.     LCD_Putstring(2,1,"水位:");
  37.     LCD_Putstring(4,1,"输出电压:");
  38.         LCD_Putstring(4,8,"V");
  39.         LCD_Putstring(2,6,"mm");
  40.         while(1)
  41.         {
  42.                
  43.          for(n=0;n<10;n++)
  44.          {
  45.                 Wtemp1=Get_Adc_Average(ADC_Channel_1,10);
  46.                 AD1=Wtemp1*3.3/4096;
  47.                 ad1=AD1*2;
  48.                 U=ad1;
  49.                 fU=ad1-U;
  50.                 u=(int)(fU*100);
  51.                 LCD_Setaddress(4,6);
  52.                 LCD_write_dat(0x30+U);
  53.                 LCD_write_dat(0x20+14);
  54.                 LCD_write_dat(0x30+u/10);
  55.                 LCD_write_dat(0x30+u%10);
  56.          }
  57.                 for(i=0;i<100;i++)
  58.                 {
  59.                         UltrasonicWave_StartMeasure();                //开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
  60.                         temp3=temp2;
  61.                         temp3=2540-temp3;
  62. //                        if((temp3>395)&&(temp3<448))
  63. //                        {
  64. //                                temp3=temp3+50;
  65. //                        }
  66. //                        if((temp3>1288)&&(temp3<1680))
  67. //                        {
  68. //                                temp3=temp3+43;
  69. //                        }
  70.                         num1=temp3;
  71.                         if(num1<0)num1=0;
  72.         //                 num2=(temp3-num1)*100;
  73.                         printf("JU %d\n",num1);
  74.                         LCD_Setaddress(2,4);
  75.                         //delay_ms(1000);               
  76.                         LCD_write_dat(0x30+(int)num1/1000);
  77.                         LCD_write_dat(0x30+(int)num1/100%10);
  78. //                        LCD_write_dat(0x20+14);
  79.                         LCD_write_dat(0x30+(int)num1/10%10);
  80. //                        LCD_write_dat(0x30+(int)num1%10);
  81.                 }
  82.                        
  83.         for(j=0;j<10;j++)
  84.         {               
  85.                         Wtemp=Get_Adc_Average(ADC_Channel_0,40);
  86.                         AD=Wtemp*3.3/4096+0.165;
  87.                          printf("PHad:%f\n",AD*2);
  88.                         AD=(int)(AD*1000);
  89.                         PHnum();              //PH值修正
  90.         //                temp2=2121-AD;
  91.         //                PH=temp2*0.0112721417096;
  92.                         ph=PH;
  93.                         fPH=(PH-ph)*100;
  94.                 printf("-----------PH:%f\n",PH);
  95.                         LCD_Setaddress(3,4);
  96.                         LCD_write_dat(0x30+ph);
  97.                         LCD_write_dat(0x20+14);
  98.                         LCD_write_dat(0x30+(int)fPH/10);

  99.                 }       
  100.        

  101.        
  102. }
  103. }


  104.   void PHnum()
  105. {
  106.                  if((2032.5<AD)&&(AD<2121)){ PH=(2121-AD)*0.0112994350282;}
  107.                 if((1942.5<AD)&&(AD<=2032.5)){ PH=1+(2032.5-AD)*0.0111111111111;}
  108.                 if((1854.9<AD)&&(AD<=1942.5)){ PH=2+(1942.5-AD)*0.0114155251141-0.128;}
  109.                 if((1766.25<AD)&&(AD<=1854.9)){ PH=3+(1854.9-AD)*0.0112803158488-0.151;}
  110.                 if((1677<AD)&&(AD<=1766.25)){ PH=4+(1766.25-AD)*0.0112044817927-0.05;}
  111.                 if((1588.75<AD)&&(AD<=1677)){ PH=5+(1677-AD)*0.0113314447592068+0.135;}
  112.                 if((1500<AD)&&(AD<=1588.75)){ PH=6+(1588.75-AD)*0.0112676056338028+0.278;}
  113.                 if((1411.25<AD)&&(AD<=1500)){ PH=7+(1500-AD)*0.0112676056338028-0.10;}       
  114.                 if((1323<AD)&&(AD<=1411.25)){ PH=8+(1411.25-AD)*0.0113314447592068;}
  115.                 if((1233.75<AD)&&(AD<=1323)){ PH=9+(1323-AD)*0.0112044817927;}       
  116. }

复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:186936 发表于 2017-11-12 01:04 | 只看该作者
借鉴借鉴
回复

使用道具 举报

板凳
ID:252495 发表于 2017-11-22 22:53 | 只看该作者
这个是什么意思啊
回复

使用道具 举报

地板
ID:252800 发表于 2017-11-23 19:28 | 只看该作者
感谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表