成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于GSM遠程短信防盜報警系統(tǒng)

AlphaWallet / 2381人閱讀

摘要:本次設計制作的短信防盜報警系統(tǒng),具有紅外報警功能,就是通過熱釋傳感器檢測是否有人進入并將報警信息通過模塊發(fā)短信到指定手機報警。但在程序計數器的值超過對為時,將自動轉向執(zhí)行片外存儲器的程序。主程序設計主程序是對整個系統(tǒng)框架的描述。

? ? ? ?暑假終究還是結束了,但是既然開學了那么期末還會遠嗎?然而每當期末總會遇到一些課程設計,我每次總是想要大展拳腳一下,但是面對期末復習,最后更多的是通過為主。所以我整理了一些項目希望可以幫到大家。在文章最后更是附上原理圖以及程序以備不時之需。

? ? ? ?本次設計制作的GSM短信防盜報警系統(tǒng),具有紅外報警功能,就是通過熱釋傳感器檢測是否有人進入并將報警信息通過GSM模塊發(fā)短信到指定手機報警。

? ? ? ?按照系統(tǒng)設計功能的要求,確定系統(tǒng)以單片機控制電路為核心由時鐘電路、復位電路、電源電路、按鍵電路、1602顯示電路、GSM模塊電路和傳感器電路共同組成。系統(tǒng)結構框圖如下所示:

?經過反復論證(實際上就是便宜簡單)最終確定如下方案:

1.STC89C52單片機作為主控制器。

2.采用熱釋電紅外線傳感器采集信息。

3.通過1602液晶顯示。

4.矩陣式薄膜按鍵

5.9V電源供電

6.SIM800L GSM模塊報警

一、硬件電路系統(tǒng)設計

1.單片機最小系統(tǒng)設計

?注意:由于單片機P0口內部不含上拉電阻,為高阻態(tài),不能正常的輸出高/低電平,因而該組端口在使用時必須外接上拉電阻。

下面對STC89C52各引腳的功能進行的介紹:

1)電源引腳Vcc和Vss

????Vcc(40腳):電源端為+5V ?????Vss(20腳):接地端。 ??????????????????????

2)時鐘電路引腳XTAL1和XTAL2

????XTAL2(18腳):接外部晶體和電容的一端。在單片機內部它是振蕩電路反向放大器的輸出端,振蕩電路的頻率就是晶體固有頻率。若需采用外部時針電路時,該引腳輸入外時鐘脈沖。要檢查89C52的振蕩電路是否正常工作,可用示波器查看XTAL2端是否有脈沖信號輸出。

????XTAL1(19腳):接外部晶體和微調電容的另一端。在片內,它是振蕩電路反向放大器的輸入端。在采用外部時鐘時,該引腳必須接地。

3)控制信號腳 RST ?ALE ?PSEN 和EA。

????RST(9腳):RST是復位信號輸入端,高電平有效。在此輸入端保持兩個機器周期(24個時鐘振蕩周期)的高電平時,就可以完成復位操作。

????ALE/PROG(30引腳):地址鎖存允許信號端。當STC89C52上電正常工作后,ALE引腳不斷向外輸出正脈沖信號。此頻率為振蕩器頻率fosc的1/6,當CPU訪問片外存儲器時,ALE輸出信號作為鎖存低8位地址的控制信號。在CPU訪問片外數據存儲時,每取值一次(一個機器周期)會丟失一個脈沖。平時不訪問片外存儲時,ALE端也以1/6的振蕩頻率固定輸出正脈沖,因而ALE信號可以用作對外輸出時鐘或定時信號。如果你想看一下STC89C52芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出,如有脈沖信號輸出,則STC89C52基本上是好的。ALE的負載驅動能力為8個LS型TTL(低功耗高速TTL)。

????PSEN(29腳);程序存儲允許輸出信號引腳,在訪問片外程序存儲器時,此端定時輸出負脈沖作為讀片外存儲器的選通信號。此引腳接ERROM的OE端。PSEN端有效,即允許讀出ERROM/ROM中的指令碼。CPU在從外部ERROM/ROM取指令期間,每個周期PSEN兩次有效。不過,在訪問片外RAM時,要少產生兩次PSEN負脈沖信號。要檢查一個STC89C52小系統(tǒng)上電后CPU能否正常到ERROM/ROM中讀取指令碼,也可用于示波器看PSEN端有無脈沖輸出。如有,說明基本上工作正常。

????EA/VPP(31腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。當EA引腳接高電平時,CPU只訪問片內ERROM/ROM并執(zhí)行內部程序存儲器中的指令。但在PC(程序計數器)的值超過OFFFH(對8751/8051為4k)時,將自動轉向執(zhí)行片外存儲器的程序。當出入信號EA引腳接低電平(接地)時,CPU只訪問外部ERROM/ROM并執(zhí)行外部程序存儲器中的指令,而不管是否有片內程序存儲器。對于無芯片內的ROM的8031或8032,須外擴ERROM,此時必須將EA引腳接地。如果使用有片內ROM的AT89C52,外擴ERROM也是可以的,但也要使EA接地。

2.顯示模塊

1602LCD采用標準的14引腳(無背光)或16引腳(帶背光)接口,各引腳接口說明如下表所示:

?

?注意:

第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。

第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。

第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。

第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。

電路如下所示:

?3.鍵盤模塊

系統(tǒng)通過薄膜矩陣鍵盤設置,電路圖如圖所示:

?4.防盜報警電路

下圖為熱釋防盜報警電路,D3、D4為布防指示燈和傳感器信號指示燈

?二、系統(tǒng)軟件設計

單片機系統(tǒng)除了必要的硬件支持外,還需要進行軟件設計。主要由主程序、數據查詢程序、按鍵處理程序等組成。

1.主程序設計

主程序是對整個系統(tǒng)框架的描述。此系統(tǒng)的主程序的功能是在上電后,完成系統(tǒng)的初始化,等待控制端信息命令的到達,并根據信息內容完成響應的動作,流程圖如下所示:

2.顯示程序設計:

如圖為LCD1602顯示流程圖?

三:原理圖

?

四:程序

#include #include "lcd1602.h"#define uchar unsigned char #define uint  unsigned int#include "eepom52.h"uchar i;sbit red   = P2^0;	   //紅色發(fā)光二極管定義sbit green = P2^1;	   //綠色發(fā)光二極管定義sbit yellow = P2^2;	   //黃色發(fā)光二極管定義sbit beep  = P2^3;	   //蜂鳴器定義sbit hw    = P2^4;	   //紅外熱釋傳感器定義bit flag_500ms = 0;uchar flag_alarm ;     //報警標志位uchar flag_bufang ;    //布防標志位uchar flag_bufang_en ; //布防標志位使能uint  flag_value;      //用做定時器的變量bit flag_alarm_en;#define key_io P0uchar key_can;uchar a_a;uchar smg_i;uchar dis_smg[11];uchar phone_i;	   //電話號碼是多少位uchar phone_call[11]={"           "};uchar flag_send_en;uint temperature ;  //bit flag_500ms ;uchar key_can;		 //按鍵值的變量uchar menu_1;        //菜單設計的變量bit flag_lj_en;		 //按鍵連加使能bit flag_lj_3_en;	 //按鍵連3次連加后使能 加的數就越大了 uchar key_time;      //用做連加的中間變量bit key_500ms  ;uchar flag_clock;				//溫度報警變量uchar menu_shudu = 20;  //用來控制連加的速度/***********************1ms延時函數*****************************/void delay_1ms(uint q){	uint i,j;	for(i=0;i= 5)	 //按鍵松開松手檢測		{			key_value = 0;			key_new = 1;	//按鍵松開后進入等待按鍵狀態(tài)			flag_lj_en = 0;		//關閉連加使能			flag_lj_3_en = 0;	//關閉3秒后使能			flag_value = 0;		//清零			write_eepom();		}	}	else 	{		if(key_io != 0x0f)	 //按鍵按下			key_value ++;		else 			key_value =0;		if(key_value >= 5)	 //按鍵按下消抖		{			key_value = 0;			key_new = 0;	 //按鍵松開后進入等待松開按鍵狀態(tài)				key_time = 0;		}	}		key_can = 20;	if((key_new == 0) && (key_old == 1))	{		key_l = (key_io | 0xf0);   //矩陣鍵盤掃描		key_io = key_l;		switch(key_io)		{			case 0xee:  key_can = 1;  break;  //得到按鍵值 			case 0xde:  key_can = 2;  break;   //得到按鍵值 			case 0xbe:  key_can = 3;  break;   //得到按鍵值 			case 0x7e:  key_can = 15;  break;   //得到按鍵值 			case 0xed:  key_can = 4;  break;  //得到按鍵值 			case 0xdd:  key_can = 5;  break;   //得到按鍵值 			case 0xbd:  key_can = 6;  break;   //得到按鍵值 			case 0x7d:  key_can = 14;  break;   //得到按鍵值 			case 0xeb:  key_can = 7;  break;  //得到按鍵值 			case 0xdb:  key_can = 8;  break;   //得到按鍵值 			case 0xbb:  key_can = 9;  break;   //得到按鍵值 			case 0x7b:  key_can = 13;  break;   //得到按鍵值 			case 0xe7:  key_can = 10;  break;  //得到按鍵值 			case 0xd7:  key_can = 0;  break;  //得到按鍵值 			case 0xb7:  key_can = 11;  break;   //得到按鍵值 			case 0x77:  key_can = 12;  break;  //得到按鍵值 		}	}			 	key_old = key_new;	 }/****************按鍵處理數碼管顯示函數***************/void key_with(){								  	if(key_can == 12)	  //退出鍵	{		menu_1 = 0;		init_1602_dis_csf();		write_com(0x0c);              //關閉光標	}	if(key_can == 15)	  //設置鍵	{		menu_1 ++;		if(menu_1 >= 2)		{			menu_1 = 0;		}		if(menu_1 == 0)		{			init_1602_dis_csf();			write_com(0x0c);              //關閉光標		}		if(menu_1 == 1)		{			write_string(1,0," Input Phone    ");				write_string(2,0,"                ");			clear_shuzu(dis_smg,11); 			for(i=0;i 11)					phone_i = 11;				smg_i = phone_i;				write_string_num(2,0,dis_smg,phone_i);	 //顯示號碼				lcd1602_guanbiao(1,0 + phone_i + 0x40);  //開光標				}			}		if(key_can == 10)	//刪除鍵		{			if(phone_i != 0)			{				phone_i --;				phone_call[phone_i] = " ";					dis_smg[phone_i] = " ";				write_string(2,0,"                ");				write_string_num(2,0,dis_smg,phone_i);	 //顯示號碼					lcd1602_guanbiao(1,0 + phone_i + 0x40);  //開光標				} 			}	}	} /******************對應不同按鍵處理**********************/	   void menu_kongwai_dis(){	if(menu_1 == 0)	{		if(key_can == 1)	 //按鍵緊急報警		{			flag_alarm = 1;  //報警標志位 ; 		}		if(key_can == 2)     //布防按鍵		{			flag_bufang_en = 1;				}			if(key_can == 3)	 //取消報警  把變量清零		{			flag_alarm = 0;   			flag_bufang = 0; 			flag_bufang_en = 0;				flag_value = 0;				flag_send_en = 0;			beep = 1;			red = 1;  //關閉紅燈			green = 1; //關閉綠燈			yellow = 1; //關閉黃燈    			write_string(1,0,"   fd system    ");	  			write_string(2,0,"   wei bufang   ");		}	}			}/******************紅外報警處理**********************/	   void hongwai_dis()	// 紅外報警處理{	if((flag_alarm == 1))	   //報警	{		red = ~red;		   //紅燈報警		beep = ~beep;	   //蜂鳴器報警	}	if(menu_1 == 0)	{		if(flag_alarm == 1)		{			if(flag_send_en == 0)			{				flag_send_en = 1;					write_string(1,0," fang dao alarm   ");					send_PUD_fangdao();   //發(fā)送報警信息	請注意!溫度報警。							}		}	}	yellow = ~hw;	 //紅外熱釋電指示燈 有輸出就亮黃燈	if(flag_bufang_en == 1) //準備開始布防	{		green = ~green;	   //綠燈閃				}  	if(flag_bufang == 1)   //確認布防	{		green = 0;         //如果延時布防成功 綠燈長亮		if(hw == 1)	       //紅外有輸出		{			flag_alarm = 1;			}	}	if(flag_bufang_en == 1)	{		flag_value ++;		if(flag_value >= 30)  //15秒		{			flag_bufang = 1;			flag_bufang_en = 0;		 			flag_value = 0;				write_string(2,0,"   yi bufang   ");		}	}}void main(){		time_init();                    //初始化定時器 	init_1602();	init_1602_dis_csf();	init_uart();	init_eeprom();	 //初始化eeprom	init_gsm();	while(1)	{					if(flag_500ms == 1)	        //500ms 處理一次溫度程序		{				flag_500ms = 0;				hongwai_dis();	// 紅外報警處理		}		key();					//按鍵程序		if(key_can < 20)		{			key_with();			    //設置報警溫度				menu_kongwai_dis();		}	}}/*************定時器0中斷服務程序***************/void time0_int() interrupt 1{		static uchar value;	TH0 = 0x3c;	TL0 = 0xb0;     // 50ms	value ++;	 	if(value % 10 == 0)	{		flag_500ms = 1;	   //500ms		value = 0;	}}void uatr0() interrupt 4{	if(RI == 1)	{		RI = 0;	}	}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/119231.html

相關文章

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<