日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于51单片机定时宠物投喂自动喂食器

發布時間:2024/3/24 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于51单片机定时宠物投喂自动喂食器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

資料編號:143

視頻講解:

143-基于51單片機的定時寵物投喂自動喂食器(源程序+原理圖+PCB+全套畢設資料)

? ? ?

題目要求:設計一個基于51單片機的寵物自動投喂裝置

具體要求:

1、可以定時進行投喂

2、可以設置重置較準時間

3、可以手動/自動切換

4、具備顯示功能

全套資料齊全:

LCD1602顯示函數部分示例:

/********************************************************************
* 文件名 ?: 液晶1602顯示.c
* 描述 ? ?: ?該程序實現了對液晶1602的控制。
***********************************************************************/
#include "1602.h"
#include "math.h"

/********************************************************************
* 名稱 : delay()
* 功能 : 延時,延時時間大概為140US。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/

void delay()
{
?? ?int i,j;
?? ?for(i=0; i<=10; i++)
?? ?for(j=0; j<=2; j++)
;
}

/********************************************************************
* 名稱 : Convert(uchar In_Date)
* 功能 : 因為電路設計時,P0.0--P0.7接法剛好了資料中的相反,所以設計該函數。
* 輸入 : 1602資料上的值
* 輸出 : 送到1602的值
***********************************************************************/
uchar Convert(uchar In_Date)
{
? ??
? ? uchar i, Out_Date = 0, temp = 0;
? ? for(i=0; i<8; i++)
? ? {
? ? ? ? temp = (In_Date >> i) & 0x01;
? ? ? ? Out_Date |= (temp << (7 - i));
? ? }
?? ?
? ? return Out_Date;
?? ?
// ? ?return In_Date;

}
/********************************************************************
* 名稱 : enable(uchar del)
* 功能 : 1602命令函數
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/

void enable(uchar del)
{?? ?
?? ?RS = 0;
?? ?RW = 0;
?? ?LCD_DATA = del;
?? ?E = 1;
?? ?delay();
?? ?E = 0;
?? ?delay();
}

/********************************************************************
* 名稱 : write(uchar del)
* 功能 : 1602寫數據函數
* 輸入 : 需要寫入1602的數據
* 輸出 : 無
***********************************************************************/

void write(uchar del)
{ ?
?? ?RS = 1;
?? ?RW = 0;
?? ?LCD_DATA = del;
?? ?E = 1;
?? ?delay();
?? ?E = 0;
?? ?delay();
}

/********************************************************************
* 名稱 : L1602_init()
* 功能 : 1602初始化,請參考1602的資料
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void lcd1602_init(void)
{
?? ?enable(0x38);
?? ?enable(0x0c);
?? ?enable(0x06);
?? ?enable(0x01);
?? ?enable(0xd0);
}

/********************************************************************
* 名稱 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符顯示"b" ,調用該函數如下
?? ??? ? L1602_char(1,5,'b')
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
?? ?uchar a;
?? ?if(hang == 1) a = 0x80;
?? ?if(hang == 2) a = 0xc0;
?? ?a = a + lie - 1;
?? ?enable(a);
?? ?write(sign);
}

/********************************************************************
* 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調用該函數如下
?? ? ?? ? L1602_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數據
* 輸出 : 無
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
?? ?uchar a;
?? ?if(hang == 1) a = 0x80;
?? ?if(hang == 2) a = 0xc0;
?? ?a = a + lie - 1;
?? ?enable(a);
?? ?while(1)
?? ?{
?? ??? ?if(*p == '\0') break;
?? ??? ?write(*p);
?? ??? ?p++;
?? ?}
}

//顯示整型的溫濕度數據用,共占用4位,其中一位符號位
void L1602_int(uchar hang, uchar lie, int num)
{
? ?uint temp;
? ?uint gewei,shiwei,baiwei,sign;
? ?if (num >= 0)
? ?{
? ? ? sign = 0;
? ?}
? ?else
? ?{
? ? ? sign = 1;
? ?}
? ?temp = abs(num);
// ? baiwei = temp / 100;
// ? temp = temp - baiwei*100;
? ?shiwei = temp / 10;
? ?gewei = temp - shiwei*10;
? ?num = abs(num);

?? ? ?L1602_char(hang, lie, shiwei+48); ?
?? ? ?L1602_char(hang, lie+1, gewei+48); ?
? ?
}

單片機最小系統介紹
單片機(Microcontrollers)是一種集成電路芯片,是采用超大規模集成電路技術把具有數據處理能力的中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊硅片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位單片機,發展到現在的300M的高速單片機。本文的單片機特指51單片機,具體芯片型號是 AT89C52。需注意STC89C51,STC89C52,AT89C51,AT89C52都是51單片機的一種具體芯片型號。

最小系統組成:

51單片機最小系統:單片機、復位電路、晶振(時鐘)電路、電源

最小系統用到的引腳

1、主電源引腳(2根)

VCC:電源輸入,接+5V電源

GND:接地線

2、外接晶振引腳(2根)

XTAL1:片內振蕩電路的輸入端

XTAL2:片內振蕩電路的輸出端

3、控制引腳(4根)

RST/VPP:復位引腳,引腳上

復位電路
一般來說,在電路圖中,電容的的大小是10uf,電阻的大小是10k。(不特指本電路,具體參數看仿真圖)

在5V正常工作的51單片機中小于1.5V的電壓信號為低電平信號,而大于1.5V的電壓信號為高電平信號。可以算出電容充電到電源電壓的0.7倍,即電容兩端電壓為3.5V、電阻兩端電壓為1.5V時,需要的時間約為T=RC=10K*10UF=0.1S。

也就是說在單片機上電啟動的0.1S內,電容兩端的電壓從0-3.5V不斷增加,這個時候10K電阻兩端的電壓為從5-1.5V不斷減少(串聯電路各處電壓之和為總電壓),所以RST引腳所接收到的電壓是5V-1.5V的過程,也就是高電平到低電平的過程。

單片機RST引腳是高電平有效,即復位;低電平無效,即單片機正常工作。所以在開機0.1S內,單片機系統RST引腳接收到了時間為0.1S左右的高電平信號,所以實現了自動復位。

在單片機啟動0.1S后,電容C兩端的電壓持續充電為5V,這是時候10K電阻兩端的電壓接近于0V,RST處于低電平所以系統正常工作。當按鍵按下的時候,開關導通,這個時候電容兩端形成了一個回路,電容被短路,所以在按鍵按下的這個過程中,電容開始釋放之前充的電量。隨著時間的推移,電容的電壓在0.1S內,從5V釋放到變為了1.5V,甚至更小。根據串聯電路電壓為各處之和,這個時候10K電阻兩端的電壓為3.5V,甚至更大,所以RST引腳又接收到高電平。單片機系統自動復位。

?資料下載鏈接https://pan.baidu.com/s/1quiB7KZGZN9WUAtGNd6aow?pwd=fba3

總結

以上是生活随笔為你收集整理的基于51单片机定时宠物投喂自动喂食器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。