51单片机项目设计:定时宠物喂食系统

发布者:psi33最新更新时间:2022-01-12 来源: eefocus关键字:51单片机  lcd1602  定时闹钟  按键调时 手机看文章 扫描二维码
随时随地手机看文章

链接:https://pan.baidu.com/s/1CKrXkIHite1LWaWM26gjeQ

提取码:abcd

取走点赞哦~


题目要求:

一、拟解决的主要问题


1、仔细分析题目要求,理解投食器工作原理,明确工作任务和设计要求,确定整体设计方案,选定单片机以及相关传感器等元器件,实现投食器设定时间,按设定时间发出响声,吸引宠物过来并自动投放食物等功能;


2、通过Proteus软件进行设计与仿真,给出系统硬件设计框图、元件选择及各部分电路原理图;


3、软件程序流程并编写程序;


4、软硬件联合调试;


5、完成实物焊接,调试实物,


二、设计方案


基于单片机的自动投食器设计,通过模块化的设计,利用STC89C52单片机连接控制各模块,逐个完成其基本功能需求,有以下6个模块:


1、单片机控制模块:采用STC89C52作为核心元件协调控制各模块工作;


2、按键模块:采用7个触键开关,六个设置按键和一个复位按键;


3、电机控制阀门:采用步进电机和步进电机驱动模块实现门控装置;


4、蜂鸣器模块:采用一个三极管和一个蜂鸣器,由

蜂鸣器发出响声吸引宠物过来进食。当发光二极管亮灯时,蜂鸣器接收到一个高电平,蜂鸣器发出响声吸引宠物过来进食;


5、显示模块:采用LCD1602液晶显示屏显示设定时间,通过按键来设定时间,按照 年/月/日/时/分 的格式输入宠物进食时间;


6、DS1302电路模块:该模块由单片机采集它的时钟数据经过程序处理,最后给LCD显示;


dxp原理图设计

在这里插入图片描述

仿真设计

在这里插入图片描述

程序设计

由于代码过长,只展示部分代码


/**************************************************************************************

项目名称:宠物自动喂食

作者:化作尘

邮箱:2809786963@qq.com

版本:V1.1

更新时间:2020年4月8日15:44:58

csdn链接:https://blog.csdn.net/mbs520/article/details/108292187   

***************************************************************************************/


#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器

#include "ds1302.h"

#include "lcd.h"


#define uint unsigned int

#define uchar unsigned char


uchar ss[]={0x01,0x02,0x04,0x08};//电机顺时针转动数组

uchar ns[]={0x08,0x04,0x02,0x01};//电机逆时针转动数组



sbit k1 = P1^0;   //按键

sbit k2 = P1^1;  

sbit k3 = P1^2;

sbit k4 = P1^3;

sbit k5 = P3^2; //中断按键接口int0

sbit k6 = P3^3; //int1


sbit led = P3^7; //LED

sbit beep = P1^7; //蜂鸣器



uint ti=0,alarm=0;       //修改第几个时间参数 、修改第几个闹钟参数

uchar alarm_hour1=0x08,alarm_min1=0x00; //闹钟1时、分参数

uchar alarm_hour2=0x12,alarm_min2=0x00; //闹钟2时、分参数

uchar alarm_hour3=0x18,alarm_min3=0x00; //闹钟3时、分参数

char alarmswitch = 0x07; //定义闹钟开关寄存器 0关 1开    

//0 0 0 0 0 alarmclock3 alarmclock2 alarmclock1

//初始化0000 0111   设置3个喂食时间



enum Mode //定义枚举、四种模:显示时间、修改时间、设置喂食时间、无、进食模式

{

DISPLAYDATA,MODIFYDATA,SETALARMCLOCK,NONE,ALARMCLOCK

}mode;



/*********延时函数***********/   

void delay(uint t) //短延时

{

  while(t--);

}

void delay_ms(uint t) //毫秒延时

{

uint a,b;

for(a=0;a for(b=0;b<120;b++);

}



/************喂食程序*****************/

void alarmclock(void)

{

char n,i=20;       //用来计数

    LcdWriteCom(0x80);    //lcd显示时间到

LcdWritestr("   time out!    ");

LcdWriteCom(0xc0);

LcdWritestr("now time: ");

LcdWriteData(TIME[2]/16+0x30);

LcdWriteData(TIME[2]%16+0x30);

LcdWriteData(':'); 

LcdWriteData(TIME[1]/16+0x30);

LcdWriteData(TIME[1]%16+0x30);

LcdWritestr("    ");

led = 0;    //led亮

beep=0; //蜂鸣器响1秒

delay_ms(1000);

beep=1;

while(i--) //电机顺时针转动i圈

{

for(n=0; n<4; n++)

{

P2 = ss[n];

delay_ms(200);

}

}

i=20;

while(i--)   //电机逆时针转动i圈

{

for(n=0; n<4; n++)

{

P2 = ns[n];

delay_ms(200);

}

}

led=1;      //led灭

mode=DISPLAYDATA;  //跳回显示模式

}


/*******************************************************************************

* 函 数 名         : main

* 函数功能    : 主函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void main(void)

{

LcdInit(); //lcd初始化

//Ds1302Init();   //时钟初始化(更新时间到ds1302)

Int0Init(); //外部中断初始化

while(1)

{

switch(mode) //模式选择

{

case DISPLAYDATA: //时间显示模式

Ds1302ReadTime(); //更新时间

display_data();   //显示时间 秒分时日月周年

    keypros(); //按键检测

if( (alarmswitch%0x02&&alarm_hour1==TIME[2]&&alarm_min1==TIME[1]) |    //闹钟喂食

(alarmswitch%0x04/0x02&&alarm_hour2==TIME[2]&&alarm_min2==TIME[1]) |

(alarmswitch%0x08/0x04&&alarm_hour3==TIME[2]&&alarm_min3==TIME[1]) )  

mode = ALARMCLOCK;

break;

case MODIFYDATA:   //时间修改模式

modify();

break;

case SETALARMCLOCK:    //设置进食时间

setalarmclock();

break;

case ALARMCLOCK:    //进食模式

alarmclock();

break;

}

}

}

关键字:51单片机  lcd1602  定时闹钟  按键调时 引用地址:51单片机项目设计:定时宠物喂食系统

上一篇:51单片机教程:按键输入、矩阵按键(按键巧用)proteus仿真+keil
下一篇:51单片机项目设计:基于超声波的车库停车系统、车位检测

推荐阅读最新更新时间:2024-11-09 11:54

51单片机的引脚分布与内部功能结构
51单片机引脚分布 51系列单片机,包括后面增强型52系列,他们的外观基本都是通用的,无论那家生产的大致都可以相互替换,当然是插件的替换插件的,贴片的替换贴片的!下面使用最基础的版本来介绍一些它是引脚分布。 它的40pin引脚按功能分可分为4种: 1、电源引脚,由VCC(+5V)和GND(接地)提供电源。 2、时钟信号引脚,由XTAL0和XTAL1接晶振产生系统时钟。 3、控制信号引脚,RESET,ALE/PROG ,PSEN 和EA /VPP。 RESET是复位信号输入端,高电平时触发芯片复位。 ALE/PROG为地址锁存允许信号端,在使用外部存储器时通过输出脉冲信号作为锁存低8位地址的控制信号,它也可以用作为带有片内EPR
[单片机]
<font color='red'>51单片机</font>的引脚分布与内部功能结构
51单片机外部中断实验
前面,我们讲了51单片机的输入和输出功能,今天讲点不一样的,外部中断测试。 首先,关于中断的作用,我们要讲一下,处理内部外部随机事件,应对紧急事件的发生。CPU在执行程序过程中,外部突发紧急事件请求,CPU停下手里工作,去处理紧急事件,处理完后,回到原先被中断的地方,继续工作。就好比在吃饭的过程中接到个电话,出去接听完电话后又坐回桌子上吃饭,这中间停止原本的事情去做去他事情就是中断。 51单片机的中断功能是比较简单的,只需要配置好相应的寄存器就完成了初始化。 本文外部中断使用按键P3.2测试,因为其端口具备外部中断第二功能。 51单片机中断结构配置前,需要看一下内部结构图,可以看到有IE、IP、TCON等寄存器控制中断功
[单片机]
<font color='red'>51单片机</font>外部中断实验
单片机设计指纹识别系统
一、电路设计 此电路由最小系统板、LCD1602液晶模块和AS608指纹模块组成。 二、运行效果 三、主代码 /*想要更多项目私wo!!!*/ #include sys.h #include delay.h #include usart.h #include lcd.h #include key.h #include touch.h #include malloc.h #include usmart.h #include MMC_SD.h #include ff.h #include exfuns.h #include fontupd.h #include text.h
[单片机]
单片机设计指纹识别<font color='red'>系统</font>
51单片机】点阵LED的显示实验
前言 今天女朋友生日,除了礼物之外,一时想不到能给她点什么不一样的,并且奈何自己不会写诗,没办法从这方面入手。所以就用我会的方式吧。 既然最近自己琢磨琢磨单片机,也准备玩儿点阵LED的显示实验,这时我灵机一动,不如用LED做一个吧。(????????????老理工男了,怎么有的女朋友?) 好,下面就来看看我是怎么做的吧。 一、环境 环境用的是Keil5编译,这是目前比较主流的单片机编译软件,支持汇编和C。其次,我用到了Proteus8软件仿真,没有自己买单片机,仿真软件的东西很全面。具体的软件操作在我的上一篇文章中有说了,这里就不再赘述。需要看软件操作的小伙伴可以参考我的 这篇文章 (点击阅读)。 二、硬件 这次用到的原件有
[单片机]
【<font color='red'>51单片机</font>】点阵LED的显示实验
基于51单片机的OLED显示图片文字
一、前言 从性能来说OLED屏幕分辨率相对较高,引脚也少很多,占用的I/O口会少很多。从功耗来说首先oled显示屏不需要背光灯,当有电流通过时,这些有机材料就可以发光,而且3.3V~5V之间都可以使用。从外观来说体型更小,重量更轻更薄,可用来制作许多小型显示设备。这次我使用的是四个引脚的0.95寸oled显示屏,进行文字图片的循环显示。 二、OLED模块介绍 1、液晶显示屏 液晶显示器,为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。 液晶显示器的工作原理:液晶
[单片机]
基于<font color='red'>51单片机</font>的OLED显示图片文字
51单片机开发中一些常用代码块
数码管中的16个字符 uchar code table ={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 延时函数(使用之前先声明一遍) void delay(uint); void delay(uint z) { uint x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } 点亮第一个二级管 #include reg52.h //点亮第一个发光二级管 sbit D1=P1^0;//P1是P1口,P1^0代表D1,D1为自己命名的变量 m
[单片机]
基于AT89C2051单片机的纺纱断线自动检测系统的设计
引言 纺纱机器在绕线过程中,判断细线是否断线是十分重要,因此纺纱断线检测装置是根据实际需要应运而生的产品,它能对纺纱过程进行断线检测和监控。本文就根据实际需要设计了一多功能纺纱断线检测控制装置,能够自动检测纱断情况,并且在断纱时,停止电机转动,并进行报警,提醒工作人员,方便工作人员进行故障处理。该装置能给纺纱工带来无限的方便,免去了纺纱工一直观察纱线状态的麻烦,大大地为纺纱工减少了劳动强度,同时也提高了产品的质量,并且也给商家带来更大的价值。同时该装置不仅可以应用于纺纱机器,还可以用于生产类似纱线之类的某些生产厂家。 1 系统功能 基于纺纱断线检测装置的功能要求,纺纱断线检测控制装置的电路主要由以AT89C2051为核心的单片
[单片机]
基于AT89C20<font color='red'>51单片机</font>的纺纱断线自动检测<font color='red'>系统</font>的设计
如何计算8051单片机的波特率
8051单片机使用定时器1工作在方式2的情况下作为串口波特率发生器,其波特率=(2smod/32)×(定时器T1溢出率),其中smod是PCON《7》,表示是否波特率加倍,Fsoc是系统的晶振大小。 波特率公式中:T1溢出率=溢出周期的倒数;溢出周期=(256-TH1)×12/Fosc; 最终公式: 波特率:Baud=(2smod× Fsoc)/(32 ×12×(256-TH1)) 我们一般不太关注波特率的计算,而是关心选用的传输速度(波特率)去反算定时器1(自动重装模式)的初值(TH1),所以将上面的公式导一下,得到TH1的公式: TH1=256-(Fsoc×2smod)/(12×32×Baud) 下面针对串口发送程序,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved