找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7910|回復(fù): 4
收起左側(cè)

51單片機(jī)燒水壺程序設(shè)計+仿真+流程圖+說明(防干燒)

  [復(fù)制鏈接]
ID:519557 發(fā)表于 2019-5-9 15:44 | 顯示全部樓層 |閱讀模式
  有朝一日聞驚鳥,花落一方水長流。
  前兩天寫的一個關(guān)于加熱水壺的設(shè)計,只是一個原型,你們可以自己擴(kuò)展設(shè)計。
一部分代碼
一部分仿真

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ圖片20190509153022.png QQ圖片20190509152912.png

0.png

剛上電 進(jìn)入初始化模式
依次按確認(rèn)鍵  使用 + - 按鍵對需要的數(shù)值進(jìn)行操作
設(shè)置完成后 自動進(jìn)入工作

單片機(jī)源程序如下:
  1. #include "Stdfax.h"



  2. void main ()
  3. {

  4.     Init();
  5.            while(true)
  6.                                 {                                
  7.                   DS18B20();
  8.                                                                           System();                                
  9.                                                                                  Key();
  10.                                                      LCD_1602();
  11.                                               delay_ms(100);
  12.                                 }
  13. }




  14. /***********************************************************************************
  15.   函數(shù)介紹:系統(tǒng)定時器中斷 Timer 0
  16.   函數(shù)說明:無
  17.   輸入?yún)?shù):無
  18.   輸出參數(shù):無
  19. ***********************************************************************************/
  20. void System_Timer_0_Isr (void)  interrupt 1
  21. {
  22.          LED_Timer_Flicker_Do();
  23.          Timer_Cold_Ok_Delay_Do();
  24.          System_Set_Flicker_Do();
  25.          System_Set_End_Delay_Do();
  26.          DS18B20_System_Timer_Count_Do();
  27.          TL0   = THE_SYSTEM_COUNT_LOW;                   // 設(shè)置定時初值
  28.   TH0   = THE_SYSTEM_COUNT_HIGH;                  // 設(shè)置定時初值
  29.          
  30. }
復(fù)制代碼
  1. #include "Stdfax.h"


  2. struct SYSTEM_FLAG SYSTEM_DAT;
  3. unsigned long int Timer_Cold_Delay_Ms;
  4. unsigned long int Timer_Button_Delay_Ms;
  5. unsigned long int Timer_Set_Delay_MS;

  6. /***********************************************************************************
  7.   函數(shù)介紹:初始化
  8.   函數(shù)說明: 無
  9.   輸入?yún)?shù):
  10.   輸出參數(shù):無
  11. ***********************************************************************************/
  12. void Init()
  13. {
  14.                                 LCD1602_Init();
  15.            DS18B20_INIT();
  16.            System_Date_Init();
  17.            System_Sport_Init();
  18.     Timer_Init_0();     
  19.         
  20.            EA   = 1   ;        // 開啟總中斷
  21.            delay_ms(200);
  22. }




  23. /***********************************************************************************
  24.   函數(shù)介紹:定時器0 全局初始化
  25.   函數(shù)說明:使用定時器 0
  26.   輸入函數(shù):無
  27.   輸出參數(shù):無
  28. ***********************************************************************************/
  29. void Timer_Init_0 (void)
  30. {
  31.                  ET0   = 1   ;     // 定時中斷
  32.           TMOD |= 0x01;     // 開啟T0
  33.           TL0   = THE_SYSTEM_COUNT_LOW;                   // 設(shè)置定時初值
  34.           TH0   = THE_SYSTEM_COUNT_HIGH;                  // 設(shè)置定時初值
  35.           TR0   = 1;        // 開始計數(shù)
  36. }




  37. /***********************************************************************************
  38.   函數(shù)介紹:延時初始化
  39.   函數(shù)說明:制冷完成后等待3分鐘才可開啟壓縮機(jī)
  40.   輸入函數(shù):無
  41.   輸出參數(shù):無
  42. ***********************************************************************************/
  43. void  Timer_Cold_Ok_Delay_Init(void)
  44. {
  45.                  Timer_Cold_Delay_Ms = LED_LINK_3M;
  46. }




  47. /***********************************************************************************
  48.   函數(shù)介紹:延時執(zhí)行
  49.   函數(shù)說明:制冷完成后等待3分鐘才可開啟壓縮機(jī)
  50.   輸入函數(shù):無
  51.   輸出參數(shù):無
  52. ***********************************************************************************/
  53. void  Timer_Cold_Ok_Delay_Do (void)
  54. {
  55.          if(Timer_Cold_Delay_Ms)
  56.                 {
  57.                          if(-- Timer_Cold_Delay_Ms == 0)
  58.                                 {   
  59.                                                                         SYSTEM_DAT.mode  = MODE_RUN;
  60.                                                                         SYSTEM_DAT.stuff = 0;
  61.                                 }
  62.                 }
  63. }




  64. /***********************************************************************************
  65.   函數(shù)介紹:系統(tǒng)參數(shù)函數(shù)
  66.   函數(shù)說明: 無
  67.   輸入?yún)?shù):
  68.   輸出參數(shù):無
  69. ***********************************************************************************/
  70. void System_Date_Init()
  71. {
  72.         SYSTEM_DAT.mode             = MODE_RUN;
  73.         
  74.         SYSTEM_DAT.stuff = 0;
  75.         
  76.         SYSTEM_DAT.temperature      = 0;
  77.         SYSTEM_DAT.Hot_temperature_high = HOT_TEMPERATURE_NORMAL;
  78.         SYSTEM_DAT.Hot_temperature_low  = HOT_TEMPERATURE_LOW;
  79.         
  80.         
  81. SYSTEM_DAT.Clod_temperature_high = CLOD_TEMPERATURE_NORMAL;
  82.         SYSTEM_DAT.Clod_temperature_low  = CLOD_TEMPERATURE_LOW;
  83. }




  84. /***********************************************************************************
  85.   函數(shù)介紹:系統(tǒng)端口函數(shù)
  86.   函數(shù)說明: 無
  87.   輸入?yún)?shù):
  88.   輸出參數(shù):無
  89. ***********************************************************************************/
  90. void System_Sport_Init()
  91. {
  92.         KEY0 = 1;
  93.         KEY1 = 1;
  94.         KEY2 = 1;
  95.         
  96.         LED_HEARTING = 1;
  97.         LED_REFRIGERATION = 1;
  98.         
  99.         AIR_CLOSE;
  100. NOZZLE_CLOSE;
  101. BEEP_CLOSE;
  102. }
  103.         
  104.         

  105. /***********************************************************************************
  106.   函數(shù)介紹:啟動加熱程序
  107.   函數(shù)說明: 無
  108.   輸入?yún)?shù):
  109.   輸出參數(shù):無
  110. ***********************************************************************************/
  111. void System_Hot_Run()
  112. {
  113.            if(SYSTEM_DAT.temperature < SYSTEM_DAT.Hot_temperature_high && SYSTEM_DAT.mode != MODE_TEMPERATURE_FRARETION && SYSTEM_DAT.mode != MODE_HUIDITY_BEEP && SYSTEM_DAT.mode != MODE_TEMPERATURE_FRARETION_OK)
  114.                                 {
  115.                                                 SYSTEM_DAT.mode  = MODE_TEMPERATURE_HEATING;  // 進(jìn)入加熱模式
  116.                                                 AIR_OPEN;
  117.                                                 LED_HEARTING = 0;
  118.                                                 SYSTEM_DAT.stuff = 0;
  119.                                                 LED_Timer_Flicker_Init(1);
  120.                                 }
  121. }
  122.         



  123. /***********************************************************************************
  124.   函數(shù)介紹:檢測是否加熱完成
  125.   函數(shù)說明: 無
  126.   輸入?yún)?shù):
  127.   輸出參數(shù):無
  128. ***********************************************************************************/
  129. void System_Hot_Dection()
  130. {
  131.            if(SYSTEM_DAT.temperature >= SYSTEM_DAT.Hot_temperature_high)  // 加熱完成
  132.                                                 {
  133.                                                                         SYSTEM_DAT.mode = MODE_TEMPERATURE_OK;                                // 符號燈照常顯示
  134.                                                                         SYSTEM_DAT.stuff = 0;
  135.                                                                         AIR_CLOSE;                                // 關(guān)閉加熱
  136.                                                                         LED_Timer_Flicker_Init(0);        
  137.                                                           LED_HEARTING = 0;
  138.                                                         }
  139.                                        
  140.                                 System_Dry_Dection();
  141.                                                                                                                                                                                        
  142. }
  143.         
  144.         


  145. /***********************************************************************************
  146.   函數(shù)介紹:加熱完成 等待確認(rèn)函數(shù)據(jù)
  147.   函數(shù)說明: 無
  148.   輸入?yún)?shù):
  149.   輸出參數(shù):無
  150. ***********************************************************************************/
  151. char System_Hot_Dection_Ok()
  152. {
  153.                         if(SYSTEM_DAT.mode == MODE_TEMPERATURE_OK)
  154.            {   
  155.                                                 SYSTEM_DAT.mode  = MODE_RUN;
  156.                            SYSTEM_DAT.mode_stuff = 0;
  157.                            SYSTEM_DAT.stuff = 0;
  158.                            LED_HEARTING = 1;        
  159.       return true;                                       
  160.                                 }
  161.                                 return false;                        
  162. }
  163.         



  164. /***********************************************************************************
  165.   函數(shù)介紹:啟動制冷程序
  166.   函數(shù)說明: 無
  167.   輸入?yún)?shù):
  168.   輸出參數(shù):無
  169. ***********************************************************************************/
  170. void System_Cold_Run()
  171. {
  172.   if(SYSTEM_DAT.mode != Timer_Cold_Ok_Delay_Do && SYSTEM_DAT.temperature > SYSTEM_DAT.Clod_temperature_high  && SYSTEM_DAT.mode != MODE_TEMPERATURE_HEATING && SYSTEM_DAT.mode != MODE_TEMPERATURE_BEEP && SYSTEM_DAT.mode != MODE_TEMPERATURE_OK &&  SYSTEM_DAT.mode != MODE_TEMPERATURE_FRARETION_DELAY)
  173.                 {
  174.                           SYSTEM_DAT.mode  = MODE_TEMPERATURE_FRARETION;  // 進(jìn)入制冷模式
  175.                           NOZZLE_OPEN;
  176.                           LED_REFRIGERATION = 0;
  177.                                         SYSTEM_DAT.stuff  = 0;
  178.                           LED_Timer_Flicker_Init(2);
  179.                 };               
  180. }
  181.         



  182. /***********************************************************************************
  183.   函數(shù)介紹:檢測是否制冷完成
  184.   函數(shù)說明: 無
  185.   輸入?yún)?shù):
  186.   輸出參數(shù):無
  187. ***********************************************************************************/
  188. void System_Cold_Dection()
  189. {
  190.                 if(SYSTEM_DAT.temperature <= SYSTEM_DAT.Clod_temperature_high)  // 制冷完成
  191.                 {
  192.                                         SYSTEM_DAT.mode = MODE_TEMPERATURE_FRARETION_OK;                                // 符號燈照常顯示
  193.                                         SYSTEM_DAT.stuff = 0;
  194.                                         NOZZLE_CLOSE;                                       // 關(guān)閉制冷
  195.                                         LED_Timer_Flicker_Init(0);               
  196.                                  LED_REFRIGERATION = 0;
  197.                         }                                                                                                                                                
  198. }
  199.         
  200.         


  201. /***********************************************************************************
  202.   函數(shù)介紹:制冷完成 等待確認(rèn)函數(shù)據(jù)
  203.   函數(shù)說明: 無
  204.   輸入?yún)?shù):
  205.   輸出參數(shù):無
  206. ***********************************************************************************/
  207. char System_Cold_Dection_Ok()
  208. {
  209.                         if(SYSTEM_DAT.mode == MODE_TEMPERATURE_FRARETION_OK)
  210.                                 {
  211.                                                                         SYSTEM_DAT.mode = MODE_TEMPERATURE_FRARETION_DELAY;
  212.                                                                         SYSTEM_DAT.mode_stuff = 0;
  213.                                                                         SYSTEM_DAT.stuff = 0;
  214.                                                                         LED_REFRIGERATION = 1;                        
  215.                                             Timer_Cold_Ok_Delay_Init();
  216.          return true;                                       
  217.                                 }
  218.                                 return false;                                
  219. }




  220. /***********************************************************************************
  221.   函數(shù)介紹:檢測是否干燒
  222.   函數(shù)說明: 無
  223.   輸入?yún)?shù):
  224.   輸出參數(shù):無
  225. ***********************************************************************************/
  226. void System_Dry_Dection()
  227. {                                                                        
  228.           if(SYSTEM_DAT.temperature >= DRY_NORMAL)        // 確認(rèn)干燒
  229.                                                 {
  230.                                                                                         SYSTEM_DAT.mode = MODE_SUN_BEEP_NORMAL;
  231.                                                                                         SYSTEM_DAT.stuff = 0;
  232.                                                                                         BEEP_OPEN;       // 打開蜂鳴器
  233.                                                                                         if(SYSTEM_DAT.temperature >= DRY_HIGH)  // 到達(dá)干燒最大值
  234.                                                                                         {
  235.                                                                                                                         SYSTEM_DAT.mode = MODE_SUN_BEEP;
  236.                                                                                                    System_Close(); // 關(guān)機(jī)
  237.                                                                                         }
  238.                                                 }               
  239.                                  else
  240.                                                 {
  241.                                                                                 BEEP_CLOSE;
  242.                                                 }
  243. }
  244.         



  245. /***********************************************************************************
  246.   函數(shù)介紹:設(shè)置結(jié)束初始化
  247.   函數(shù)說明: 無
  248.   輸入?yún)?shù):
  249.   輸出參數(shù):無
  250. ***********************************************************************************/
  251. void System_Set_End_Delay_Init()
  252. {
  253.   Timer_Button_Delay_Ms = LED_LINK_10S;
  254. }
  255.         
  256.         


  257.         /***********************************************************************************
  258.   函數(shù)介紹:檢測是否設(shè)置結(jié)束
  259.   函數(shù)說明: 無
  260.   輸入?yún)?shù):
  261.   輸出參數(shù):無
  262. ***********************************************************************************/
  263. void System_Set_End_Delay_Do()
  264. {
  265.          if(Timer_Button_Delay_Ms)
  266.                 {
  267.                          if(-- Timer_Button_Delay_Ms == 0)
  268.                                 {
  269.                                                                         SYSTEM_DAT.mode  = MODE_RUN;
  270.                                             SYSTEM_DAT.mode_stuff = 0;                                // 關(guān)閉設(shè)置模式
  271.                                                                         SYSTEM_DAT.stuff = 0;
  272.                                             System_Set_Flicker_End();
  273.                                 }
  274.                 }         
  275. }




  276. /***********************************************************************************
  277.   函數(shù)介紹:自動關(guān)機(jī)
  278.   函數(shù)說明: 無
  279.   輸入?yún)?shù):
  280.   輸出參數(shù):無
  281. ***********************************************************************************/
  282. void System_Close()
  283. {
  284.   Switch = 0;
  285. }
  286.         



  287. /***********************************************************************************
  288.   函數(shù)介紹:設(shè)置時的數(shù)值閃爍  定時器初始化
  289.   函數(shù)說明: 無
  290.   輸入?yún)?shù):
  291.   輸出參數(shù):無
  292. ***********************************************************************************/
  293. void System_Set_Flicker_Init()
  294. {
  295.    Timer_Set_Delay_MS = LED_LINK_500MS;
  296. }
  297.         



  298. /***********************************************************************************
  299.   函數(shù)介紹:設(shè)置時的數(shù)值閃爍  定時器執(zhí)行
  300.   函數(shù)說明: 無
  301.   輸入?yún)?shù):
  302.   輸出參數(shù):無
  303. ***********************************************************************************/
  304. void System_Set_Flicker_Do()
  305. {
  306.    if(Timer_Set_Delay_MS)
  307.                         {
  308.                            if(-- Timer_Set_Delay_MS == 0)
  309.                                                 {
  310.                                                           System_Set_Flicker();
  311.                 System_Set_Flicker_Init();
  312.                                                 }
  313.                         }
  314. }




  315. /***********************************************************************************
  316.   函數(shù)介紹:設(shè)置時的數(shù)值閃爍  定時器執(zhí)行
  317.   函數(shù)說明: 無
  318.   輸入?yún)?shù):
  319.   輸出參數(shù):無
  320. ***********************************************************************************/
  321. void System_Set_Flicker_End()
  322. {
  323.    Timer_Set_Delay_MS = 0;
  324.           SYSTEM_DAT.mode_stuff = 0;
  325.           SYSTEM_DAT.mode = MODE_RUN;
  326.           SYSTEM_DAT.stuff = 0;
  327. }
  328.         



  329. /***********************************************************************************
  330.   函數(shù)介紹:設(shè)置時的數(shù)值閃爍
  331.   函數(shù)說明: 無
  332.   輸入?yún)?shù):
  333.   輸出參數(shù):無
  334. ***********************************************************************************/
  335. void System_Set_Flicker()
  336. {
  337.           static char i = 0;

  338.                         if(i)
  339.                         {
  340.                                                 
  341.                                                                         
  342.                                                                           LCD1602_Show_Float_Need_Address(6, 3, SYSTEM_DAT.temperature);
  343.                                                                                                                                   LCD1602_Show_Float_Need_Address(9,1, SYSTEM_DAT.Hot_temperature_low);
  344.                                                                                                                                   LCD1602_Show_Float_Need_Address(13,1, SYSTEM_DAT.Hot_temperature_high);

  345.                                                                                                                                   LCD1602_Show_Float_Need_Address(9,2, SYSTEM_DAT.Clod_temperature_low);
  346.                                                                                                                                   LCD1602_Show_Float_Need_Address(13,2, SYSTEM_DAT.Clod_temperature_high);
  347.                                         i = 0;
  348.                                 }
  349.                                 else
  350.                                 {
  351.                                                 switch(SYSTEM_DAT.mode_stuff)
  352.                                                                                                 {
  353.                                                                                                         
  354.                                                                                                                                 
  355.                                                                                                                                 case MODE_SET_HOT_TEMPERATURE_UP :                                 
  356.                                                                                                                                                                                                                                                                                                                                                                                                                         LCD1602_Show_String_Need_Address(13,1, "   ");                                                                                                                                                                                                                                       
  357.                                                                                                                                                                                                                                                                                                                                                                                                                         break;
  358.                                                                                                                                 
  359.                                                                                                                                 case MODE_SET_CLOD_TEMPERATURE_UP :  
  360.                                                                                                                                                                                                                                                                                                                                                                                                                         LCD1602_Show_String_Need_Address(13,2, "   ");
  361.                                                                                                                                                                                                                                                                                                                                                                                                                         break;
  362.                                                                                                                                 
  363.                                                                                                 }
  364.                                          i = 1;                                                                                                
  365.                                 }
  366. }





  367. /***********************************************************************************
  368.   函數(shù)介紹:系統(tǒng)主函數(shù)
  369.   函數(shù)說明: 無
  370.   輸入?yún)?shù):
  371.   輸出參數(shù):無
  372. ***********************************************************************************/
  373. void System()
  374. {
  375.                         if(SYSTEM_DAT.stuff == 0)                         // 無值改變
  376.                         {
  377.                                                 

  378.                                   switch(SYSTEM_DAT.mode)
  379.                                                  {
  380.                                                           case MODE_TEMPERATURE_HEATING:                  // 加熱
  381.                                                                         case MODE_SUN_BEEP_NORMAL:
  382.                                                                         case MODE_TEMPERATURE_OK:
  383.                                                                                                                           System_Hot_Dection();    // 檢測是否加熱完成函數(shù)                                                                                                                                                                                                                                
  384.                                                                         break;
  385.                                                 
  386.                                                                                                                                                                                                                                                                                                                
  387.                                                           case MODE_TEMPERATURE_FRARETION:                      // 制冷
  388.                                                                                                                                                                                                                                                                                            System_Cold_Dection();   // 檢測是否制冷完成函數(shù)                                                                                                                                                                                                                                
  389.                                                                                                             break;
  390.                                                                 }
  391.                                                                
  392.                                         }
  393. }
復(fù)制代碼


0.png
所有資料51hei提供下載:
智能水壺.zip (468.52 KB, 下載次數(shù): 125)

評分

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

查看全部評分

相關(guān)帖子

回復(fù)

使用道具 舉報

ID:689290 發(fā)表于 2020-2-1 21:57 | 顯示全部樓層
怎么打開嘛=  =,下載之后一臉懵
回復(fù)

使用道具 舉報

ID:689425 發(fā)表于 2020-2-2 21:21 | 顯示全部樓層
收藏了,謝謝樓主
回復(fù)

使用道具 舉報

ID:432653 發(fā)表于 2020-2-21 16:10 | 顯示全部樓層
淪落人 發(fā)表于 2020-2-1 21:57
怎么打開嘛=  =,下載之后一臉懵

按加熱那個按鍵,我試過了,就是那個顯示屏貴了點
回復(fù)

使用道具 舉報

ID:742168 發(fā)表于 2020-5-8 18:30 | 顯示全部樓層
下載后運(yùn)行發(fā)現(xiàn)led全部missing了,水平不夠看不出問題在哪里。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表