包括51和調壓電路的PCB,
protues仿真
代碼工程(51單片機)
手機短信界面圖片和演示視頻
全部設計資料下載地址(包含論文 仿真 源碼等):
電話or短信開鎖 仿真 程序 PCB 論文.zip
(15.71 MB, 下載次數: 300)
2017-2-12 23:53 上傳
點擊文件名下載附件
下面是論文的部分內容預覽:
《單片機原理及應用》 課程設計 題目:基于GSM的遠程撥號開鎖 專業 電氣工程及其自動化 班級 13機電實驗班 學號 姓名
1.1 單片機課程設計內容 利用STC89C52單片機和GSM實現遠程開關門鎖的,用戶可在手機上撥號對門鎖進行開關。 1.2 單片機課程設計要求 1.能識別手機號并顯示; 2.能顯示密碼即號碼是否正確; 3.能通過短信通知用戶門鎖是否已打開。 1.3 系統運行流程 程序首先進行串口和LCD初始化,在主程序的開啟GSM模塊,并通過串口發送測試命令測試是否開機以及是否注冊到網絡;GSM模塊正常工作后通過串口發送指令指示模塊顯示來電號碼,單片機中斷程序接收到反饋的數據后對數據進行處理,并調用步進電機程序、短信發送程序、LCD 顯示程序和蜂鳴器程序。 相關程序調用是靠對來電號碼的識別。 第二部分設計方案 2.1 總體設計方案說明 1.程序設計及調試 根據單片機課程設計內容和要求,完成Protues仿真電路的設計和KEIL軟件編寫程序,并運行仿真模擬調試。 2.硬件焊接及調試 根據仿真電路完成電路板的焊接并進行軟、硬件的調試,達到預期目的。 3.后期處理 對設計過程進行總結,完成設計報告。 2.2單片機系統方框圖 第一部分設計任務和要求
2.3 單片機系統流程圖 主程序圖 號碼識別中斷子程序 第三部分主要器件及簡介 1. STC89C52單片機簡介 STC89C52是采用8051核的ISP(In System Programming)在系統可編程芯片,最高工作時鐘頻率為80MHz,片內含8K Bytes的可反復擦寫1000次的Flash只讀程序存儲器,器件兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,具有在系統可編程(ISP)特性,配合PC端的控制程序即可將用戶的程序代碼下載進單片機內部,省去了購買通用編程器,而且速度更快。 2.GSM模塊簡介 SIM900A是一個2頻的GSM/GPRS模塊,工作頻段為EGSM900MHz和DCS1800MHz。該模塊與單片機通過串口進行數據的收發,具有功率密度集中,傳輸距離遠、抗干擾能力強等特點。因為SIM900A模塊進行通信時需要插入SIM卡,方便簡單,而且通過通信基站進行數據的傳輸,安全可靠。 3. 步進電機簡介 步進電機28BYJ48型四相八拍電機,電壓為DC5V—DC12V。當對步進電機施加一系列連續不斷的控制脈沖時,它可以連續不斷地轉動。每一個脈沖信 號對應步進電機的某一相或兩相繞組的通電狀態改變一次,也就對應轉子轉過一定的角度(一個步距角)。當通電狀態的改變完成一個循環時,轉子轉過一個齒距。四相步進電機可以在不同的通電方式下運行,常見的通電方式有單(單相繞組通電)四拍(A-B-C-D-A…),雙(雙相繞組通電)四拍(AB-BC- CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A…)。 4.LCD1602液晶顯示屏簡介 LCD1602可以顯示2行16個字符,有8位數據總線D0—D7,和RS、R/W、EN三個控制端口,工作電壓為5V,并且帶有字符對比度調節和背光。 LCD1602引腳說明如下所示: VDD:電源正極,4.5V—5.5V,通常使用5V電壓; VL:LCD對比度調節端,電壓調節范圍為0—5V。接正極時對比度最弱,接地電源時對比度最高,但對比度過高會產生“鬼影”,因此通常使用一個10K的電位器來調整對比度,或者直接串接一個電阻到地; RS:MCU寫入數據或者指令選擇端。MCU要寫入指令時,使RS為低電平;MCU要寫入數據時,使RS為高電平; R/W:讀寫控制端。R/W為高電平時,讀取數據;R/W為低電平時,寫入數據; EN:LCD模塊使能信號控制端。寫數據時,需要下降沿觸發模塊。 D0—D7:8為數據總線,三態雙向。 A:LED背光正極。需要背光時, A串接一個限流電阻接VDD, K接地。 K:LED背光地端 第四部分系統硬件設計 4.1 最小系統 復位時單片機的初始化操作,只要給RST引腳加上兩個機器周期以上的高電平信號,就可以使單片機復位。本次采用的是12M晶振,按鈕復位電路。 4.2 GSM通信電路 SIM900A芯片采用+5V電壓輸入,SIM900A的POWER接口與P2.7連接,高電平時間持續1s可開啟模塊;通過串口RX、TX與單片機連接進行數據傳輸。 4.3步進電機電路 28BYJ-48步進電機通過ULN2003PAC驅動芯片與單片機相連,采用+5V輸入,IN1-IN4分別與單片機的P1.0-P1.3相連。 4.4 LCD顯示電路 LCD顯示屏的D0到D7與單片機P0口相連,LCD顯示屏EN口與單片機P1.2口相連,RW與P1.1相連RS與P1.0相連。通過滑動變阻器改變LCD顯示屏的顯示對比度。 4.5 蜂鳴器 蜂鳴器采用TMB12A05無源蜂鳴器,通過三極管與單片機P1.5相連。P1.5輸出高電平蜂鳴器不響,輸出低電平蜂鳴器響。 第五部分仿真電路
第六部分課程設計總結 本次單片機課程設計,在老師的指導和同學的幫助下順利完成了。在設計過程中,從仿真電路的設計,源程序的書寫和修改以及實物電路的焊接中都遇到了不少問題,但在我的努力下解決了,并且從中學到了不少知識。我在設計過程中還不斷提出自己的疑點以及新的想法,聯系實際應用,將課本上學習的東西運用到實際中,這些都令我們受益匪淺。 課程設計需要很大的耐心,尤其是遇到困難的時候,這也是對我們的考驗。在設計過程中,我們遇到問題不是感到急躁,而是耐心地尋找解決的辦法,與老師、同學進行交流討論,尋求最佳的解決辦法。 總之,在此次的課程設計中,我們不僅動手、動腦,也學會了不少東西,同時,謝謝對我的設計帶來建議、意見和幫助的老師和同學們!
附錄一實物圖
下面是單片機仿真:
gms遠程開鎖的單片機源碼:
- /*****************************************************************************
- 程序名: GSM接聽電話
- *****************************************************************************/
- #include
- #include "UART.h"
- #include "Delay.h"
- #include "LCD1602.h"
- #include "FMQ.h"
- #include "28BYJ.h"
- #define Yes 1
- #define No 0
- sbit Power_key=P2^7;
- sbit led=P2^ 6;
- /********測試GSM是否啟動**********/
- int test_boot;
- /********測試GSM是否注冊網絡**********/
- int test_net_register;
- /********測試是否有電話打入**********/
- int test_have_call;
- /********GSM串口接收數據緩存**********/
- unsigned char GSM_receive[60];
- /********GSM串口接收計數器**********/
- unsigned char GSMDATA_count;
- /********號碼緩存*******************/
- unsigned char number_get;
- unsigned char door;
- /********短信發送程序********/
- void message()
- {
- Send_String("AT+CMGF=1");//指定信息的輸入輸出格式為文本格式
- Delay_Ms(100);
-
- Send_String("AT+CSMP=17,167,2,25");
- Delay_Ms(100);
-
- Send_String("AT+CSCS=\"UCS2\"");
- Delay_Ms(100);
-
- Send_String("AT+CMGS=\"00310033003200300038003000330038003000300035\"");
- Delay_Ms(100);
-
- Send_String("4E3B94F6007E95E85F004E86007E");
- Delay_Ms(100);
- Send_Char(0x1A);
- Delay_Ms(200);
- }
- void main()
- {
- unsigned char m;
- //初始化狀態
- Power_key=0;
- test_boot=No;
- test_net_register=No;
- test_have_call=No;
- door=No;
- fmq=1;
- P2=0x00;
- number_get=No;
- //GSM啟動
- Power_key=1;
- Delay_Ms(1000);
- Power_key=0;
-
- Uart_Init(); //串口初始化
- LcdInitiate();
- Print_String(line_1,0x00,"calling test--HM");
- //測試是否已經開機
- while(test_boot==No)
- {
- Send_String("AT");
- Delay_Ms(1000);
- }
- //測試是否注冊到網絡
- while(test_net_register==No)
- {
- Send_String("AT+COPS?");
- Delay_Ms(1000);
- }
- //等待電話打入
- Send_String("AT+CLIP=1");
- Delay_Ms(100);
- while(1)
- {
- while(test_have_call==Yes)
- {
- if(number[10]=='5'&&number[9]=='0'&&number[8]=='0'&&number[7]=='8')
- {
- // if(door==No)
- // {
- for(m=0;m<200;m++)
- {
- forward();
-
- }
- Print_String(line_2,0x0B,"open!");
- FMQ_0();
- Delay_Ms(100);
- FMQ_1();
- message();
- // door=Yes;
- // }
- }
- else
- {
- Print_String(line_2,0x0B,"close");
- led=1;
- }
- }
-
- }
-
- }
- /*****************************************************************************
- 串口中斷
- /****************************************************************************/
- void uart(void) interrupt 4
- {
- unsigned char UART_data;
- unsigned char i;
- if(RI)
- {
- UART_data=SBUF;
- if(UART_data=='')
- {
- if(GSM_receive[0]=='O'&&GSM_receive[1]=='K')
- test_boot=Yes;
- else
- test_boot=No;
-
- if(GSM_receive[12]=='C')
- test_net_register=Yes;
- else
- test_net_register=No;
-
- if(GSM_receive[0]=='R'&&GSM_receive[1]=='I'&&GSM_receive[2]=='N'&&GSM_receive[3]=='G')
- {
- test_have_call=Yes;
- }
- else
- {
- test_have_call=No;
- }
-
- if(GSM_receive[0]=='+'&&GSM_receive[1]=='C'&&GSM_receive[2]=='L'&&GSM_receive[3]=='I'&&GSM_receive[4]=='P')
- {
- for(i=0;i<11;i++)
- {
- number[i]=GSM_receive[i+8];
- }
- display_number(line_2,0x00);
-
-
- }
- GSMDATA_count=0;
- }
- else
- {
- GSM_receive[GSMDATA_count]=UART_data;
- GSMDATA_count++;
- }
- }
- RI=0;
- }
復制代碼
請到本帖頂部下載.
|