包括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远程开锁的单片机源码:
- /*****************************************************************************
- 程序名: 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;
- }
复制代码
请到本帖顶部下载.
|