【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://www.pswp.cn/web/96208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96208.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

騰訊云負載均衡增加訪問策略后訪問失敗

為了測試&#xff0c;在負載均衡的安全組添加2條安全策略&#xff0c;限制辦公室內IP可訪問&#xff0c;其他IP地址拒絕所有訪問。結果&#xff0c;訪問失敗。經過反復測試&#xff0c;主要是js問價加載失敗&#xff0c;動態接口訪問代碼返回正常。再進行測試&#xff0c;發現去…

CSS的文本樣式

1.文本樣式的分類注意&#xff1a;必須先建立標簽&#xff0c;再在head中修改1.1字體樣式1.1.1字體顏色代碼演示<head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

R語言讀取excel文件數據-解決na問題

文章目錄安裝R語言運行環境實現代碼遇到的問題總結安裝R語言運行環境 安裝教程連接, 包含國內鏡像快速下載 實現代碼 實現思路&#xff1a;使用python將文件的空字符的位置變成0&#xff0c;生成csv文件后交給R語言處理python實現代碼如下&#xff1a; import pandas as pd…

【Nginx 運維實戰】版本替換:強制 vs 平滑升級全解析

【Nginx 運維實戰】版本替換&#xff1a;強制 vs 平滑升級全解析一&#xff1a;版本替換的兩種思路二&#xff1a;使用場景對比三&#xff1a;實戰1&#xff09;強制替換1.備份舊版本2.替換為新版本3.**賦予執行權限**4.**重啟 Nginx**2&#xff09;平滑替換1.確認進程文件2.備…

MQ-消息隊列

定義 Mssage Queue&#xff1a;消息隊列。它是一種“先進先出”&#xff08;FIFO&#xff09;的數據結構&#xff0c;用于在分布式系統或應用程序之間進行異步通信。組成1. 生產者&#xff08;Producer&#xff09;定義&#xff1a;消息的發送方&#xff0c;負責將業務系…

NVIDIA驅動程序核心的“即時編譯器”(Just-in-Time, JIT Compiler)詳細介紹

我們來詳細、深入地剖析這個位于NVIDIA驅動程序核心的“即時編譯器”&#xff08;Just-in-Time, JIT Compiler&#xff09;。它堪稱CUDA生態系統成功的“幕后英雄”&#xff0c;是連接軟件穩定性和硬件飛速發展的關鍵橋梁。 第一部分&#xff1a;JIT編譯器的本質 首先&#xff…

【PS2025全網最新版】穩定版PS2025保姆級下載安裝詳細圖文教程(附安裝包)(Adobe Photoshop)

今天&#xff0c;給大家帶來PS2025的保姆級下載安裝圖文教程。 前言&#xff1a; Adobe Photoshop 作為業界領先的圖像處理與設計軟件&#xff0c;持續推動著數字創意領域的發展。其應用涵蓋平面設計、攝影后期、UI/UX 設計、影視特效等多個專業方向&#xff0c;為用戶提供強…

分享TWS充電倉方案開發設計

TWS耳機市場“卷”到最后&#xff0c;拼的早已不只是音質&#xff0c;而是續航、交互、體積、成本四位一體。傳統充電倉用多顆IC堆砌&#xff1a;升壓、電量計、霍爾、LED驅動、保護IC……BOM高、貼片復雜、調試周期長。8位MCU把上述功能“一鍋端”&#xff1a;單芯片即完成電源…

【Java實戰?】深入Java單元測試:JUnit 5實戰指南

目錄一、單元測試概述1.1 單元測試概念1.2 單元測試優勢1.3 JUnit 5 框架組成1.4 JUnit 5 環境搭建二、JUnit 5 核心功能實戰2.1 測試類與測試方法2.2 測試生命周期2.3 斷言方法2.4 異常測試三、單元測試進階實戰3.1 參數化測試3.2 測試套件3.3 Mockito 框架3.4 單元測試實戰案…

分布式微服務--ZooKeeper作為分布式鎖

看這篇博客之前可以先去了解博主的另一篇講解ZooKeeper的博客&#xff1a;分布式微服務--ZooKeeper的客戶端常用命令 & Java API 操作-CSDN博客 1. 為什么需要分布式鎖&#xff1f; 在分布式系統中&#xff0c;多個服務節點可能同時訪問或修改同一份共享資源&#xff08;例…

基于容器化云原生的 MySQL 及中間件高可用自動化集群項目

1 項目概述 本項目旨在構建一個高可用、高性能的 MySQL 集群,能夠處理大規模并發業務。通過容器化部署、多級緩存、完善的監控和備份策略,確保數據庫服務的連續性和數據安全性。 架構總覽 預期目標 數據庫服務可用性達到 99.99% 支持每秒 thousands 級別的并發訪問 實現秒…

如何將 iPhone 備份到電腦/PC 的前 5 種方法

定期備份你的 iPhone&#xff08;最好每兩周一次&#xff09;對于保護你的數據至關重要。它確保了如果設備損壞、丟失或被盜&#xff0c;或者你換了新手機&#xff0c;你不會丟失重要信息&#xff0c;并且可以輕松地從備份中恢復應用程序、照片、設置等。如果你不確定如何備份 …

國產AI芯片編程模型深度對比:寒武紀MLU vs 壁仞BR100異構計算設計

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 引言&#xff1a;國產AI芯片的崛起與挑戰 隨著人工智能技術的飛速…

【項目】基于One Thread One Loop模型的高性能網絡庫實現 - 項目介紹與前置知識

目錄 項目介紹 HTTP服務器基本認識 Reactor模式基本認識 單Reactor單線程模式認識 單Reactor多線程模式認識 多Reactor多線程模式認識 模塊劃分 Server模塊 Buffer模塊 Socket模塊 Channel模塊 Connection模塊 Acceptor模塊 TimerQueue模塊 Poller模塊 EventLo…

lua中table鍵類型及lua中table的初始化有幾種方式

在 Lua 中&#xff0c;table 的鍵幾乎可以是任何類型&#xff0c;但有幾個重要的規則和最佳實踐需要了解。1. 主要鍵類型(1) 字符串 (string)這是最常見、最推薦的鍵類型。local person {name "Alice", -- 等同于 ["name"] "Alice"["age…

matlab實現利用雙MZI產生RZ33-QPSK信號

利用MATLAB實現雙MZI產生RZ33-QPSK信號的代碼&#xff1a; 參數設置 % 信號參數 fs 1e6; % 采樣頻率 fc 10e6; % 載波頻率 T 1e-6; % 符號周期 N 1000; % 采樣點數 t 0:1/fs:(N-1)/fs; % 時間向量生成QPSK信號 % 生成隨機二進制序列 data randi([0,1],1,N);% 將二進制序列…

Vue響應式更新 vs React狀態更新:兩種范式的底層邏輯與實踐差異

在現代前端框架中&#xff0c;Vue和React作為兩大主流選擇&#xff0c;分別采用了截然不同的狀態管理與更新機制。Vue的“響應式更新”通過自動追蹤依賴實現數據與視圖的聯動&#xff0c;而React的“狀態更新”則依賴顯式setState觸發重新渲染。本文將從底層原理、更新流程、優…

Spring MVC 的常用注解

一、控制器相關注解ControllerController注解用于標記一個類為 Spring MVC 的控制器。在 Spring MVC 框架里&#xff0c;控制器扮演著關鍵角色&#xff0c;負責接收 HTTP 請求并返回響應。當一個類被Controller注解標記后&#xff0c;Spring 容器會自動識別并將其納入管理。例如…

Oracle APEX 利用卡片實現翻轉(方法一)

目錄 0. 以 Oracle 的標準示例表 EMP 為例&#xff0c;實現卡片翻轉 1. 創建PL/SQL動態內容區域 2. 添加 CSS 實現翻轉效果 3. 添加動態操作 (Dynamic Action) 4. 看效果 0. 以 Oracle 的標準示例表 EMP 為例&#xff0c;實現卡片翻轉 正面&#xff1a; 顯示員工姓名 (EN…

Gradio全解11——Streaming:流式傳輸的視頻應用(1)——FastRTC:Python實時通信庫

Gradio全解11——Streaming&#xff1a;流式傳輸的視頻應用&#xff08;1&#xff09;——FastRTC&#xff1a;Python實時通信庫前言第11章 Streaming&#xff1a;流式傳輸的視頻應用11.1 FastRTC&#xff1a;Python實時通信庫11.1.1 WebRTC協議與FastRTC介紹1. WebRTC協議的概…