找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)手動(dòng)抽水泵程序

[復(fù)制鏈接]
ID:386118 發(fā)表于 2022-1-7 13:11 | 顯示全部樓層 |閱讀模式
單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include <stdio.h>
  3. #include<intrins.h>
  4. #include "delay.h"
  5. #include "TM1650.h"
  6. #include "EEPROM.h"
  7. uchar jishu;
  8. char num,num1,num2,i0,i1,i2,i3,S=0,wg;
  9. sfr WDT_CONTR=0xe1;
  10. //按鍵信號(hào)輸入引腳定義
  11. sbit Q1=P1^2; //啟動(dòng)按鍵
  12. sbit Q2=P1^3; //停止按鍵
  13. sbit Q3=P1^4; //復(fù)位按鍵
  14. sbit Q4=P1^5; //減時(shí)按鍵

  15. //繼電器信號(hào)輸入引腳定義
  16. sbit B0=P3^2; //火線繼電器或者零線繼電器信號(hào)
  17. sbit B1=P3^3; //火線繼電器或者零線繼電器信號(hào)

  18. sfr P3M1 = 0xB1;
  19. sfr P3M0 = 0xB2;

  20. uchar code mun_to_char[]={0x3F,0x06,0x5B,0x4f,0x66,               
  21.                                                   0x6D,0x7D,0x07,0x7F,0x6F,
  22.                                                   0x77,0x7C,0x39,0x5E,0x79,
  23.                                                   0x71,0x00,0x86,0xdB,0xcf,0xe6,               
  24.                                                   0xeD,0xfD,0x87,0xfF,0xeF};
  25. /*                         0    1    2    3    4
  26.                            5    6    7    8    9   
  27.                                                       a    b    c    d    e
  28.                                                    f    關(guān)                    */         


  29. void inint()
  30. {
  31.    TMOD=0x11;  //設(shè)置T1定時(shí)器方式1,T0定時(shí)器方式1
  32.    EA=1;        //打開總中斷
  33.    TH0=(65536-50000)/256;           //50ms計(jì)數(shù)
  34.    TL0=(65536-50000)%256;           //50ms計(jì)數(shù)
  35.    TH1=(65536-50000)/256;           //50ms計(jì)數(shù)
  36.    TL1=(65536-50000)%256;           //50ms計(jì)數(shù)
  37.    //TR0=1;         //啟動(dòng)T0定時(shí)器
  38.    TR1=1;
  39.    ET0=1;         //
  40.    ET1=1;
  41.    //B1=0;
  42.    WDT_CONTR=0x37;
  43.    /* 用于eeprom的初始值設(shè)置        */
  44.    num1=num2=byte_read(0x0000);          //num2讀取eeprom中的數(shù)據(jù)


  45. P3M1 = 0xB1|0x00;
  46. P3M0 = 0xB2|0x0c;
  47. }

  48. void keycan()
  49. {
  50.           if(Q1==0)
  51.                 {  
  52.             delay_1ms(10);                  //延時(shí)10ms
  53.                 if(Q1==0)
  54.                         {
  55.                         num1=num2;
  56.                         num=0;
  57.                     TR0=1;
  58.                         B0=0;
  59.                         S=1;               
  60.                         }
  61.                 while(!Q1);                  //啟動(dòng)按鍵松手檢測(cè)
  62.                 }

  63.                 if(Q2==0)
  64.                 {
  65.                 delay_1ms(10);
  66.                 if(Q2==0)                 //停止按鍵松手檢測(cè)
  67.                         {
  68.                         if(S==1)
  69.                            {TR0=~TR0;B0=~B0;B1=~B1;}
  70.                     }
  71.                 while(!Q2);                         
  72.                 }

  73.                 if(Q3==0)                //復(fù)位按鍵
  74.                 {
  75.                 delay_1ms(10);
  76.                 if(Q3==0)                 //復(fù)位按鍵松手檢測(cè)
  77.                         {
  78.                      B0=1;
  79.                          B1=1;
  80.                          num1=num2;
  81.                          num=0;
  82.                          S=0;
  83.                          TR0=0;
  84.                     }
  85.                 while(!Q3);                         
  86.                 }
  87.                
  88.                 if(Q4==0)                //時(shí)間初值設(shè)置按鍵
  89.                 {
  90.                  delay_1ms(10);           //長(zhǎng)按3s
  91.                  if(Q4==0)                 //按鍵松手檢測(cè)
  92.                         {

  93.                           num2++;
  94.                           if(num2>=100){num2=1;}                           
  95.                           SectorErase(0x0000);                        //擦出扇區(qū)
  96.                           byte_write(0x0000,num2);           //把num2的值寫入eeprom中2000地址
  97.                           TM1650_Set(0x48,0x11,                       //總共8級(jí)亮度,現(xiàn)在設(shè)置5級(jí)亮度
  98.                                                  0x6E,mun_to_char[16],  //數(shù)碼管個(gè)位顯示數(shù)據(jù)
  99.                                                  0x6C,mun_to_char[16],  //數(shù)碼管個(gè)位顯示數(shù)據(jù)
  100.                                                  0x6A,mun_to_char[num2%10],  //數(shù)碼管十位顯示數(shù)據(jù)
  101.                                      0x68,mun_to_char[num2%100/10]  //數(shù)碼管百位顯示數(shù)?
  102.                         );
  103.                                
  104.                     }
  105.                 while(!Q4);                         
  106.                 }                                       
  107. }                       

  108. //數(shù)據(jù)處理
  109. void CLshuju()
  110. {
  111.         i3=num1%100/10;
  112.         i2=num1%10;
  113.         i1=num%100/10;
  114.         i0=num%10;                          //16進(jìn)制轉(zhuǎn)換成10進(jìn)制       
  115.         if(i2==0){i2=0;}
  116.         if(i3==0){i3=0;}
  117.                                                                                                                  
  118.         TM1650_Set(0x48,0x11,                       //總共5級(jí)亮度,現(xiàn)在設(shè)置5級(jí)亮度
  119.                     0x6E,mun_to_char[i0],  //數(shù)碼管個(gè)位顯示數(shù)據(jù)
  120.                                 0x6C,mun_to_char[i1],  //數(shù)碼管十位顯示數(shù)據(jù)
  121.                                 0x6A,mun_to_char[i2],  //數(shù)碼管百位顯示數(shù)據(jù)
  122.                                 0x68,mun_to_char[i3]  //數(shù)碼管千位顯示數(shù)據(jù)                                        
  123.                 );
  124. }

  125. void main()
  126. {
  127.     inint();           //初始化變量

  128.         while(1)
  129.            {                       
  130.             if(num2>=100){num2=0;}           //防止首次上電讀取錯(cuò)誤的eeprom的數(shù)據(jù)
  131.             if((num1==0)&&(num==0)){num1=num2;}
  132.                 keycan();                                  //按鍵檢測(cè)       
  133.                 CLshuju();                                  //數(shù)據(jù)顯示
  134.                 }

  135. }
  136.    
  137. void timer0() interrupt 1   //計(jì)時(shí)中斷0工作方式1函數(shù)。
  138. {
  139.          TH0=(65536-50000)/256;           //50ms計(jì)數(shù)
  140.          TL0=(65536-50000)%256;           //50ms計(jì)數(shù)
  141.          jishu++;
  142.      if(jishu==20)                           //50ms*20=1000ms
  143.                  {
  144.                          jishu=0;                                                                                                            
  145.                      if(num==0)
  146.                                 {
  147.                                  num=60;
  148.                                  num1--;
  149.                                 }
  150.                           num--;
  151.                           if(num<58){B1=0;}
  152.                           if((num1==0)&(num==0)){B0=1;B1=1;S=0;TR0=0;}         
  153.                  }
  154. }


  155. void timer1() interrupt 3   //計(jì)時(shí)中斷1工作方式1函數(shù)。
  156. {
  157.          TH1=(65536-50000)/256;           //50ms計(jì)數(shù)
  158.          TL1=(65536-50000)%256;           //50ms計(jì)數(shù)
  159.          wg++;                                         //喂狗變量
  160.          if(wg==160)                        //50ms*160次=8s喂狗
  161.          {
  162.                  wg=0;
  163.                  WDT_CONTR=0x37;         //看門狗溢出時(shí)間為9秒
  164.          }
  165.      
  166. }
復(fù)制代碼
51hei.png
Keil代碼下載:
手動(dòng)抽水泵軟件20211107版.zip (75.32 KB, 下載次數(shù): 22)


回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2022-1-7 20:17 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

ID:386118 發(fā)表于 2022-1-8 22:36 | 顯示全部樓層
手動(dòng)抽水泵原理圖如下

按鍵原理圖

按鍵原理圖

數(shù)碼顯示原理圖

數(shù)碼顯示原理圖

主板原理圖

主板原理圖
回復(fù)

使用道具 舉報(bào)

ID:386118 發(fā)表于 2022-1-8 22:37 | 顯示全部樓層
admin 發(fā)表于 2022-1-7 20:17
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)

源碼已經(jīng)提供了,壓縮包文件里面就是
回復(fù)

使用道具 舉報(bào)

ID:230742 發(fā)表于 2022-1-9 16:28 | 顯示全部樓層
建議添加水滿自動(dòng)關(guān)閉。要不手動(dòng)抽水,手動(dòng)停止,沒意義啊。
回復(fù)

使用道具 舉報(bào)

ID:386118 發(fā)表于 2022-3-10 20:28 | 顯示全部樓層
啤酒瓶子老大 發(fā)表于 2022-1-9 16:28
建議添加水滿自動(dòng)關(guān)閉。要不手動(dòng)抽水,手動(dòng)停止,沒意義啊。

0~99分鐘的時(shí)間設(shè)置,時(shí)間到了自動(dòng)停止抽水
回復(fù)

使用道具 舉報(bào)

ID:386118 發(fā)表于 2022-4-27 16:38 | 顯示全部樓層
啤酒瓶子老大 發(fā)表于 2022-1-9 16:28
建議添加水滿自動(dòng)關(guān)閉。要不手動(dòng)抽水,手動(dòng)停止,沒意義啊。

設(shè)定時(shí)間,每次抽水時(shí)間到達(dá)后自動(dòng)停止抽水
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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