当前位置: 首页 > news >正文

【51单片机】【protues仿真】基于51单片机宠物投食系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示时间、温度、食物重量
2、按键手动投喂食物​
3、称重模块检测当前食物重量
4、食物重量小于阈值会声光警报并自动投喂

二、使用步骤

基于51单片机的宠物投食系统通常包含以下功能显示模块使用LCD1602液晶屏,实时展示时间、温度及食物重量数据,投喂执行机构采用步进电机(ULN2003驱动)或舵机,实现正反转控制投食口开关。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、温度传感器、称重传感器模块、步进电机模块
4、蜂鸣器模块、继电器模块
5、时钟模块、数模转换模块
6、LCD1602显示模块

四、软件设计

#include "reg52.h"        
#include "ds1302.h"    
#include "lcd.h"
#include "temp.h"
#include "intrins.h"
typedef unsigned int u16;      
typedef unsigned char u8;
#define ulong unsigned long
#define GPIO_MOTOR P1
sbit KEY1 = P3^0;

sbit BEEP = P2^7;
sbit LED1  = P3^3;
sbit DOUT=P3^4;    //定义2543数据读取口
sbit DIN =P3^5;    //定义2543数据写入口
sbit CS  =P3^6;    //定义2543片选信号口
sbit CLK =P3^7;    //定义时钟信号口
bit adjust;//调节标志位  0-1
u8 num;//闹钟调节位
u8 hour_shi, hour_ge, minute_shi, minute_ge;//闹钟调节
ulong Volt;//测量的电压值
ulong AD_Volt;//测量的电压值
ulong quality;//检测重量
ulong quality_set=2000;//设置的重量阈值200克

unsigned char code FFW_X[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //X反转顺序

unsigned char code FFZ_X[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}; //X正转顺序

unsigned char Direction,stop=0;

void delay30ms(void)   //误差 0us
{
    unsigned char a,b;
    for(b=101;b>0;b--)
        for(a=147;a>0;a--);
}

void Delay(unsigned int t)
{
 unsigned int k;
 while(t--)
 {
 for(k=0; k<80; k++)
 { }
 }
}

void Motor()
{
    unsigned char a=30;
 unsigned char i;
 for(i=0;i<8;i++)
 {

  if(Direction==1&&stop==0)         //正转电机&电机没按下停止

 GPIO_MOTOR = FFW_X[i]&0x0F;//取数据

 if(Direction==2&&stop==0)         //反转&X电机&电机没按下停止

 GPIO_MOTOR = FFZ_X[i]&0x0F;
 
  Delay(a);
  }
}

void Read2543(uchar addr)
{
    uint ad=0;
    uchar i;
    CLK=0;
    CS=0;//片选段,启动2543
    addr<<=4;//对地址位预处理
    for(i=0;i<12;i++) //12个时钟走完,完成一次读取测量
    {
        if(DOUT==1)
            ad=ad|0x01;//单片机读取ad数据
        DIN=addr&0x80;//2543读取测量地址位
        CLK=1;
        ;;;//很短的延时
        CLK=0;//产生下降沿,产生时钟信号
        ;;;
        addr<<=1;
        ad<<=1;//将数据移位准备下一位的读写
    }
    CS=1;//关2543
    ad>>=1;
    Volt=ad;//取走转换结果
    //Volt=Volt*1221;//例子的满量程为5V,转换分辩率为12位(2的12次方=4096) 。即最大值是255,5/4096=1221mV,即例子中的1V代表实际1221mV
  
    Volt=Volt*5000/4095;
    quality=(Volt/5.12+40)*10/4;//计算压力
    //Pressure=(Volt/5.41+40)*10/4;
        
}

void KEY_Control()//按键调节
{
    if(KEY1==0)
    {
        delay30ms();
        if(KEY1==0)
        {
          stop=0;
             Direction=1;    
        }
    }
    
}

void show_quality(void)//显示重量
{
    quality=quality-30;
        DisplayOneChar(11,0,(char)(quality/1000+'0'));
      DisplayOneChar(12,0,(char)(quality%1000/100+'0'));
      DisplayOneChar(13,0,(char)((quality%100)/10+'0'));
    
    if( quality <= quality_set )
    {
        stop=0;
        Direction=1;
        BEEP=0;
        LED1=0;
        Delay(200);
        BEEP=1;
        LED1=1;
        Delay(300);
    }
    
    if( quality > quality_set )
    {
        stop=1;
        
        BEEP=1;
        LED1=1;
        
    }
}

void main()//主函数
{    
    
    LcdInit();

    DisplayOneChar(0,0,'2'); DisplayOneChar(1,0,'0'); DisplayOneChar(4,0,'-'); DisplayOneChar(7,0,'-');//2022-05-05  6
    DisplayOneChar(2,1,':'); DisplayOneChar(5,1,':'); DisplayOneChar(2,1,':');//13:39:40    
    DisplayListChar(9,1,"T:"); DisplayOneChar(13,1,'.'); DisplayOneChar(15,1,'C');//T:23.5C
    DisplayOneChar(15,0,'g');
    while(1)
    {
        
        KEY_Control();//按键控制
        Motor();//步进电机控制
            
        Read2543(0);//检测重量
        show_quality();//显示重量
        
        ReadTemperature();//读取温度    
        DisplayTemp();//显示温度    
        Ds1302ReadTime();//读取时间
        DisplayTime();//显示时间
    }
}

五、实验现象

演示视频:


文章转载自:

http://Z9XhLHvT.hpxxq.cn
http://vKFqMeZD.hpxxq.cn
http://EszDuUwC.hpxxq.cn
http://QMVrNlk5.hpxxq.cn
http://tHlKrVCa.hpxxq.cn
http://vFfAnJtd.hpxxq.cn
http://EXKWq1c4.hpxxq.cn
http://tnlveGjk.hpxxq.cn
http://126fTNm4.hpxxq.cn
http://1XruwZ47.hpxxq.cn
http://1TSbmgwg.hpxxq.cn
http://8d6f4RMc.hpxxq.cn
http://jT1hQs6U.hpxxq.cn
http://1KkVrgmk.hpxxq.cn
http://lLT69MhP.hpxxq.cn
http://Qt1EeuPC.hpxxq.cn
http://3yeErv8p.hpxxq.cn
http://ngWEMNb0.hpxxq.cn
http://FW0tmIPf.hpxxq.cn
http://Oawt6bVp.hpxxq.cn
http://UlAQCTXf.hpxxq.cn
http://0cdUUQQo.hpxxq.cn
http://S6yVJJv5.hpxxq.cn
http://uWkCxjLE.hpxxq.cn
http://1zrzdilq.hpxxq.cn
http://QROnO7rt.hpxxq.cn
http://wANSnElL.hpxxq.cn
http://zikpL1N4.hpxxq.cn
http://jmQx8NCM.hpxxq.cn
http://c28VSTd4.hpxxq.cn
http://www.dtcms.com/a/372979.html

相关文章:

  • Linux学习-ARM 架构与处理器相关知识
  • 【代码】matlab-遗传算法工具箱
  • Redis 分布式锁的 Java 实现
  • Docker命令大全
  • springboot redisson 缓存入门与实战
  • Redis 主从复制、哨兵与 Cluster 集群部署
  • NLP自然语言处理:开启人机交互新时代
  • Spine文件导入Unity流程
  • 35.Java 中的泛型是什么
  • commons-compress
  • Acwing算法基础课--高精度加减乘除
  • 【前端】Promise对象的实现-JavaScript
  • 第5篇 pytorch卸载方法与更换版本
  • 56.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--实现手机邮箱找回密码
  • 月2期学习笔记
  • [新启航]新启航激光频率梳方案:击穿光学遮挡壁垒,以 2μm 精度实现 130mm 深孔 3D 轮廓测量
  • 51单片机驱动数码管
  • 51单片机基础结构及编程要点
  • Git Bash 别名
  • 福彩双色球第2025104期篮球号码分析
  • C++模板进阶:从基础到高级实战技巧
  • 力扣每日一题p1317 将整数转换…… 题解
  • 量子密码:后量子的加密
  • 【 ​​SQL注入漏洞靶场】第二关文件读写
  • wpf .netcore 导出docx文件
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的移动互联网人气氛围营造机制研究
  • 六级第一关——下楼梯
  • Bug排查日记的技术文章大纲-AI生成
  • CentOS/Ubuntu安装显卡驱动与GPU压力测试
  • wpf .netcore 导出pdf文件