基于51單片機多功能防盜報警系統(tǒng)( proteus仿真+程序+設計報告+原理圖+講解視頻)
仿真圖proteus8.9
及以上
程序編譯器:keil 4/keil 5
編程語言:C語言
設計編號:S0098
1. 主要功能:
基于51單片機的多功能防盜報警器仿真設計
1、系統(tǒng)可以測量光照和人體距離通過LCD1602顯示,具備手動控制布防和撤防;
2、如果光照高于閥值,說明有人開窗入室,啟動報警;
3、如果人體距離太近,說明有人靠近房屋,啟動報警;
4、檢測到異常振動,啟動報警;
5、檢測到人體紅外,啟動報警;
6、具有緊急按鈕,在突發(fā)情況下手動啟動報警;
7、可以通過按鍵設置光照閾值和報警距離;
51單片機、光照傳感器、超聲波傳感器、震動傳感器、人體紅外檢測傳感器
需注意仿真中51單片機芯片是兼容的,AT89C51,AT89C52是51單片機的具體型號,內(nèi)核是一樣的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機芯片。
以下為本設計資料展示圖:
2. 講解視頻:
講解視頻包含仿真運行講解和代碼講解
3. 仿真
打開仿真工程,雙擊proteus中的單片機,選擇hex文件路徑,然后開始仿真。開始仿真后LCD1602液晶顯示光照強度和距離以及對應的報警值,默認開機時不設防模式,檢測值超過閾值不做報警處理。具備手動控制布防和撤防;
設防后,調(diào)整光照高于閥值,說明有人開窗入室,啟動報警;
如果人體距離太近,說明有人靠近,啟動報警;
震動按鍵按下,系統(tǒng)檢測到異常振動,啟動報警;人體感應按鍵按下系統(tǒng)檢測到人體紅外,啟動報警;緊急按鈕按下,在突發(fā)情況下手動啟動報警;
系統(tǒng)可以通過按鍵設置光照閾值和報警距離;
4. 程序代碼
使用keil4或者keil5編譯,代碼有注釋,可以結合視頻理解代碼含義。
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit led=P2^0;//LED
sbit out=P1^7;
sbit beep=P2^1;//蜂鳴器
sbit k1=P3^4;//遙控輸入
sbit k2=P3^5;
sbit k3=P1^0;
sbit s1=P3^6;
sbit s2=P3^7;
sbit s3=P3^0;
sbit s4=P3^1;
sbit rs=P2^5; //1602數(shù)據(jù)/命令選擇引腳 H:數(shù)據(jù) L:命令
sbit rw=P2^6; //1602讀寫引腳 H:數(shù)據(jù)寄存器 L:指令寄存器
sbit e =P2^7; //1602使能引腳 下降沿觸發(fā)
sbit Trig = P1^5;
sbit Echo = P1^6;
sbit CLK= P1^1;//時鐘,初始狀態(tài)為0
sbit DI= P1^2;//數(shù)據(jù)輸入
sbit DO= P1^3; // 數(shù)據(jù)輸出
sbit CS= P1^4;
uchar time=0;
uint juli=0,lim1=30;//距離
uchar light=0,lim2=50;//光線
uchar disp1[]="L:000Lx S:000cm";
uchar disp2[]=" 000Lx 000cm";
/*********************************************
讀取ADC
**********************************************/
uchar ADC(uchar ch)//通道ch 1,2
{
uchar temp0,temp1,i;
CS=0;
temp0=0;
temp1=0;
_nop_();
_nop_();
DI=1;//開始位
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
//選擇通道0
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1個下降沿DI=1
_nop_();
if(ch==1)
DI=0;
if(ch==2)
DI=1;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3個上升沿DI=0
_nop_();
DI=1;
//********通道選擇結束開始讀取轉(zhuǎn)換后的二進制數(shù)****
//下降沿讀數(shù),一下進行判斷和處理,共8次
for(i=0;i<8;i++)
{
temp0=temp0<<1;
CLK=1;
if(DO)
temp0++;
_nop_();
CLK=0;
}
for(i=0;i<8;i++)
{
temp1=temp1>>1;
CLK=1;
if(DO)
temp1=temp1 +0x80;
_nop_();
CLK=0;
}
CS=1;
return temp0;
}
void StartModule()//啟動模塊
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void HC_SRinit()//初始化
{
TMOD|=0x11; //設T0為方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0x3c;
TL1=0xb0;
ET1=1;
TR1=1;
EA=1;
Trig=0;
}
uint HC_SRread()//測距
{
uint time=0;
while(!Echo) //當RX為零時等待
StartModule(); //啟動模塊
TR0=1; //開啟計數(shù)
while(Echo); //當RX為1計數(shù)并等待
TR0=0; //關閉計數(shù)
time=TH0*256+TL0; //計算
TH0=0;
TL0=0;
time=time*1.7/50; //精度0.5cm
return time;
}
void delay_uint(uint i)
{
while(i--);
}
/********************************************************************
* 名稱 : write_com(uchar com)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_uint(20);
e=1;
delay_uint(20);
e=0;
}
/********************************************************************
* 名稱 : write_data(uchar dat)
* 功能 : 1602寫數(shù)據(jù)函數(shù)
* 輸入 : 需要寫入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_uint(20);
e=1;
delay_uint(20);
e=0;
}
/********************************************************************
* 名稱 : write_string(uchar hang,uchar add,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
write_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void write_string(uchar hang,uchar add,uchar *p)
{
if(hang==1)
write_com(0x80+add);
else
write_com(0x80+0x40+add);
while(1)
{
if(*p == '?') break;
write_data(*p);
p++;
}
}
/********************************************************************
* 名稱 : init_1602()
* 功能 : 初始化1602液晶
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void init_1602()
{
write_com(0x38); //數(shù)據(jù)總線為8位,顯示2行,5x7點陣
write_com(0x0c); //開顯示,有光標,光標閃爍
write_com(0x06); //光標自動右移
delay_uint(1000); //等待設置完成
}
//主函數(shù)
void main()
{
init_1602();
HC_SRinit();//初始化
//設置INT0
IT0=1;//跳變沿出發(fā)方式(下降沿)
EX0=1;//打開INT0的中斷允許。
//設置INT1
IT1=1;//跳變沿出發(fā)方式(下降沿)
EX1=1;//打開INT1的中斷允許。
EA=1;
while(1)
{
if(!s1)//距離設置
{
if(lim1<500)
lim1++;
while(!s1);
}
if(!s2)//距離設置
{
if(lim1>0)
lim1--;
while(!s2);
}
if(!s3)//光照設置
{
if(lim2<120)
lim2++;
while(!s3);
}
if(!s4)//光照設置
{
if(lim2>0)
lim2--;
while(!s4);
}
if(!k1)//布防
{
led=0;
while(!k1);
}
if(!k2)//撤防
{
led=1;
out=1;
beep=1;
while(!k1);
}
if(!k3) //緊急
{
out=0;
beep=0;
led=0;
}
if(!led)
{
//傳感器報警
if((light>lim2)||(juli<lim1))
beep=0;
}
}
}
void Int0() interrupt 0 //外部中斷0的中斷函數(shù)
{
if(!led)
beep=0;
}
void Int1() interrupt 2 //外部中斷1的中斷函數(shù)
{
if(!led)
beep=0;
}完整代碼見文章下載鏈接
5. 設計報告
10296字設計報告,內(nèi)容包括硬件設計、軟件設計、軟硬件框圖、調(diào)試、結論等
隨著現(xiàn)代社會經(jīng)濟的快速發(fā)展和人民生活水平的不斷提升,社會治安需求呈現(xiàn)出多元化、精細化的特點。無論是居民住宅還是小型商業(yè)場所,其安全防護問題已不再僅局限于物理屏障的構筑,而是愈發(fā)強調(diào)智能化、主動化的安全保障。在這樣的背景下,家庭及小型商業(yè)場所的安全防護需求日益凸顯,成為社會關注的焦點之一。
傳統(tǒng)的防盜報警器,盡管在一定程度上起到了預警與震懾的作用,但在實際應用中卻暴露出諸多局限性。這類報警器往往功能較為單一,主要依賴于門窗磁感應、紅外人體探測等基礎手段,對于復雜多變的入侵情境往往難以做出精準、及時的響應。比如,對于非法翻越窗戶、遮擋紅外探頭、利用工具破壞門窗等手法,傳統(tǒng)報警器的偵測能力相對有限。此外,傳統(tǒng)報警器在誤報率、遠程監(jiān)控、自適應環(huán)境變化等方面也存在不足,無法滿足現(xiàn)代用戶對于高效、精準、便捷安全防護的期待。
針對上述問題,本課題提出了設計一款基于51單片機的多功能防盜報警器的研究任務。該報警器旨在突破傳統(tǒng)設備的功能局限,通過集成先進的傳感器技術,構建全方位、智能化的安防監(jiān)控體系,從而顯著提升家庭及小型商業(yè)場所的安全防護水平,同時優(yōu)化用戶體驗。
6. 原理圖
原理圖使用AD繪制,可供實物參考,仿真不同于實物,經(jīng)驗不足不要輕易搞實物。
元件 型號 數(shù)量
單片機 AT89C51 1
電容 30pf 2
電容 10uf 1
晶振 12MHZ 1
電阻 10k 1
按鈕 5
電阻 100歐 4
LED 紅色 2
三極管 PNP 1
蜂鳴器 有源 1
電阻 1k 1
熱釋電 HCSR501 1
超聲波 HC-04 1
光敏電阻 10k 1
模數(shù)芯片 ADC0832 1
?
電源部分
排針 2P 1
電容 0.1uf 2
電容 100uf 2
穩(wěn)壓器 7805 1
Proteus仿真和實物作品的區(qū)別:
1.運行環(huán)境:Proteus仿真是在計算機上運行的,而實物則是在硬件電路板上運行。
2.調(diào)試方式:在Proteus仿真中,可以方便地進行單步調(diào)試和觀察變量值的變化,而在實物中則需要通過調(diào)試器或者串口輸出等方式進行調(diào)試。
電路連接方式:在Proteus仿真中,可以通過軟件設置進行電路連接的修改,而在實物中則需要通過硬件電路板和連接線進行修改。
3.運行速度:Proteus仿真通常比實物運行速度快,因為仿真是基于計算機運行的,而實物則需要考慮電路板上的物理限制和器件的響應時間等因素。
4.功能實現(xiàn):在Proteus仿真中,可以通過軟件設置實現(xiàn)不同的功能,而在實物中則需要根據(jù)電路設計和器件的性能進行實現(xiàn)。
7. 設計資料內(nèi)容清單&&下載鏈接
資料設計資料包括仿真,程序代碼、講解視頻、功能要求、設計報告、軟硬件設計框圖等。
0、常見使用問題及解決方法–必讀!?。?!
1、程序代碼注釋
2、proteus仿真
3、功能要求
4、軟硬件流程圖
5、開題報告
6、設計報告
7、原理圖
8、元器件清單
9、講解視頻
Altium Designer 安裝破解
KEIL+proteus 單片機仿真設計教程
KEIL安裝破解
Proteus元器件查找
Proteus安裝
Proteus簡易使用教程
單片機學習資料
相關數(shù)據(jù)手冊
答辯技巧
設計報告常用描述
鼠標雙擊打開查找嘉盛單片機51 STM32單片機課程畢業(yè)設計.url
資料下載鏈接(可點擊):
https://docs.qq.com/doc/DS3F5dFBuUEJUUU96