找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机手动抽水泵程序

[复制链接]
跳转到指定楼层
楼主
单片机源程序如下:
  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. //按键信号输入引脚定义
  11. sbit Q1=P1^2; //启动按键
  12. sbit Q2=P1^3; //停止按键
  13. sbit Q3=P1^4; //复位按键
  14. sbit Q4=P1^5; //减时按键

  15. //继电器信号输入引脚定义
  16. sbit B0=P3^2; //火线继电器或者零线继电器信号
  17. sbit B1=P3^3; //火线继电器或者零线继电器信号

  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    关                    */         


  29. void inint()
  30. {
  31.    TMOD=0x11;  //设置T1定时器方式1,T0定时器方式1
  32.    EA=1;        //打开总中断
  33.    TH0=(65536-50000)/256;           //50ms计数
  34.    TL0=(65536-50000)%256;           //50ms计数
  35.    TH1=(65536-50000)/256;           //50ms计数
  36.    TL1=(65536-50000)%256;           //50ms计数
  37.    //TR0=1;         //启动T0定时器
  38.    TR1=1;
  39.    ET0=1;         //
  40.    ET1=1;
  41.    //B1=0;
  42.    WDT_CONTR=0x37;
  43.    /* 用于eeprom的初始值设置        */
  44.    num1=num2=byte_read(0x0000);          //num2读取eeprom中的数据


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

  48. void keycan()
  49. {
  50.           if(Q1==0)
  51.                 {  
  52.             delay_1ms(10);                  //延时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);                  //启动按键松手检测
  62.                 }

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

  73.                 if(Q3==0)                //复位按键
  74.                 {
  75.                 delay_1ms(10);
  76.                 if(Q3==0)                 //复位按键松手检测
  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)                //时间初值设置按键
  89.                 {
  90.                  delay_1ms(10);           //长按3s
  91.                  if(Q4==0)                 //按键松手检测
  92.                         {

  93.                           num2++;
  94.                           if(num2>=100){num2=1;}                           
  95.                           SectorErase(0x0000);                        //擦出扇区
  96.                           byte_write(0x0000,num2);           //把num2的值写入eeprom中2000地址
  97.                           TM1650_Set(0x48,0x11,                       //总共8级亮度,现在设置5级亮度
  98.                                                  0x6E,mun_to_char[16],  //数码管个位显示数据
  99.                                                  0x6C,mun_to_char[16],  //数码管个位显示数据
  100.                                                  0x6A,mun_to_char[num2%10],  //数码管十位显示数据
  101.                                      0x68,mun_to_char[num2%100/10]  //数码管百位显示数?
  102.                         );
  103.                                
  104.                     }
  105.                 while(!Q4);                         
  106.                 }                                       
  107. }                       

  108. //数据处理
  109. void CLshuju()
  110. {
  111.         i3=num1%100/10;
  112.         i2=num1%10;
  113.         i1=num%100/10;
  114.         i0=num%10;                          //16进制转换成10进制       
  115.         if(i2==0){i2=0;}
  116.         if(i3==0){i3=0;}
  117.                                                                                                                  
  118.         TM1650_Set(0x48,0x11,                       //总共5级亮度,现在设置5级亮度
  119.                     0x6E,mun_to_char[i0],  //数码管个位显示数据
  120.                                 0x6C,mun_to_char[i1],  //数码管十位显示数据
  121.                                 0x6A,mun_to_char[i2],  //数码管百位显示数据
  122.                                 0x68,mun_to_char[i3]  //数码管千位显示数据                                        
  123.                 );
  124. }

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

  128.         while(1)
  129.            {                       
  130.             if(num2>=100){num2=0;}           //防止首次上电读取错误的eeprom的数据
  131.             if((num1==0)&&(num==0)){num1=num2;}
  132.                 keycan();                                  //按键检测       
  133.                 CLshuju();                                  //数据显示
  134.                 }

  135. }
  136.    
  137. void timer0() interrupt 1   //计时中断0工作方式1函数。
  138. {
  139.          TH0=(65536-50000)/256;           //50ms计数
  140.          TL0=(65536-50000)%256;           //50ms计数
  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   //计时中断1工作方式1函数。
  156. {
  157.          TH1=(65536-50000)/256;           //50ms计数
  158.          TL1=(65536-50000)%256;           //50ms计数
  159.          wg++;                                         //喂狗变量
  160.          if(wg==160)                        //50ms*160次=8s喂狗
  161.          {
  162.                  wg=0;
  163.                  WDT_CONTR=0x37;         //看门狗溢出时间为9秒
  164.          }
  165.      
  166. }
复制代码

Keil代码下载:
手动抽水泵软件20211107版.zip (75.32 KB, 下载次数: 20)


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

使用道具 举报

沙发
ID:1 发表于 2022-1-7 20:17 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:386118 发表于 2022-1-8 22:36 | 只看该作者
手动抽水泵原理图如下

按键原理图.png (14.2 KB, 下载次数: 39)

按键原理图

按键原理图

数码管显示原理图.png (28.53 KB, 下载次数: 48)

数码显示原理图

数码显示原理图

主板原理图.png (55.79 KB, 下载次数: 38)

主板原理图

主板原理图
回复

使用道具 举报

地板
ID:386118 发表于 2022-1-8 22:37 | 只看该作者
admin 发表于 2022-1-7 20:17
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)

源码已经提供了,压缩包文件里面就是
回复

使用道具 举报

5#
ID:230742 发表于 2022-1-9 16:28 | 只看该作者
建议添加水满自动关闭。要不手动抽水,手动停止,没意义啊。
回复

使用道具 举报

6#
ID:386118 发表于 2022-3-10 20:28 | 只看该作者
啤酒瓶子老大 发表于 2022-1-9 16:28
建议添加水满自动关闭。要不手动抽水,手动停止,没意义啊。

0~99分钟的时间设置,时间到了自动停止抽水
回复

使用道具 举报

7#
ID:386118 发表于 2022-4-27 16:38 | 只看该作者
啤酒瓶子老大 发表于 2022-1-9 16:28
建议添加水满自动关闭。要不手动抽水,手动停止,没意义啊。

设定时间,每次抽水时间到达后自动停止抽水
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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