Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基于51单片机的自动浇花器电路

基于51单片机的自动浇花器电路

作者头像
芯动大师
发布于 2024-05-16 07:54:19
发布于 2024-05-16 07:54:19
14200
代码可运行
举报
文章被收录于专栏:防止网络攻击防止网络攻击
运行总次数:0
代码可运行

一、系统概述

自动浇水灌溉系统设计方案,以AT89C51单片机为控制核心,采用模块化的设计方法。

组成部分为:5V供电模块、土壤湿度传感器模块、ADC0832模数转换模块、水泵控制模块、按键输入模块、LCD显示模块和声光报警模块,结构如下。

工作原理为:土壤湿度传感器测出土壤湿度模拟信号,经AD转换器将模拟信号转换成数字信号后传输到51单片机,单片机将土壤湿度数据与设定的上下限值进行比较。

当土壤湿度低于下限时,驱动水泵工作进行灌溉浇水,并提供声光报警。设计获取,蒋宇智QQ(2327603104)。

当土壤湿度增加至超过下限时,声光报警关闭,但水泵会继续工作,直到土壤湿度继续增加并超过设定的上限值为止。

用户可通过按键设定湿度上下限值,土壤湿度数据和上下限值数据均通过LCD显示屏实时显示。

二、土壤湿度传感器

Proteus仿真电路

三、原理图

原理图.jpg
原理图.jpg

仿真结果分析

打开Proteus仿真文件,其后缀名为.DSN。双击单片机,加载AutoWater.hex文件(位于Keil C程序文件夹内),运行仿真,结果如下。

由图可知,LCD显示当前测量的土壤湿度(Humidity)为53%,系统预设的湿度上限(H:High的缩写)为60%,下限(L:Low的缩写)为30%,土壤湿度正常,在上下限范围之内。资源获取,蒋宇智QQ(2327603104)。

此时,湿度低报警灯和蜂鸣器处于关闭状态,继电器RL1开关打至下方,水泵处于断电状态。

通过调节滑动变阻器RV2(鼠标点击上下两个红色箭头),改变输入到ADC0832采样通道0的电压大小来模拟土壤湿度的变化。

点击RV2向下的红色箭头,模拟土壤湿度的降低。例如,当土壤湿度从53%降低至23%,低于下限值30%时,红色LED报警灯点亮,蜂鸣器发声,继电器RL1开关打至上方,水泵通电,开始自动浇水,绿色的水泵工作指示灯也被点亮。

点击RV2向上的红色箭头,模拟土壤湿度的增加。

当土壤湿度从23%增加至37%,超过下限时,声光报警停止工作,但水泵会继续工作,直到土壤湿度继续增加到高于上限值为止,过程如下所示。

需要说明的是,水泵停止工作(即:土壤湿度超过上限)后,调节RV2模拟土壤湿度的下降,在下降到上下限范围内时,水泵不会启动,只有土壤湿度继续下降至低于下限时才会启动。

通过按键可以预设湿度的上下限值。

点击“设定”键,进入上下限设置模式,首先是H上限值光标闪烁,此时可以点击加/减键,改变上限值大小。

上限值设置完成后,点击“设定”键,L下限值光标闪烁,同理,点击加/减键,改变下限值大小。

上下限值都设置完成后,再次点击“设定”键,退出上下限设置模式。例如,我们设置湿度上限值H为75%,下限值L为25%,结果如下图所示。

综上所述,仿真运行效果满足设计要求。

四、C代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main()//主函数
{
	Init1602();//初始化液晶函数
	init(); //初始化定时器
	init_eeprom(); //开始初始化保存的数据
	while(1)//进入循环
	{
		for(m=0;m<50;m++)//读50次AD值
			sum = adc0832(0)+sum;	//读到的AD值,将读到的数据累加到sum
		temp=sum/50;//跳出上面的for循环后,将累加的总数除以50得到平均值temp
		sum=0; //平均值计算完成后,将总数清零
		temp = temp*0.390625;	//ADC0832存储数据为1个字节,湿度显示范围为0~100,因此1单位湿度=100/256=0.390625				
//		if(temp<=full_range)
//		temp=(temp*100)/full_range;
//		else
//		temp=100;
		if(set==0)//set为0,说明现在不是设置状态
		Display_1602(temp,MH,ML);//显示AD数值和报警值
		if(temp<ML&&set==0)//湿度值小于报警值
		{//资源获取,蒋宇智QQ(2327603104)
			flag=1;//打开报警
			Relay=0;//继电器触点闭合,水泵工作
			LED_R=0;	//红灯点亮
		}
		else if(temp>MH&&set==0) //湿度值大于报警值
		{
			flag=0;//关闭报警
			Relay=1;//继电器触点打开,水泵停止
			LED_R=1;	//红灯熄灭
		}
		else
		{
			flag=0;
			LED_R=1;	//红灯熄灭
		}
		Key(); //调用按键函数
	}
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    #include <reg51.H>
    #include "intrins.h"
    #define uint unsigned int
    #define uchar unsigned char
    #define ulong unsigned long
    #define     LCDIO      P0         //液晶屏数据口
    //ADC0832的引脚
    sbit ADCLK =P1^1;  //ADC0832 clock signal
    sbit ADDIO =P1^3;  //ADC0832 k in
    sbit ADCS =P1^4;  //ADC0832 chip seclect

    sbit rs=P1^0;  //定义1602 RS
    sbit lcden=P1^2; //定义1602 EN
    sbit key1=P3^0;    //设定
    sbit key2=P3^1;    //加
    sbit key3=P3^2;    //减
    sbit motor=P3^7;   //继电器接口
    sbit speak=P1^5;        //蜂鸣器接口
    uchar key;         //设定指针
    uint RH=400,RL=200;//水位上下限
    float temp_f;
    ulong temp;
    uchar v;
    uchar count,s1num;
    uchar code table[]= " moisture:          ";
    uchar code table1[]="RH:  %              ";
    uchar getdata; //获取ADC转换回来的值
    /*********************************************/
    void delay(uint z)                  //延时
    {
            uint x,y;
            for(x=z;x>0;x--)
                    for(y=110;y>0;y--);
    }
    /**********************************************/
    void write_com(uchar com)
    {
            rs=0;
    //        rd=0;
            lcden=0;
            P0=com;
            delay(5);
            lcden=1;
            delay(5);
            lcden=0;       
    }
    /*********************************************/
    void write_date(uchar date)
    {
            rs=1;
    //        rd=0;
            lcden=0;
            P0=date;
            delay(5);
            lcden=1;
            delay(5);
            lcden=0;       
    }

    void lcdinit()
    {
            lcden=0;
            write_com(0x38);
            write_com(0x0c);
            write_com(0x06);
            write_com(0x01);
    }
    /***********************************************/
    void init()
    {
            uchar num;
           
            for(num=0;num<15;num++)
                    {
                            write_date(table[num]);
                            delay(5);
                    }
            write_com(0x80+0x40);
            for(num=0;num<15;num++)
                    {
                            write_date(table1[num]);
                            delay(5);
                    }
            }
    //****************************************************************************/
    /************
    读ADC0832函数
    ************/
    //采集并返回
    /****************************************************************************
    函数功能:AD转换子程序
    入口参数:CH(如果读取CH0,channel的值为0x01,如果读取CH1则channel的值为0x03)
    出口参数:adval
    ****************************************************************************/
    uchar Adc0832()     //AD转换,返回结果
    {
        uchar i;
        uchar dat=0;

        ADCLK=0;
        ADDIO=1;
        ADCS=0;                  //拉低CS端
        ADCLK=1;                 
        ADCLK=0;                 //拉低CLK端,形成下降沿1

        ADDIO=1;//指定转换通道是CH1还是CH2,指定值位与0x1,取最后一位的值
        ADCLK=1;   
        ADCLK=0;                 //拉低CLK端,形成下降沿2

        ADDIO=0;//指定值右移一位,再取最后一位的值
        ADCLK=1;
        ADCLK=0;                //拉低CLK端,形成下降沿3


        ADDIO=1;               
            for(i=0;i<8;i++)
        {
            ADCLK=1;
            ADCLK=0;           //形成一次时钟脉冲
            if(ADDIO)
                       dat|= 0x80>>i;  //收数据
        }


        ADCS=1;                //拉低CS端
        ADCLK=1;
        ADDIO=1;               //拉高数据端,回到初始状态
        return(dat);           //return dat
    }
    /***************************************************************************/


    /********************************************************/
    void displayRH()                        //下限显示
    {write_com(0xc0+3);
    write_date(RH/100%10+0x30);//上限百位
    write_date(RH/10%10+0x30);//上限十位
    //write_date('.');
    //write_date(RH%10+0x30);
    }
    void displayRL()          //下限显示
    {write_com(0xca);
      write_date('R');
      write_date('L');
      write_date(':');
    write_date(RL/100%10+0x30);//下限百位
    write_date(RL/10%10+0x30);//下限十位
    write_date('%');
    }
    /**************************************************/
    /********************************************************/
    void keyscan()                 //按键处理
    {bit kk1=0,kk2=0;
    if(key1==0)
    {delay(30);
      while(key1==0);
       if(key>=2)
       {key=0;
       }
       else
       {key++;
       }
       switch(key)
       {speak=1;kk2=motor;motor=1;
        case 1:{write_com(0x0f);write_com(0xce); //光标闪烁
            while(key1!=0)         //等待按键松开
            {
        if(key2==0)                //key2按键下
       {delay(30);                //按键延时消抖
       if(key2==0)                //确定key2按下
       {
        while(key2==0); //等待松开
            if(RL>=998)
            {RL=999;                //RL下限最大设置为99
            }
            else
            {RL+=10;                //RL加1
            }       
       }
       displayRL();                //调用RL下限显示函数
       write_com(0xce);
      }   
       if(key3==0)                //key3按下
       {delay(30);                //按键延时消抖
       if(key3==0)                //确定key3按下
       {
        while(key3==0);         //等待key3按键松开
            if(RL<=1)                 //RL最小设置为1
            {RL=0;
            }
            else
            {RL-=10;                 //RL下限减1
            }
       }
       displayRL();                //调用RL下限显示函数
       write_com(0xce);
      }

       
       }while(key1==0);       
            }
            case 2:{write_com(0x0f);write_com(0xc4);  //RH设置数据,光标闪烁
       while(key1==1)
       {
        if(key2==0)           //key2按下
       {delay(30);           //按键延时消抖
       if(key2==0)           //确定key2按下
       {
        while(key2==0);        //等待松开
            if(RH>=998)                //RH最大设置为99
            {RH=999;
            }
            else
            {RH+=10;                //RH加1
            }
           
       }
       displayRH();                //RH上限显示函数
        write_com(0xc4);
      }

       
       
       if(key3==0)          //key3按下
       {delay(30);          //按键延时消抖
       if(key3==0)          //确定按下
       {
        while(key3==0);//等待松开
            if(RH<=1)           //RH最小设置为1
            {RH=0;
            }
            else
            {RH-=10;                //RH减1
            }

       }
       displayRH();                //调用RH显示函数
        write_com(0xc4);
      }


       }
       while(key1==0);
       }
            case 0:{write_com(0x0c);
                            motor=kk2;

                break;}
       }
       }
    }
    /**************************************************/
    void Conut(void)          //土壤检测数据转换
    {          
          v=Adc0832();
              temp=v;
          temp_f=temp*9.90/2.55;
          temp=temp_f;
              temp=1000-temp;         
              write_com(0x80+10);
              write_date(temp/100%10+0x30);//千位
              write_date(temp/10%10+0x30);//百位
              write_date('.');
              write_date(temp%10+0x30);
              write_date('%');//显示符号位
           
             }
    /********************************************************/
    void main(void)
    {
            lcdinit();
            init();
            displayRH();   //显示上限
            displayRL();   //显示下限
            delay(50);         //启动等待,等LCD讲入工作状态
            delay(50);         //延时片刻(可不要)
            delay(50);                         //延时
            delay(50);
            Conut();           //显示函数
            delay(150);        
            while(1)
            {        
                 Conut();        //显示当前湿度
                     keyscan();
                     if(temp>RH)  //如果湿度大于上限停止浇水
                     {motor=1;          //关闭继电器
                     }
                     else if(temp<RL) //如果湿度小于RL下限启动浇水
                     {motor=0;                 //启动继电器
                     }
                     if(temp<RL)           //小于下限启动报警并浇水
                     {speak=0;                                //启动报警
                      delay(150);                         //延时
                      speak=1;
                     }
                     keyscan();                 //按键检测
                     delay(150);                         //延时50MS
            }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
单片机智能自动浇水浇花灌溉装置设计,Keil程序+Proteus仿真+原理图+论文
2.能够检测土壤湿度,当低于设定的下限值时,启动水泵进行浇水灌溉,并提供相应的声光报警指示;
蒋宇智
2024/04/14
9400
单片机智能自动浇水浇花灌溉装置设计,Keil程序+Proteus仿真+原理图+论文
单片机红外传感器_基于51单片机的声音传感器
我们工作久了,久坐导致的毛病就显现出来了,腰酸背痛颈椎疼,最近看到利用番茄钟工作法挺好,工作25分钟,休息5分钟,既能调整工作节奏,避免精力过分消耗,也能避免久坐导致的身体问题。 我刚开始使用闹钟做提醒,后来尝试番茄钟软件,但是都要手动去操作手机,拿起手机看到信息,然后就会去处理手机上的事情了,起不到作用… 直到有一天收拾东西看到了我大学期间基于51单片机做的一个电子设计,激起了我的灵感,开始了基于51单片机的自动番茄钟,久坐提醒神器的设计和制作。 整体方案硬件部分继承了大学时焊接的电路板,更换了传感器部分,软件部分重新编写了控制部分的代码。 之前的软硬件设计方案可以参考这篇文章《基于51单片机的上下限可调的数字温度控制系统》,本文重点阐述差异部分。
全栈程序员站长
2022/11/15
7270
单片机红外传感器_基于51单片机的声音传感器
单片机ds1302时钟程序(51单片机液晶显示程序)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129766.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/29
1.4K1
单片机ds1302时钟程序(51单片机液晶显示程序)
基于51单片机的火灾报警器设计
通过AT89C51单片机控制传感器对检测地点的烟雾、温度进行实时检测,并把检测结果进行数据信息处理,可以实现声光电一体化报警、浓度显示、温度显示等功能。
芯动大师
2024/05/26
4330
基于51单片机的火灾报警器设计
STC 89C52 单片机引脚对应的功能以及实例讲解
学习单片机能够让你更加深刻的认识到我们身边中常用电器的工作方式,接下来我们以引脚来讲解一些单片机中常用引脚的功能
Gorit
2021/12/09
3K0
STC  89C52  单片机引脚对应的功能以及实例讲解
DHT11传感器模块温湿度监测,51单片机项目资料
Proteus7版本的仿真软件只有SHT11温湿度传感器元件,没有DHT11传感器元件。Proteus8版本经过升级更新后,元件库已添加了DHT11传感器元件。因此,本设计采用Proteus8.6版本的仿真软件进行开发。
蒋宇智
2024/03/25
3730
DHT11传感器模块温湿度监测,51单片机项目资料
杨校老师项目之基于51单片机的智能浇花系统【嵌入式】
目录: 1.引言 1 1.1智能浇花的诞生背景及国内外发展现状 2 1.2本设计主要内容 2 2.系统总体设计 2 2.1系统工作原理 2 2.2系统组成部分 2 3.系统硬件的设计 3 3.1 STC89C52RC单片机简介 3 3.2 模数转换模块设计 4 3.3显示模块设计 5 3.4键盘输入模块设计 5 3.5继电器模块设计 6 3.6湿度传感器模块设计 6 3.7 GSM模块设计 7 3.8总电路连接图 7 4.系统软件的设计 8 4.1系统软件的总体设计 8 4.2湿度采集功能模块 9 4.3湿度设置功能模块 10 5.系统的实现与测试 10 5.1 硬件测试 10 5.2软件测试 10 5.3系统的实现 11 6.结语 11 参考文献 12
杨校
2022/05/14
4800
杨校老师项目之基于51单片机的智能浇花系统【嵌入式】
单片机实验说明<四>矩阵键盘与LCD基本使用
对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的“0-F”序号
zhangrelay
2021/03/03
7830
51单片机试题及答案c语言版_只会c语言毕业设计能做什么
篇一:51单片机毕业设计题目2  1、基于51单片机温湿度检测的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值的调节。  5、电脑USB供电  6、采用C语言编程。  2、基于51单片机温湿度检测+数字钟的设计 设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值和数字钟时分秒的调节。  5、时分秒显示  6、电脑USB供电  7、采用C语言编程。  3、基于51单片机温湿度检测+电子万年历的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10+DS1302设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值和电子万年历时分秒星期年月日的调节。  5、年、月、日、时、分、秒、星期、温度、湿度显示  6、电脑USB供电  7、采用C语言编程。  4、基于51单片机温湿度检测+数字电压表的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+SHT10+ADC0832设计。  2、湿度范围:0-100%RH 温度:0-100摄氏度  3、4个发光二级管实现报警:高温报警、低温报警、高湿度报警、低湿度报警共8种报警状态。  4、3个按键实现温湿度上下限报警值的调节。  5、电压、温度、湿度显示。  6、电压范围直流0-5伏。(另有0-220伏)  7、电脑USB供电  8、采用C语言编程。  5、基于51单片机数字温度计的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+DS18B20设计。  2、温度:0-99摄氏度  3、3个发光二级管和蜂鸣器实现报警:高温报警、低温报警、正常共3种报警状态。  4、3个按键实现温度上下限报警值的调节。  5、湿度显示。  6、电脑USB供电  7、采用C语言编程。  6、基于51单片机数字温度计+数字钟的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+DS18B20设计。  2、温度:0-99摄氏度  3、3个发光二级管和蜂鸣器实现报警:高温报警、低温报警、正常共3种报警状态。  4、3个按键调整温度上下限值和数字钟时分秒值的调整。(按键有提示音)  5、湿度、时分秒显示。  6、电脑USB供电  7、采用C语言编程。  7、基于51单片机数字温度计+数字电压表的设计  1、设计要求  1、采用51单片机(STC89C52RC)+LCD12864+DS18B20+ADC0832设计。  2、温度:0-99摄氏度 电压范围:0-220伏直流电压  3、3个发光二级管和蜂鸣器实现报警:高温报警、低温报警、正常共3种报警状态。  4、3个按键实现温度上下限报警值的调节。  5、湿度、电压显示。  6、电脑USB供电  7、采用C语言编程。  8、基于51单片机超声波测距的设计  1、设计任务  1、采用51单片机+4位共阳数码管+ HC-SR04超声波模块。  2、测距范围2cm-450cm。  3、超出测量范围显示“-.–”;正常测量范围显示“x.xx”(单位:米)。 4、51单片机:STC89C52RC、AT89S52、AT89C51。  5、C语言编程。  6、电脑USB供电。  9、基于51单片机超声波测距的设计  1、设计任务  1、采用51单片机+LCD1602液晶+ HC-SR04超声波模块。  2、测距范围2cm-450cm。  3、超出测量范围显示“-.–M”;正常测量范围显示“x.xxM”(单位:米)。 4、51单片机:STC89C52RC、AT89S52、AT89C51。  5、C语言编程。  6、电脑USB供电。  10、基于51单片机超声波测距的设计  1、设计任务  1、采用51单片机+LCD12864液晶+ HC-SR04超声波模块。
全栈程序员站长
2022/11/09
7920
51单片机LCD1602程序详解[通俗易懂]
LCD1602 工业字符型液晶。1602是指LCD显示的内容为16X2,即可以显示两行,每行16个字符.
全栈程序员站长
2022/09/13
2K0
51单片机在Ubuntu和MacOS下程序开发和下载
这学期有51单片机课程,平时调试代码不用windows,查阅了一些资料,不太能用,现在将51单片机在ubuntu下(Linux通用)开发和下载说明一下:需要用到SDCC和stcgal。
zhangrelay
2021/03/03
1.2K0
基于51单片机设计的简易电子琴
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/80538312
zy010101
2019/05/25
8240
别怕!51 单片机从入门到应用,小白也能轻松吃透
这篇教程专为单片机小白打造,从 51 单片机基础讲起,带你搭建开发环境,学习汇编与 C 语言编程。通过 LED 灯闪烁、按键控制、数码管显示等基础实验,以及简易电子钟、温度检测系统等应用案例,结合代码实操,助你快速掌握 51 单片机开发。
羑悻的小杀马特.
2025/03/24
4240
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信号幅度变化时(满量程的5%—95%),不影响检测到结果。频率检测的结果通过LCD1602的第一行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5μs的脉冲信号。
timerring
2022/07/20
9350
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
基于单片机的数字温度计设计
数字温度计是一种用于测量和显示环境温度的设备。本文章介绍基于STC89C52主控芯片的数字温度计的设计过程和实现原理。该设计采用DS18B20温度传感器进行温度采集,使用LCD1602显示屏进行温度显示,通过按键设置温度的上限和下限阀值,并通过蜂鸣器进行报警。
DS小龙哥
2023/09/01
9790
基于单片机的数字温度计设计
51单片机八路抢答器proteus仿真
由于51单片机小板,按键比较少,还有一些功能上的缺陷,所以说无法完成八路抢答器,所以我们用proteus仿真,代码与实验结果如下:
全栈程序员站长
2022/11/01
4870
基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)
当前文章介绍基于51单片机和SHT30传感器设计的环境温度与湿度检测设备。设备采用IIC模拟时序通信协议,能够实时监测环境的温度和湿度,并将数据通过LCD显示屏显示出来;可以广泛应用于室内环境监测、气象观测、农业温室监测等领域。
DS小龙哥
2023/07/11
7920
基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)
基于单片机的太阳能热水器控制器设计
随着环保意识的逐渐增强,太阳能热水器作为一种清洁能源应用得越来越广泛。然而,传统的太阳能热水器控制器通常采用机械式或电子式温控器,存在精度低、控制不稳定等问题。为了解决这些问题,本项目基于单片机技术设计了一款太阳能热水器控制器,主控芯片采用STC89C52。该控制器可以实现对太阳能热水器的水温、水位等参数进行准确、稳定的控制,提高了太阳能热水器的能源利用效率和使用寿命,同时也符合节能环保的社会需求。
DS小龙哥
2023/09/06
6080
基于单片机的太阳能热水器控制器设计
基于51单片机的流水灯设计
设计思路一(未用中断): 8个LED灯正极解电源,负极接单片机I/O口。 死循环:设置P2口为11111110,使用左移函数,循环七次。 同时每次位移中间加入延时函数。 三个按键:A按键启动、B按键控制不同流水速度(低中高)、C按键控制流水灯暂停蜂鸣器长响: 思路一:设置一个变量i,起初为0,按下A键后为1;当i为1进入死循环 设置变量j,按下B,j++,当j大于3,j=j-3;使用j*1000,来空置循环函数的延时时间。设置bit变量s=0,按下按键C,s++,当s=1,j进入循环蜂鸣器响,s=0退出循环。 在每次延时时检查按键
全栈程序员站长
2022/08/18
8350
基于51单片机的流水灯设计
3.3 51单片机-独立按键
JP165跳线帽断开、JP10连接J12(为了实现按键控制LED灯的效果)、JP5连接JP8、J21接左边
DS小龙哥
2022/01/12
5550
3.3 51单片机-独立按键
推荐阅读
相关推荐
单片机智能自动浇水浇花灌溉装置设计,Keil程序+Proteus仿真+原理图+论文
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验