基于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单片机定时宠物投喂自动喂食器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入职中国平安三周年的一些总结
- 下一篇: 图书馆区域集群管理系统软件V4.0