找回密码
 注册

QQ登录

只需一步,快速开始

搜索

51单片机数码管显示的水位控制系统程序设计

[复制链接]
coolice 发表于 2020-1-31 23:33:28 | 显示全部楼层 |阅读模式
用的proteus和keil 基于51的水位控制系统.rar (106.7 KB, 售价: 1 E币)
1.jpg 2.jpg

单片机源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. /*****************宏定义******************/
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define u8 unsigned char
  7. /***********位操作端口定义**************/

  8. sbit speak=P0^4;          //   蜂鸣器
  9. sbit JK2=P1^6;                 //          水位继电器

  10. sbit led3=P0^2;          //3/4水位指示灯
  11. sbit led2=P0^1;          //1/2水位指示灯
  12. sbit led1=P0^0;         //1/4水位指示灯

  13. sbit SW041=P1^0; //1/4水位
  14. sbit SW021=P1^1; //1/2水位
  15. sbit SW043=P1^2; //3/4水位
  16. sbit SW01=P1^3; //满水位
  17. uchar bianma[]={0xc0,0xf6,0xa1,0xa4,0x96};
  18. /********************************************************************
  19. * 名称 : delay_1ms()
  20. * 功能 : 延时1ms函数
  21. * 输入 : q
  22. * 输出 : 无
  23. ***********************************************************************/
  24. void delay_ms(uint q)
  25. {
  26.         uint i,j;
  27.         for(i=0;i<q;i++)
  28.                 for(j=0;j<110;j++);
  29. }


  30. /***********************************************************************************************************
  31. 按键检测相关函数
  32. ***********************************************************************************************************/
  33. //按键
  34. sbit Key1=P1^4;                                 
  35. sbit Key2=P1^5;                                 

  36. #define KEY_SET                 1        
  37. #define KEY_ADD                        2        


  38. //========================================================================
  39. // 函数: u8 Key_Scan()
  40. // 应用: temp=u8 Key_Scan();
  41. // 描述: 按键扫描并返回按下的键值
  42. // 参数: NONE
  43. // 返回: 按下的键值
  44. // 版本: VER1.0
  45. // 日期: 2015-05-29
  46. // 备注: 该函数带松手检测,按下键返回一次键值后返回0,直至第二次按键按下
  47. //========================================================================
  48. u8 Key_Scan()
  49. {         
  50.         static u8 key_up=1;//按键按松开标志
  51.         if(key_up&&(Key1==0||Key2==0))
  52.         {
  53.                 delay_ms(10);//去抖动
  54.                 key_up=0;
  55.                 if(Key1==0)                        return 1;
  56.                 else if(Key2==0)return 2;
  57.         }
  58.         else if(Key1==1&&Key2==1)
  59.                 key_up=1;            
  60.          return 0;// 无按键按下
  61. }


  62. uchar Mode=0;                                                                 //

  63. /**********主函数******************/
  64. void main()
  65. {        
  66.         u8 j=0;
  67.         u8 key;
  68.         u8 sd=0;
  69.         while(1)
  70.         {
  71.                 key=Key_Scan();                                        //按键扫描
  72.                 if(key==KEY_SET)
  73.                 {
  74.                         sd=1;
  75.                 }
  76.                 if(key==KEY_ADD)
  77.                 {
  78.                         sd=0;
  79.                 }
  80.                 if(Mode)
  81.                 {
  82.                         if(sd==1)
  83.                                 JK2=0;
  84.                         if(sd==0)
  85.                                 JK2=1;
  86.                 }
  87.          
  88.          if((SW01==1)&&(SW043==1)&&(SW021==1)&&(SW041==1))        //0水位 指示 启动水泵加水
  89.          {
  90.                 led1=0;
  91.                 led2=1;
  92.                 led3=1;
  93.                 JK2=0;
  94.                 j++;
  95.                 if(j<100)
  96.                 {
  97.                         speak=1;
  98.                 }
  99.                 else if(j<200)
  100.                 {
  101.                         speak=0;
  102.                 }                                                        //
  103.                 else j=0;
  104.                 Mode=0;//禁止手动浇水
  105.                 P2=bianma[0];
  106.                 delay_ms(3);
  107.         }
  108.         
  109.         if((SW01==1)&&(SW043==1)&&(SW021==1)&&(SW041==0))        //1/4水位指示
  110.          {
  111.                 led1=1;
  112.                 speak=1;
  113.                 led2=0;
  114.                 led3=1;
  115.                 Mode=1;//允许手动浇水
  116.                         
  117.                 P2=bianma[1];
  118.         }
  119.         if((SW01==1)&&(SW043==1)&&(SW021==0)&&(SW041==0))  //1/2水位指示
  120.          {
  121.                 led1=1;
  122.                 speak=1;
  123.                 led2=0;
  124.                 led3=1;
  125.                 Mode=1;//允许手动浇水
  126.                 P2=bianma[2];
  127.         }
  128.         if((SW01==1)&&(SW043==0)&&(SW021==0)&&(SW041==0))        //3/4水位指示
  129.          {
  130.                 led1=1;
  131.                 speak=1;
  132.                 led2=0;
  133.                 led3=1;
  134.                 Mode=1;//允许手动浇水
  135.                 P2=bianma[3];
  136.         }
  137.         if((SW01==0)&&(SW043==0)&&(SW021==0)&&(SW041==0))        //如果水满了 指示灯指示 停止加水
  138.          {
  139.                 led1=1;
  140.                 speak=1;
  141.                 led2=1;
  142.                 led3=0;
  143.                 Mode=0;//禁止手动浇水
  144.                 JK2=1;
  145.                 P2=bianma[4];
  146.         }
  147.         }                        

  148. }
复制代码

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

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-12-23 15:24

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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