久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3342|回復: 2
收起左側

2017年電賽簡易水情代碼,STC15W4K58S4單片機做的 求指導

[復制鏈接]
ID:507486 發表于 2019-8-3 14:32 | 顯示全部樓層 |閱讀模式
  1. /*********************************************************************************
  2. *實驗名   :簡易水情檢測系統
  3. *實驗效果        :精確的測量水位高度,PH值,輸出電壓
  4. *
  5. *********************************************************************************/
  6. #include <STC15.h>
  7. #include <string.h >
  8. #include <intrins.h>

  9. #include "oled.h"
  10. #include "adc.h"
  11. #include "GPIO.h"

  12. #define uchar unsigned char
  13. #define uint  unsigned int
  14. #define  uint32   unsigned long
  15. uchar j;

  16. sbit FM = P5^5;
  17. sbit K1 = P2^3;
  18. sbit K2 = P2^4;
  19. sbit K3 = P2^5;
  20. sbit K4 = P2^6;

  21. uint water = 0;

  22. void delay(unsigned int t)          //延遲函數//一指令是0.83us
  23. {
  24.    while(--t);         
  25. }

  26. void delay_ms(uint x)
  27. {  
  28.         uint j,i;   
  29.         for(j=0;j<x;j++)   
  30.         {   
  31.                 for(i=0;i<1100;i++);   
  32.         }  
  33. }

  34. void key()
  35. {
  36.    if(K1==0)                        //判斷是否有按下信號
  37.          {
  38.                   delay(10);                  //延時10ms
  39.                   if(K1==0)                        //再次判斷是否按下
  40.                   {
  41.                           while(K1==0);        //判斷是否松開按鍵
  42.                           FM=1;                        //打開蜂鳴器
  43.                         }        
  44.    }
  45.                  if(K2==0)                        //判斷是否有按下信號
  46.          {
  47.                   delay(10);                  //延時10ms
  48.                         if(K2==0)                        //再次判斷是否按下
  49.                         {
  50.                            while(K2==0);        //判斷是否松開按鍵
  51.                            FM=1;                        //打開蜂鳴器
  52.                         }
  53.     }
  54.          if(K3==0)                        //判斷是否有按下信號
  55.          {
  56.                   delay(10);                  //延時10ms                                          
  57.                         if(K3==0)                        //再次判斷是否按下
  58.                         {
  59.                            while(K3==0);        //判斷是否松開按鍵
  60.                            FM=0;                        //關閉蜂鳴器
  61.                         }
  62.   }
  63.          if(K4==0)                        //判斷是否有按下信號
  64.          {
  65.                   delay(10);                  //延時10ms
  66.                         if(K4==0)                        //再次判斷是否按下
  67.                         {
  68.                            while(K4==0);        //判斷是否松開按鍵
  69.                            FM=0;                        //打開蜂鳴器
  70.                         }
  71.          }

  72. }


  73. void display()
  74. {
  75.     OLED_ShowCHinese(16,0,0);//水
  76.                 OLED_ShowCHinese(32,0,1);//情
  77.                 OLED_ShowCHinese(48,0,2);//檢
  78.                 OLED_ShowCHinese(64,0,3);//測
  79.                 OLED_ShowCHinese(80,0,4);//系
  80.                 OLED_ShowCHinese(96,0,5);//統
  81.    
  82.                 OLED_ShowCHinese(0,2,0);//水
  83.                 OLED_ShowCHinese(16,2,6);//位
  84.                 OLED_ShowCHinese(32,2,7);//高
  85.                 OLED_ShowCHinese(48,2,8);//度
  86.                 OLED_ShowChar(64,2,':');

  87.                 OLED_ShowString(110,2,"mm");
  88.                
  89.                 OLED_ShowString(0,4,"PH");
  90.                 OLED_ShowCHinese(16,4,9);//測
  91.           OLED_ShowCHinese(32,4,10);//量
  92.                 OLED_ShowCHinese(48,4,11);//值
  93.                 OLED_ShowChar(64,4,':');
  94.                 OLED_ShowChar(88,4,'.');
  95.                 OLED_ShowNum(94,4,20,2,16);//
  96.                 OLED_ShowNum(72,4,10,2,16);//
  97.                
  98.                 OLED_ShowCHinese(0,6,12);//輸
  99.                 OLED_ShowCHinese(16,6,13);//出
  100.                 OLED_ShowCHinese(32,6,14);//電
  101.                 OLED_ShowCHinese(48,6,15);//壓
  102.                 OLED_ShowChar(64,6,':');
  103.                 OLED_ShowChar(112,6,'V');
  104.                 OLED_ShowChar(88,6,'.');
  105.         
  106. }

  107. /**************************************
  108. 功能描述:ADC口初始化
  109. 入口參數:無
  110. 返回值:無
  111. ***************************************/
  112. void        ADC_config(void)
  113. {
  114.         ADC_InitTypeDef                ADC_InitStructure;                                         //結構定義
  115.         ADC_InitStructure.ADC_Px        = ADC_P10 ;                //設置要做ADC的IO
  116.         ADC_InitStructure.ADC_Speed     = ADC_360T;                            //ADC速度                        ADC_90T,ADC_180T,ADC_360T,ADC_540T
  117.         ADC_InitStructure.ADC_Power     = DISABLE;                             //ADC功率允許/關閉        ENABLE,DISABLE
  118.         ADC_InitStructure.ADC_AdjResult = ADC_RES_H2L8;                  //ADC結果調整,        ADC_RES_H2L8,ADC_RES_H8L2
  119.         ADC_InitStructure.ADC_Polity    = PolityLow;                    //優先級設置        PolityHigh,PolityLow
  120.         ADC_InitStructure.ADC_Interrupt = DISABLE;                            //中斷允許                ENABLE,DISABLE
  121.         ADC_Inilize(&ADC_InitStructure);                                                  //初始化//調用ADC初始化函數
  122.         ADC_PowerControl(ENABLE);                                                                      //單獨的ADC電源操作函數, ENABLE或DISABLE// 開啟ADC電源
  123.         

  124.         ADC_InitStructure.ADC_Px        = ADC_P11 ;                //設置要做ADC的IO
  125.         ADC_InitStructure.ADC_Speed     = ADC_360T;                            //ADC速度                        ADC_90T,ADC_180T,ADC_360T,ADC_540T
  126.         ADC_InitStructure.ADC_Power     = DISABLE;                             //ADC功率允許/關閉        ENABLE,DISABLE
  127.         ADC_InitStructure.ADC_AdjResult = ADC_RES_H2L8;                  //ADC結果調整,        ADC_RES_H2L8,ADC_RES_H8L2
  128.         ADC_InitStructure.ADC_Polity    = PolityLow;                    //優先級設置        PolityHigh,PolityLow
  129.         ADC_InitStructure.ADC_Interrupt = DISABLE;                            //中斷允許                ENABLE,DISABLE
  130.         ADC_Inilize(&ADC_InitStructure);                                                  //初始化//調用ADC初始化函數
  131.         ADC_PowerControl(ENABLE);
  132. }

  133. /**************************************
  134. 功能描述:GPIO口初始化
  135. 入口參數:無
  136. 返回值:無
  137. ***************************************/
  138. void        GPIO_config(void)
  139. {
  140.                 GPIO_InitTypeDef        GPIO_InitStructure;                                            //結構定義
  141.         
  142.                   //
  143.           GPIO_InitStructure.Pin=GPIO_Pin_0|GPIO_Pin_1;                                //P3.0,p3.1引腳               
  144.     GPIO_InitStructure.Mode=GPIO_OUT_PP;                               //指定IO口為強推挽
  145.     GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);                        //初始化P1口
  146.         
  147.                 //設置AD檢測口P17口為浮空輸入
  148.           GPIO_InitStructure.Pin=GPIO_Pin_0;                                //P1.0引腳               
  149.     GPIO_InitStructure.Mode=GPIO_HighZ;                               //指定IO口為浮空輸入
  150.     GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);                        //初始化P1口
  151. }


  152. void main()
  153. {
  154.         uint        Temp=0,adc_data1[20],TempPhoto1=0,adtmp1=0,adc_data2[20],TempPhoto2=0,adtmp2=0;
  155.         uchar j,i;
  156. //        uchar strPhoto[6];
  157.         
  158. /*********************************************************************************
  159. *注意: STC15W4K32S4系列的芯片,上電后所有與PWM相關的IO口均為
  160. *      高阻態,需將這些口設置為準雙向口或強推挽模式方可正常使用
  161. *相關IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
  162. *        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
  163. *********************************************************************************/
  164.         P0M1 = 0;        P0M0 = 0;        //設置P0.0~P0.7為準雙向口
  165.         P1M1 = 0;        P1M0 = 0;        //設置P1.0~P1.7為準雙向口
  166.         P2M1 = 0;        P2M0 = 0;        //設置P2.0~P2.7為準雙向口
  167.         P3M1 = 0;        P3M0 = 0;        //設置P3.0~P3.7為準雙向口
  168.         P4M1 = 0;        P4M0 = 0;        //設置P4.0~P4.7為準雙向口
  169.         P5M1 = 0;        P5M0 = 0;        //設置P5.0~P5.7為準雙向口
  170. // char t;
  171.         GPIO_config();
  172.         OLED_Init();                        //初始化OLED  
  173.         OLED_Clear();
  174.         delay_ms(10);                                 //初始化后延時
  175.   ADC_config();
  176.         display();
  177.         
  178.         while(1)
  179.   {
  180.         
  181.         key();
  182.   //Temp = Get_ADC10bitResult(0);              //參數0~7,查詢方式做一次ADC, 返回值就是結果, == 1024 為錯誤
  183.    
  184.        for(j=0;j<20;j++)
  185.                                 {
  186.                                 adc_data1[j] = Get_ADC10bitResult(0);        
  187.                                 delay_ms(1);        //
  188.                                 }
  189.                                 
  190.         for(j=0;j<20;j++)
  191.                                 for(i=1;i<20-j;i++)
  192.                                         {
  193.                                         if(adc_data1[j]<adc_data1[i])
  194.                                         {
  195.                                                         adtmp1=adc_data1[j];
  196.                                                 adc_data1[j]=adc_data1[i];
  197.                                                         adc_data1[i]=adtmp1;
  198.                                                 }
  199.                                         }
  200.                 TempPhoto1=0;
  201.                                 for(j=5;j<16;j++)
  202.                         {
  203.                 TempPhoto1=TempPhoto1+adc_data1[j];
  204.                         
  205.                }        
  206.             TempPhoto1=TempPhoto1/10;        
  207.   
  208.         OLED_ShowNum(94,6, (TempPhoto1%1000)/100,1,16);//電壓的小數位
  209.         OLED_ShowNum(102,6, (TempPhoto1%1000)%100,1,16);//

  210.         OLED_ShowNum(80,6,TempPhoto1/1000,1,16);//電壓的個位
  211.                                 
  212.                                 
  213.        for(j=0;j<20;j++)
  214.                                 {
  215.                                 adc_data2[j] = Get_ADC10bitResult(0);        
  216.                                 delay_ms(1);        //
  217.                                 }
  218.                                 
  219.         for(j=0;j<20;j++)
  220.                                 for(i=1;i<20-j;i++)
  221.                                         {
  222.                                         if(adc_data2[j]<adc_data2[i])
  223.                                         {
  224.                                                         adtmp2=adc_data2[j];
  225.                                                 adc_data2[j]=adc_data2[i];
  226.                                                         adc_data2[i]=adtmp2;
  227.                                                 }
  228.                                         }
  229.                 TempPhoto2=0;
  230.                                 for(j=5;j<16;j++)
  231.                         {
  232.                 TempPhoto2=TempPhoto2+adc_data2[j];
  233.                         
  234.                }        
  235.             TempPhoto2=TempPhoto2/10;        
  236.                                 OLED_ShowNum(80,2, TempPhoto2,4,16);//水位高度
  237.          delay_ms(200);         
  238.                
  239.                
  240.                
  241.                
  242.                
  243.   }
  244.         
  245.         
  246. }
復制代碼

全部程序51hei下載地址:
2017年電賽簡易水情代碼.rar (105.27 KB, 下載次數: 40)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:927850 發表于 2021-6-26 21:30 | 顯示全部樓層
大佬,這個PCON2為什么報錯沒有定義?
屏幕截圖 2021-06-26 212808.png
屏幕截圖 2021-06-26 212625.png
回復

使用道具 舉報

ID:94031 發表于 2021-6-27 08:58 | 顯示全部樓層
yanzewu 發表于 2021-6-26 21:30
大佬,這個PCON2為什么報錯沒有定義?

STC15.h 頭文件里沒有PCON2定義,這個程序不是STC15W4K58S4單片機的,找STC15W4K58S4 AD初始化例程用。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品色婷婷久久58 | 涩爱av一区二区三区 | 天堂av资源| 99亚洲精品 | 亚洲区在线 | 色av一区二区三区 | 黄色视频a级毛片 | 久久精品国产一区二区三区 | 国产高清视频一区 | 国产在线观看不卡一区二区三区 | 精品一区国产 | 精品国产伦一区二区三区观看方式 | 亚洲精品久久久久久久久久久 | 亚洲一二三区精品 | 日韩高清中文字幕 | 人人人人干 | 日韩视频在线一区 | 中文字幕在线观看精品 | 国产精品久久久久久网站 | 欧美一区二区三区在线观看视频 | 午夜影院 | 亚洲国产伊人 | 国产日产欧产精品精品推荐蛮挑 | 91精品久久久久久久久久入口 | av在线成人| 五月天天色 | 波波电影院一区二区三区 | 亚洲一区视频在线 | 精品欧美乱码久久久久久 | 久久美国 | 成人做爰9片免费看网站 | 国产一级大片 | 亚洲一二三在线观看 | 午夜电影网站 | 男女午夜激情视频 | 91欧美| www.天堂av.com | 国产资源在线观看 | 久久久www成人免费精品 | 精品www | 一级片av|