找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9919|回复: 20
打印 上一主题 下一主题
收起左侧

基于GSM的远程拨号开锁设计 电话or短信都可以 含仿真 源码 论文

  [复制链接]
跳转到指定楼层
楼主


包括51和调压电路的PCB,
protues仿真
代码工程(51单片机)
手机短信界面图片和演示视频
全部设计资料下载地址(包含论文 仿真 源码等):
电话or短信开锁 仿真 程序 PCB 论文.zip (15.71 MB, 下载次数: 298)


下面是论文的部分内容预览:

《单片机原理及应用》

课程设计

题目:基于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远程开锁的单片机源码:
  1. /*****************************************************************************
  2. 程序名:        GSM接听电话                             
  3. *****************************************************************************/

  4. #include
  5. #include "UART.h"
  6. #include "Delay.h"
  7. #include "LCD1602.h"
  8. #include "FMQ.h"
  9. #include "28BYJ.h"
  10. #define Yes                1
  11. #define No                0


  12. sbit Power_key=P2^7;
  13. sbit led=P2^ 6;

  14. /********测试GSM是否启动**********/
  15. int test_boot;
  16. /********测试GSM是否注册网络**********/
  17. int test_net_register;
  18. /********测试是否有电话打入**********/
  19. int test_have_call;
  20. /********GSM串口接收数据缓存**********/
  21. unsigned char GSM_receive[60];
  22. /********GSM串口接收计数器**********/
  23. unsigned char GSMDATA_count;
  24. /********号码缓存*******************/
  25. unsigned char number_get;
  26. unsigned char door;
  27. /********短信发送程序********/

  28. void message()
  29. {
  30.         Send_String("AT+CMGF=1");//指定信息的输入输出格式为文本格式
  31.         Delay_Ms(100);
  32.         
  33.         Send_String("AT+CSMP=17,167,2,25");
  34.         Delay_Ms(100);
  35.         
  36.         Send_String("AT+CSCS=\"UCS2\"");
  37.         Delay_Ms(100);
  38.         
  39.         Send_String("AT+CMGS=\"00310033003200300038003000330038003000300035\"");
  40.         Delay_Ms(100);
  41.         
  42.         Send_String("4E3B94F6007E95E85F004E86007E");
  43.         Delay_Ms(100);
  44.         Send_Char(0x1A);
  45.         Delay_Ms(200);
  46. }

  47. void main()
  48. {
  49.         unsigned char m;
  50.         //初始化状态
  51.         Power_key=0;
  52.         test_boot=No;
  53.         test_net_register=No;
  54.         test_have_call=No;
  55.         door=No;
  56.         fmq=1;
  57.         P2=0x00;
  58.         number_get=No;
  59.         //GSM启动
  60.         Power_key=1;
  61.         Delay_Ms(1000);
  62.         Power_key=0;
  63.         
  64.         Uart_Init();                                //串口初始化
  65.         LcdInitiate();
  66.         Print_String(line_1,0x00,"calling test--HM");
  67.                 //测试是否已经开机
  68.                 while(test_boot==No)
  69.                 {
  70.                         Send_String("AT");
  71.                         Delay_Ms(1000);
  72.                 }
  73.                 //测试是否注册到网络
  74.                 while(test_net_register==No)
  75.                 {
  76.                         Send_String("AT+COPS?");
  77.                         Delay_Ms(1000);        
  78.                 }
  79.                 //等待电话打入
  80.                 Send_String("AT+CLIP=1");
  81.                 Delay_Ms(100);
  82.                 while(1)
  83.                 {
  84.                         while(test_have_call==Yes)
  85.                         {
  86.                                 if(number[10]=='5'&&number[9]=='0'&&number[8]=='0'&&number[7]=='8')
  87.                                 {
  88. //                                        if(door==No)
  89. //                                        {
  90.                                                 for(m=0;m<200;m++)
  91.                                                 {
  92.                                                         forward();
  93.                                                         
  94.                                                 }
  95.                                                 Print_String(line_2,0x0B,"open!");
  96.                                                 FMQ_0();
  97.                                                 Delay_Ms(100);
  98.                                                 FMQ_1();
  99.                                                 message();                                       

  100.                                                 //                                                door=Yes;
  101. //                                        }        
  102.                                 }
  103.                                 else
  104.                                 {
  105.                                         Print_String(line_2,0x0B,"close");        
  106.                                         led=1;
  107.                                 }                                
  108.                         }
  109.                         
  110.                 }        
  111.                
  112. }

  113. /*****************************************************************************
  114. 串口中断
  115. /****************************************************************************/
  116. void uart(void) interrupt 4
  117. {
  118.         unsigned char UART_data;
  119.         unsigned char i;

  120.         if(RI)
  121.         {
  122.                 UART_data=SBUF;
  123.                 if(UART_data=='')
  124.                 {
  125.                         if(GSM_receive[0]=='O'&&GSM_receive[1]=='K')
  126.                                 test_boot=Yes;
  127.                         else
  128.                                 test_boot=No;
  129.                         
  130.                         if(GSM_receive[12]=='C')
  131.                                 test_net_register=Yes;
  132.                         else
  133.                                 test_net_register=No;
  134.                         
  135.                         if(GSM_receive[0]=='R'&&GSM_receive[1]=='I'&&GSM_receive[2]=='N'&&GSM_receive[3]=='G')
  136.                         {
  137.                                 test_have_call=Yes;                                
  138.                         }
  139.                         else
  140.                         {
  141.                                 test_have_call=No;
  142.                         }
  143.                         
  144.                         if(GSM_receive[0]=='+'&&GSM_receive[1]=='C'&&GSM_receive[2]=='L'&&GSM_receive[3]=='I'&&GSM_receive[4]=='P')
  145.                         {
  146.                                 for(i=0;i<11;i++)
  147.                                 {
  148.                                         number[i]=GSM_receive[i+8];
  149.                                 }
  150.                                 display_number(line_2,0x00);        
  151.                                 
  152.                                 
  153.                         }
  154.                         GSMDATA_count=0;
  155.                 }
  156.                 else
  157.                 {
  158.                         GSM_receive[GSMDATA_count]=UART_data;
  159.                         GSMDATA_count++;
  160.                 }
  161.         }
  162.         RI=0;
  163. }
复制代码



请到本帖顶部下载.



评分

参与人数 2黑币 +10 收起 理由
tjjjy86 + 5 赞一个!
zhaok2013 + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏14 分享淘帖 顶 踩1
回复

使用道具 举报

沙发
ID:166174 发表于 2017-2-23 14:33 | 只看该作者
好厉害,写的很好很棒
回复

使用道具 举报

板凳
ID:165046 发表于 2017-2-24 09:52 | 只看该作者
好棒,挺喜欢这类小制作!
回复

使用道具 举报

地板
ID:186018 发表于 2017-4-16 22:42 来自手机 | 只看该作者
请问大神,你这个是不是没有头文件
回复

使用道具 举报

5#
ID:182806 发表于 2017-4-22 19:44 | 只看该作者
这个地方很疑惑,到底接的是1.5还是2.7?因为程序里你分别将其设置了一次高电平和一次低电平。这样总感觉有点问题。而且1.5端口是专门写了一个头文件来调用的。

捕获.JPG (50.28 KB, 下载次数: 85)

捕获.JPG
回复

使用道具 举报

6#
ID:182806 发表于 2017-4-23 10:33 | 只看该作者
明白了,1.5接的蜂鸣器。
回复

使用道具 举报

7#
ID:130231 发表于 2017-4-23 12:31 | 只看该作者
很给力
回复

使用道具 举报

8#
ID:185661 发表于 2017-4-28 10:57 | 只看该作者
好强,值得一学
回复

使用道具 举报

9#
ID:248551 发表于 2017-11-13 23:37 来自手机 | 只看该作者
楼主你好,你的步进电机电路图和SIM900A的资料能分享一下吗?
回复

使用道具 举报

10#
ID:147616 发表于 2017-11-26 16:59 | 只看该作者
好贴  学习一下
回复

使用道具 举报

11#
ID:257716 发表于 2017-12-5 15:14 | 只看该作者
这是我大二的时候做的课程设计,不知道是谁把我的东西贴到这个论坛了!!!!!
回复

使用道具 举报

12#
ID:257716 发表于 2017-12-5 15:16 | 只看该作者
很生气!!!,我的课程设计作品!!
回复

使用道具 举报

13#
ID:257716 发表于 2017-12-5 15:17 | 只看该作者
还删我贴妈卖批
回复

使用道具 举报

14#
ID:257716 发表于 2017-12-5 15:17 | 只看该作者

这是我的课程设计作品,被别人放到网上了
回复

使用道具 举报

15#
ID:96011 发表于 2018-4-22 16:06 | 只看该作者
谢谢分享!!!感激!!!
回复

使用道具 举报

16#
ID:79874 发表于 2018-6-30 09:24 | 只看该作者
下载不了希望能下载
回复

使用道具 举报

17#
ID:380389 发表于 2018-7-29 10:19 来自手机 | 只看该作者
很强,楼主很厉害
回复

使用道具 举报

18#
ID:390236 发表于 2018-8-28 13:08 | 只看该作者
下载不了希望能下载
我要继续学习
回复

使用道具 举报

19#
ID:372961 发表于 2018-9-18 13:38 | 只看该作者
joeq168 发表于 2017-4-22 19:44
**** 作者被禁止或删除 内容自动屏蔽 ****

SIM900A的开机启动需要Power口高电平和低电平之间存在大于800ms的延迟,所以你可以看见一个高电平和一个低电平,中间还有一个延迟,作用就是开启Sim900模块。还有P1^5接的是蜂鸣器。
回复

使用道具 举报

20#
ID:370943 发表于 2018-9-18 14:35 | 只看该作者
前来学习,大神
回复

使用道具 举报

21#
ID:727538 发表于 2020-5-30 10:36 | 只看该作者
需要号码位数验证吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表