基于51单片机的宠物自动猫粮狗粮喂养机proteus仿真原理图PCB
生活随笔
收集整理的這篇文章主要介紹了
基于51单片机的宠物自动猫粮狗粮喂养机proteus仿真原理图PCB
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
功能介紹:
0.本系統(tǒng)采用STC89C52作為單片機(jī)
功能簡(jiǎn)介:
1.LCD1602實(shí)時(shí)顯示當(dāng)前時(shí)間/溫濕度/食物重量
2.當(dāng)時(shí)間到達(dá)設(shè)定喂食時(shí)間,啟動(dòng)步進(jìn)電機(jī)進(jìn)行投喂,投喂量達(dá)到預(yù)先設(shè)定好的重量后停止投喂
3.按鍵可更改當(dāng)前時(shí)間/喂食時(shí)間/喂食量
4.按鍵可手動(dòng)控制喂食(手動(dòng)控制時(shí),不判斷實(shí)物重量)
5.采用DC002作為電源接口可直接輸入5V給整個(gè)系統(tǒng)供電
原理圖:
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}; //投喂時(shí)間18:00:00 int feedWeight = 100; //100g bit feedFlag1 = 0; //自動(dòng)喂食啟動(dòng)標(biāo)志1 bit feedFlag2 = 0; //手動(dòng)喂食啟動(dòng)標(biāo)志2void main(void) {BYJ48 = ((BYJ48 & 0xF0) | REV[0]); //取數(shù)據(jù)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; //啟動(dòng)喂食}if (objectWeight >= feedWeight) //超過(guò)喂食重量{feedFlag1 = 0; //停止喂食}KeyProcess();} }void DispNormal() {DS1302_Read_Time(); //讀取實(shí)時(shí)時(shí)間ET1 = 0;objectWeight = HX711_Read();objectWeight = (objectWeight - initialWeight) / GAPVALUE; //讀取實(shí)物重量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); }/************************* 設(shè)置當(dāng)前時(shí)間 *************************/ 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;} }/************************* 設(shè)置喂食時(shí)間 *************************/ 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;} }/************************* 設(shè)置喂食量 *************************/ 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; //優(yōu)先級(jí)設(shè)置TR0 = 0;ET0 = 1; //T0開(kāi)中斷EA = 1; //CPU開(kāi)中斷 }void Timer1_Init() {TMOD &= 0x0F;TMOD |= 0x10; //T0 T1 均在工作方式1TH1 = (65536 - 18432) / 256; //定時(shí)20msTL1 = (65536 - 18432) % 256;TR1 = 1;ET1 = 1; //T0開(kāi)中斷EA = 1; //CPU開(kāi)中斷 }void Timer1(void) interrupt 3 //T1中斷程序 {static unsigned int cnt = 0;static unsigned int motorCnt = 0;TL1 = 0x66; //設(shè)置定時(shí)初始值TH1 = 0xFC; //設(shè)置定時(shí)初始值 1mscnt++;if (cnt >= 400){refreshFlag = 1;cnt = 0;}if (feedFlag1 == 1 || feedFlag2 == 1) //啟動(dòng)喂食,正轉(zhuǎn){if (motorCnt <= MAXCNT){BYJ48 = ((BYJ48 & 0xF0) | REV[motorCnt % 8]); //取數(shù)據(jù)ULN_DQ3 = BIT3;ULN_DQ2 = BIT2;ULN_DQ1 = BIT1;ULN_DQ0 = BIT0;motorCnt++;}}else //停止喂食反轉(zhuǎn){if (motorCnt > 0){BYJ48 = ((BYJ48 & 0xF0) | REV[motorCnt % 8]); //取數(shù)據(jù)ULN_DQ3 = BIT3;ULN_DQ2 = BIT2;ULN_DQ1 = BIT1;ULN_DQ0 = BIT0;motorCnt--;}}} //程序結(jié)束仿真演示視頻:
https://www.bilibili.com/video/BV1F24y197J3/
實(shí)物演示視頻:
https://www.bilibili.com/video/BV1fN4y1P7Yu/
總結(jié)
以上是生活随笔為你收集整理的基于51单片机的宠物自动猫粮狗粮喂养机proteus仿真原理图PCB的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 方向gravity_两种对齐方式,lay
- 下一篇: 找出词典中的所有的变位词 --By