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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6142|回復: 0
收起左側

單片機屋頂漏水檢測系統PCB原理圖與程序源碼設計資料

[復制鏈接]
ID:312369 發表于 2018-4-20 14:00 | 顯示全部樓層 |閱讀模式
這是我上學期的一個單片機課設
制作的是一個屋頂漏水系統
有完整的AD原理圖以及PCB
測試過的無BUG代碼
希望能夠幫到有需要的同學
不建議直接復制黏貼
希望你能好好參考然后自己做一個

Altium Designer畫的屋頂漏傳感器水原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png 0.jpg

51單片機屋頂漏水檢測系統的源程序如下:
  1. /**********************************************************************
  2. ----------------1.開發環境:Keil v4                                           ----------------
  3. ----------------2.使用單片機型號:STC89C52RC                   ----------------
  4. ***********************************************************************/

  5. #include "main.h"
  6. #include "LCD1602.h"
  7. #include "stdio.h"
  8. #include "PCF8591.h"
  9. #include "DHT11.h"

  10. sbit Key1=P1^4;
  11. sbit Key2=P1^5;
  12. sbit Key3=P1^6;

  13. sbit BEEP=P3^7;
  14. sbit LED=P3^6;

  15. sbit RELAY=P1^0;

  16. unsigned char Show_Temp[30];
  17. unsigned int Time_1Ms,Warning_Time_1Ms;
  18. bit Warning;

  19. void Timer1Init(void);                //1毫秒@11.0592MHz

  20. //****************************************************
  21. //主函數
  22. //****************************************************
  23. void main()
  24. {
  25.         unsigned char num,i;
  26.         unsigned int Set_Value[4]={60,25,100,100};
  27.         unsigned int ADC_Get_value[2];
  28.         unsigned int Type=1;
  29.         LED=1;
  30.         BEEP=0;
  31.         LCD_Init();
  32.         Timer1Init();
  33.         LCD_Write_String(0,0,"Welcome to use!");
  34.         Delay_ms(2000);                 //延時,等待傳感器穩定
  35.         LCD_Clear();
  36.         RH();
  37.         ADC_Get_value[0]=ReadADC(2);
  38.         ADC_Get_value[1]=ReadADC(3);       
  39.         TR1 = 1;                //定時器1開始計時
  40.         Time_1Ms=2000;
  41.         while(1)
  42.         {
  43.                 if(Time_1Ms>=2000)
  44.                 {
  45.                        
  46.                         TR1 = 0;                //定時器1開始計時
  47.                         Time_1Ms=0;
  48.                         RH();
  49.                         sprintf(Show_Temp,"H%02d %02d T%02d %02d",(unsigned int)U8RH_data_H,(unsigned int)Set_Value[0],(unsigned int)U8T_data_H,(unsigned int)Set_Value[1]);
  50.                         LCD_Write_String(0,0,Show_Temp);
  51.                         for(i=0;i<20;i++)
  52.                                         Show_Temp[i]=0;
  53.                         ADC_Get_value[0]=ReadADC(2);
  54.                         ADC_Get_value[1]=ReadADC(3);
  55.                         sprintf(Show_Temp,"R%03d %03dM%03d %03d",(unsigned int)ADC_Get_value[0],(unsigned int)Set_Value[2],(unsigned int)ADC_Get_value[1],(unsigned int)Set_Value[3]);
  56.                         LCD_Write_String(0,1,Show_Temp);
  57.                         for(i=0;i<20;i++)
  58.                                 Show_Temp[i]=0;
  59.                         TR1 = 1;                //定時器1開始計時
  60.                 }
  61.                 num=KeyScan();
  62.                 if(num==1)
  63.                 {
  64.                         Type++;
  65.                         if(Type>=5) Type=1;
  66.                         if(Type==1)
  67.                         {
  68.                                 LCD_Write_String(14,0,"S1");
  69.                         }
  70.                         if(Type==2)
  71.                         {
  72.                                 LCD_Write_String(14,0,"S2");
  73.                         }
  74.                         if(Type==3)
  75.                         {
  76.                                 LCD_Write_String(14,0,"S3");
  77.                         }       
  78.                         if(Type==4)
  79.                         {
  80.                                 LCD_Write_String(14,0,"S4");
  81.                         }       
  82.                 }
  83.                 if(num==2)
  84.                 {
  85.                         if(Type==1)
  86.                         {
  87.                                 Set_Value[0]-=1;
  88.                                 if(Set_Value[0]<=0) Set_Value[0]=255;
  89.                         }
  90.                         if(Type==2)
  91.                         {
  92.                                 Set_Value[1]-=1;
  93.                                 if(Set_Value[1]<=0) Set_Value[1]=255;       
  94.                         }
  95.                         if(Type==3)
  96.                         {
  97.                                 Set_Value[2]-=10;
  98.                                 if(Set_Value[2]<=0) Set_Value[2]=500;
  99.                         }       
  100.                         if(Type==4)
  101.                         {
  102.                                 Set_Value[3]-=10;
  103.                                 if(Set_Value[3]<=0) Set_Value[3]=500;
  104.                         }       
  105.                 }
  106.                 if(num==3)
  107.                 {
  108.                         if(Type==1)
  109.                         {
  110.                                 Set_Value[0]+=1;
  111.                                 if(Set_Value[0]>=255) Set_Value[0]=0;
  112.                         }
  113.                         if(Type==2)
  114.                         {
  115.                                 Set_Value[1]+=1;
  116.                                 if(Set_Value[1]>=255) Set_Value[1]=0;       
  117.                         }
  118.                         if(Type==3)
  119.                         {
  120.                                 Set_Value[2]+=10;
  121.                                 if(Set_Value[2]>=500) Set_Value[2]=0;
  122.                         }       
  123.                         if(Type==4)
  124.                         {
  125.                                 Set_Value[3]+=10;
  126.                                 if(Set_Value[3]>=500) Set_Value[3]=0;
  127.                         }       
  128.                 }
  129.                 if(num!=0)
  130.                 {
  131.                         Time_1Ms=0;
  132.                         sprintf(Show_Temp,"H%02d %02d T%02d %02d",(unsigned int)U8RH_data_H,(unsigned int)Set_Value[0],(unsigned int)U8T_data_H,(unsigned int)Set_Value[1]);
  133.                         LCD_Write_String(0,0,Show_Temp);
  134.                         for(i=0;i<20;i++)
  135.                                 Show_Temp[i]=0;
  136.                         sprintf(Show_Temp,"R%03d %03dM%03d %03d",(unsigned int)ADC_Get_value[0],(unsigned int)Set_Value[2],(unsigned int)ADC_Get_value[1],(unsigned int)Set_Value[3]);
  137.                         LCD_Write_String(0,1,Show_Temp);
  138.                         for(i=0;i<20;i++)
  139.                                 Show_Temp[i]=0;
  140.                 }
  141.                 if((U8RH_data_H>Set_Value[0])||(U8T_data_H>Set_Value[1])||(ADC_Get_value[0]>Set_Value[2])||(ADC_Get_value[1]>Set_Value[3]))
  142.                 {
  143.                         Warning=1;
  144.                         if(U8RH_data_H>Set_Value[0])
  145.                         {
  146.                                 LCD_Write_Char(3,0,'*');
  147.                         }
  148.                         else
  149.                         {
  150.                                 LCD_Write_Char(3,0,' ');
  151.                         }
  152.                                
  153.                         if(U8T_data_H>Set_Value[1])
  154.                         {
  155.                                 LCD_Write_Char(10,0,'*');
  156.                         }
  157.                         else
  158.                         {
  159.                                 LCD_Write_Char(10,0,' ');
  160.                         }
  161.                         if(ADC_Get_value[0]>Set_Value[2])
  162.                         {
  163.                                 LCD_Write_Char(4,1,'*');
  164.                         }
  165.                         else
  166.                         {
  167.                                 LCD_Write_Char(4,1,' ');
  168.                         }
  169.                         if(ADC_Get_value[1]>Set_Value[3])
  170.                         {
  171.                                 LCD_Write_Char(12,1,'*');
  172.                         }
  173.                         else
  174.                         {
  175.                                 LCD_Write_Char(12,1,' ');
  176.                         }
  177.                 }
  178.                 else
  179.                         Warning=0;
  180.         }
  181. }



  182. //****************************************************
  183. //MS延時函數(12M晶振下測試)
  184. //****************************************************
  185. void Delay_ms(unsigned int n)
  186. {
  187.         unsigned int  i,j;
  188.         for(i=0;i<n;i++)
  189.                 for(j=0;j<123;j++);
  190. }

  191. /****************************************************
  192. 按鍵掃描函數,返回掃描鍵值
  193. ****************************************************/
  194. unsigned char KeyScan(void)
  195. {
  196.   if(!Key3)  //如果檢測到低電平,說明按鍵按下
  197.     {
  198.          Delay_ms(20); //延時去抖,一般10-20ms
  199.      if(!Key3)     //再次確認按鍵是否按下,沒有按下則退出
  200.            {
  201.         while(!Key3);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待
  202.                                 return 3;   
  203.            }
  204.         }
  205.   if(!Key2)  //如果檢測到低電平,說明按鍵按下
  206.     {
  207.          Delay_ms(20); //延時去抖,一般10-20ms
  208.      if(!Key2)     //再次確認按鍵是否按下,沒有按下則退出
  209.            {
  210.         while(!Key2);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待
  211.                                 return 2;
  212.            }
  213.         }
  214.   if(!Key1)  //如果檢測到低電平,說明按鍵按下
  215.     {
  216.          Delay_ms(20); //延時去抖,一般10-20ms
  217.      if(!Key1)     //再次確認按鍵是否按下,沒有按下則退出
  218.            {
  219.         while(!Key1);//如果確認按下按鍵等待按鍵釋放,沒有釋放則一直等待
  220.                                 return 1;
  221.            }
  222.         }
  223.    return 0;
  224. }

  225. void Timer1Init(void)                //1毫秒@11.0592MHz
  226. {
  227.         TMOD |= 0x10;                //設置定時器模式
  228.         TL1 = 0x66;                //設置定時初值
  229.         TH1 = 0xFC;                //設置定時初值
  230.         TF1 = 0;                //清除TF1標志
  231.         TR1 = 0;                //定時器1開始計時
  232.         ET1=1;
  233.         EA = 1;
  234. }

  235. /*------------------------------------------------
  236.                  定時器中斷子程序
  237. ------------------------------------------------*/
  238. void Timer1_isr(void) interrupt 3 using 2
  239. {
  240.         TL1 = 0x66;                //設置定時初值
  241.         TH1 = 0xFC;                //設置定時初值
  242.         Time_1Ms++;
  243.         if(Warning==1)
  244.         {
  245.                 RELAY=1;
  246.                 Warning_Time_1Ms++;
  247.                 if(Warning_Time_1Ms>500)
  248.                 {
  249.                         LED=~LED;
  250.                         Warning_Time_1Ms=0;
  251.                         BEEP=~BEEP;
  252.                 }
  253.         }
  254.         else
  255.         {
  256.                 LED=1;
  257.                 BEEP=0;
  258. ……………………

  259. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

0.jpg

所有資料51hei提供下載:
屋頂漏水.zip (10.81 MB, 下載次數: 41)


評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日一区二区 | 成人片免费看 | 91福利网址| 久久在线看 | 国产亚洲精品精品国产亚洲综合 | jizz中国日本| 中文字幕亚洲视频 | 综合一区 | 国产精品区二区三区日本 | 欧美一级在线 | 日韩一级 | 久久这里只有精品首页 | 日本特黄a级高清免费大片 特黄色一级毛片 | 精品欧美一区二区在线观看视频 | 日本在线一区二区 | 99精品热视频 | 亚洲一区视频在线 | 日本特黄特色aaa大片免费 | 国产精品一级 | 99久久中文字幕三级久久日本 | 精品久久久久久久人人人人传媒 | 国产精品一级 | 国产高清精品一区二区三区 | 中文字幕 视频一区 | 极品国产视频 | 欧美操操操 | 久久99精品国产 | 成人做爰9片免费看网站 | 久久婷婷香蕉热狠狠综合 | 精品久草 | 国产99久久久国产精品下药 | 一本大道久久a久久精二百 欧洲一区二区三区 | 中文字幕综合 | 国产成人一区二 | 国产精品无码专区在线观看 | 一区中文字幕 | 超碰91在线 | 国产精品久久久久久久久久尿 | 久久精品91久久久久久再现 | 男女免费观看在线爽爽爽视频 | 久久99精品久久久久久国产越南 |