功能介绍:
0.本系统采用STC89C52作为单片机
功能简介:
1.LCD1602实时显示当前时间/温湿度/食物重量
2.当时间到达设定喂食时间,启动步进电机进行投喂,投喂量达到预先设定好的重量后停止投喂
3.按键可更改当前时间/喂食时间/喂食量
4.按键可手动控制喂食(手动控制时,不判断实物重量)
5.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

#include "main.h"char dis[16];enum _MODE_DF_ dispMode;
unsigned char setIndex = 0;bit refreshFlag = 1;unsigned long initialWeight = 0; //单位g
float objectWeight = 0; //单位gunsigned char feedTime[3] = {18, 0, 0}; //投喂时间18:00:00
int feedWeight = 100; //100g
bit feedFlag1 = 0; //自动喂食启动标志1
bit feedFlag2 = 0; //手动喂食启动标志2void main(void)
{BYJ48 = ((BYJ48 & 0xF0) | REV[0]); //取数据ULN_DQ3 = BIT3;ULN_DQ2 = BIT2;ULN_DQ1 = BIT1;ULN_DQ0 = BIT0;Timer0_Init();Timer1_Init();DS1302_Init();// DS1302_Write_Time();DelayMs(10);LCD_Init();LCD_DispStr(0, 0, "    Welcome!    ");DelayMs(200);initialWeight = HX711_GetInitialWeight();LCD_Clear();while (1){if (refreshFlag == 1) //每400ms刷新一次屏幕{refreshFlag = 0;if (dispMode == NORMAL){DispNormal();}}if (timeBufDec[4] == feedTime[0] && timeBufDec[5] == feedTime[1] && timeBufDec[6] == feedTime[2]){feedFlag1 = 1; //启动喂食}if (objectWeight >= feedWeight) //超过喂食重量{feedFlag1 = 0; //停止喂食}KeyProcess();}
}void DispNormal()
{DS1302_Read_Time(); //读取实时时间ET1 = 0;objectWeight = HX711_Read();objectWeight = (objectWeight - initialWeight) / GAPVALUE; //读取实物重量objectWeight = (objectWeight<0)?0:objectWeight;DHT11_0_ReadData(); //读取温湿度ET1 = 1;sprintf(dis, "W:%6.3fkg %2d", objectWeight/1000, (int)U8T_data_H);LCD_DispStr(0, 0, dis);LCD_DispOneChar(13, 0, 0xdf);LCD_DispOneChar(14, 0, 'C');sprintf(dis, "%02d:%02d:%02d  Hm:%2d%%", (int)timeBufDec[4], (int)timeBufDec[5], (int)timeBufDec[6], (int)U8RH_data_H);LCD_DispStr(0, 1, dis);
}/************************* 设置当前时间 *************************/
void DispSetTime(unsigned char setIndex)
{sprintf(dis, "%02d:%02d:%02d", (int)timeBufDec[4], (int)timeBufDec[5], (int)timeBufDec[6]);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(1, 1, 1); break;case 2: LCD_SetCursor(4, 1, 1); break;case 3: LCD_SetCursor(7, 1, 1); break;default:break;} }/************************* 设置喂食时间 *************************/
void DispSetFeedTime(unsigned char setIndex)
{LCD_DispStr(0, 0, "    Feed Time   ");//LCD_DispStr(0, 0, "     TIME 2     ");sprintf(dis, "    %02d:%02d:%02d   ", (int)feedTime[0], (int)feedTime[1], (int)feedTime[2]);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(5, 1, 1); break;case 2: LCD_SetCursor(8, 1, 1); break;case 3: LCD_SetCursor(11, 1, 1); break;default:break;}
}/************************* 设置喂食量 *************************/
void DispSetFeedWeight(unsigned char setIndex)
{LCD_DispStr(0, 0, "   Food Weight  ");sprintf(dis, "    %6.3fkg ", (float)feedWeight/1000);LCD_DispStr(0, 1, dis);switch (setIndex){case 1: LCD_SetCursor(8, 1, 1); break;default:break;}
}void Timer0_Init()
{TMOD &= 0xF0;TMOD |= 0x01; //T0 T1 均在工作方式1PT0 = 1;     //优先级设置TR0 = 0;ET0 = 1;     //T0开中断EA = 1;      //CPU开中断
}void Timer1_Init()
{TMOD &= 0x0F;TMOD |= 0x10; //T0 T1 均在工作方式1TH1 = (65536 - 18432) / 256; //定时20msTL1 = (65536 - 18432) % 256;TR1 = 1;ET1 = 1;     //T0开中断EA = 1;      //CPU开中断
}void Timer1(void) interrupt 3 //T1中断程序
{static unsigned int cnt = 0;static unsigned int motorCnt = 0;TL1 = 0x66;        //设置定时初始值TH1 = 0xFC;       //设置定时初始值 1mscnt++;if (cnt >= 400){refreshFlag = 1;cnt = 0;}if (feedFlag1 == 1 || feedFlag2 == 1) //启动喂食,正转{if (motorCnt <= MAXCNT){BYJ48 = ((BYJ48 & 0xF0) | REV[motorCnt % 8]); //取数据ULN_DQ3 = BIT3;ULN_DQ2 = BIT2;ULN_DQ1 = BIT1;ULN_DQ0 = BIT0;motorCnt++;}}else //停止喂食反转{if (motorCnt > 0){BYJ48 = ((BYJ48 & 0xF0) | REV[motorCnt % 8]); //取数据ULN_DQ3 = BIT3;ULN_DQ2 = BIT2;ULN_DQ1 = BIT1;ULN_DQ0 = BIT0;motorCnt--;}}}
//程序结束

仿真演示视频:
https://www.bilibili.com/video/BV1F24y197J3/

实物演示视频:
https://www.bilibili.com/video/BV1fN4y1P7Yu/

基于51单片机的宠物自动猫粮狗粮喂养机proteus仿真原理图PCB相关推荐

  1. 【003】基于51单片机的宠物自动定时、喂食系统的proteus仿真设计

    一.压缩包资料(私信获取) (1). 包含基于51单片机的宠物自动定时.喂食系统的proteus仿真设计一份: (2).包含基于51单片机的宠物自动定时.喂食系统keil源代码工程文件一份: (3). ...

  2. 基于51单片机的智能遥控晾衣架温度湿度光强检测proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度/湿度/光强/晾衣架状态 2.支持手动/自动两种模式 3.自动模式下,当温度>10/湿度<90/光强 ...

  3. 基于51单片机的太阳能板追光控制串口上报系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.支持手动/自动两种模式 2.自动模式下,系统实时监测当前各个方位的光强信息,并通过串口上报 3.自动模式下,通过判断各方位的光强,转动步进电机 ...

  4. 基于51单片机的智能护眼台灯带闹钟功能proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/工作模式/灯光亮度 2.具备闹钟功能,到达闹钟时间,蜂鸣器报警 3.自动模式下,有人灯亮,人离开后15s, ...

  5. 基于51单片机煤气天然气有毒气体检测系统蓝牙手机通信proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统采用LCD1602作为显示液晶,可以实时显示气体的检测情况以及其他功能设置信息 2.检测有毒气体传感器用的是MQ-4系列传感器 3.蜂鸣器和L ...

  6. 基于51单片机的语音控制GSM短信报警密码锁proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.输入密码正确,屏幕提示OK:输入密码错误,蜂鸣器LED声光报警 2.连续三次输入密码错误,屏幕提示LOCK锁住,并通过GSM发送报警短信 3. ...

  7. 基于51单片机的智能环境监测光强火焰有害气体检测proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.系统实时监测当前的有害气体状态/光强信息/火焰状态 2.当有害气体浓度超过阈值或检测到火焰时,蜂鸣器报警,并启动风扇进行通风 3.按键可设定阈 ...

  8. 基于51单片机的温度控制系统数码管显示蜂鸣器报警proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统实时监测并显示当前温度,并通过四位数码管显示 2.超过设定阈值,蜂鸣器将报警,同时控制相应继电器实现降温或者加热 3.系统具备三个功能按键,可 ...

  9. 基于51单片机的智能停车场泊车车位系统LCD12864显示proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.LCD12864液晶实时显示当前车位状态 2.蓝牙串口间隔5秒发送一次当前车位状态 3.系统通过LCD12864大屏显示车位的状态 4.采用D ...

最新文章

  1. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
  2. 设计一个user类(Java)
  3. ASP.NET MVC – Nerdinner - notes
  4. jQuery validation插件的使用(转)
  5. RedisTemplate常用集合使用说明-opsForZSet(六)
  6. 个人作业(alpha)
  7. vue中rules校验是验证首字符_小白也能秒懂Vue源码中那些精细设计(选项处理)...
  8. ILP32和LP64数据模型
  9. Chaarshanbegaan at Cafebazaar 水题
  10. CVPR 2018:阿里提出新零样本学习方法,有效解决偏置问题
  11. Wide Deep 模型详解
  12. Excel被锁定,如何解锁
  13. 十大经典排序算法(C语言实现)
  14. Postman——pre-request产生随机字符串和随机数字传给request body
  15. b区计算机211学校排名,考研B区院校排名
  16. 利用bootstrap实现的响应式导航条
  17. [React Native] 动画 · Animated
  18. 万花哥特体繁黑执事中文字体_50多种免费的高质量哥特式和恐怖字体
  19. cvRound cvFloor cvCei 和 int
  20. 微信小程序蓝牙BLE开发——关于进制转换(四)

热门文章

  1. matlab车轮滚动动画,Fireworks动画教程:简单制作轮子滚动动画效果
  2. django 1.11.6—— Celery
  3. php农历生日计算,阴历-农历-转换类 (PHP版),阴历php
  4. linux sendmail
  5. 如何使用BBP公式直接计算π的第n位
  6. 密码极客经济学博士揭秘,2020年哪个区块链项目最值期待?
  7. 用CSS3写一个旋转魔方相册
  8. 跟上 Java 8 – 了解 lambda
  9. jk触发器上升沿怎么看_jk触发器波形图_jk触发器波形图怎么画
  10. linux系统中的分区与挂载,以及使用LVM逻辑卷管理器管理物理卷,卷组,逻辑卷知识点总结