基于51单片机的无线通信

合集下载

基于 51 单片机的无线数据收发系统设计

基于 51 单片机的无线数据收发系统设计

基于 51 单片机的无线数据收发系统设计摘要:系统使用 51 单片机通过NRF24L01 模块远程传输数据,接收端通过NRF24L01 模块接收无线数据。

处理后由液晶进行数据显示,可根据需要设置声音提示。

系统接收与发送端模块均单片机、无线发送模块/ 接收、显示、声音提示模块。

关键词:51 单片机;NRF24L01;液晶显示;无线通讯1硬件设计1.1系统组成该系统将数据经过控制器由无线发送模块进行远距离发送,再通过接收端进行无线数据接收。

接收的数据经控制器处理后由液晶显示器显示,并根据需要可以实现一定的声音提示。

1.2无线收发模块本设计使用无线通讯技术实现数据的传送,能够实现此功能的硬件电路模块总类较多。

为符合设计需求,采用以NRF24L01 为核心的无线通讯模块。

该方案可以使系统具有低成本,低功耗,体积小等特点。

NRF24L01 无线模块出至 NORDIC 公司。

其工作频段在 2.4G— 5GHz,该模块正常工作电压为 1.9V—3.6V,内部具有 FSK 调制功能,集成了 NORDIC 公司自创的增强短脉冲协议。

该模块最多可实现 1 对 6 的数据发送与接收。

其每秒最高可传输两兆比特,能够实现地址检验及循环冗余检验。

若使用 SPI 接口,其每秒最高可传输八兆比特,多达 128 个可选工作频道,将该芯片的最小系统集成后,构成NRF24L01 无线通信模块。

1、引脚功能此模块有 6 个数据传输和控制引脚,采用 SPI 传输方式,实现全双工串口通讯,其中 CE脚为芯片模式控制线,工作情况下,CE 端协配合寄存器来决定模块的工作状态。

当4 脚电平为低时,模块开始工作。

数据写入的控制时钟由第 5 脚输入,数据写入与输出分别为 6、7 脚,中断信号放在了第 8 脚。

2、电器特性NRF24L01 采用全球广泛使用的 2.4Ghz 频率,传输速率可达 2Mbps,一次数据传输宽度可达 32 字节,其传输距离空旷地带可达2000M 此模块增强版空旷地带传输距离可达 5000M—6000M, 因内部具有 6 个数据通道,可实现 1 对 6 数据发送,还可实现 6 对 1 数据接收,其工作电压为 1.9V-3.6V,当没有数据传输时可进入低功耗模式运行,微控制器对其控制时可对数据控制引脚输入 5V 电平信号,可实现 GFSK 调制。

基于51单片机的毕业设计

基于51单片机的毕业设计

基于51单片机的毕业设计一、选题背景二、设计目标三、硬件设计1.系统框图设计2.电路原理图设计3.电路元器件选择与参数计算四、软件设计1.程序流程设计2.程序模块设计与编写五、测试与调试六、总结与展望一、选题背景毕业设计是大学生在校期间的一项重要任务,是对所学知识的综合运用和实践能力的考验。

本文将以基于51单片机的毕业设计为例,介绍其选题背景、设计目标、硬件设计、软件设计及测试与调试等方面。

51单片机是一种广泛应用于嵌入式系统中的微控制器,其具有性价比高、易于编程等特点,因此被广泛应用于各种嵌入式系统中。

在毕业设计中使用51单片机进行开发,既可以锻炼学生的嵌入式系统开发能力,又可以提高学生对单片机原理和应用的理解。

二、设计目标本次毕业设计旨在开发一款基于51单片机的智能家居控制系统。

该系统能够通过手机APP或者语音识别等方式控制家居设备的开关,实现智能化控制。

具体的设计目标如下:1.设计一款基于51单片机的硬件系统,包括电路原理图、电路元器件选择与参数计算等。

2.设计一款基于51单片机的软件系统,包括程序流程设计、程序模块设计与编写等。

3.实现手机APP或者语音识别等方式控制家居设备的开关。

4.保证系统的可靠性和稳定性,确保系统能够长时间稳定运行。

三、硬件设计1.系统框图设计本次毕业设计中,我们需要开发一款智能家居控制系统。

该系统主要由以下几个部分组成:51单片机、无线通信模块、继电器模块、传感器模块以及电源模块。

其中,51单片机作为整个系统的核心控制器,负责接收外部信号并进行处理;无线通信模块用于实现与手机APP或者语音识别设备之间的通信;继电器模块用于控制家居设备的开关;传感器模块用于采集环境数据,并将数据传输给51单片机;电源模块则提供稳定可靠的供电支持。

2.电路原理图设计根据上述系统框图,我们可以设计出相应的电路原理图。

具体而言,我们需要设计51单片机的电路、无线通信模块的电路、继电器模块的电路、传感器模块的电路以及电源模块的电路。

《单片机应用设计-基于单片机的433M无线通信系统》廖永斌

《单片机应用设计-基于单片机的433M无线通信系统》廖永斌

学号:课程设计题目基于单片机的433M无线通信系统学院专业班级姓名指导教师2018年 1月 13日《单片机应用设计》任务书学生姓名:专业班级:指导教师:工作单位:题目: 基于单片机的433M无线通信系统课程设计目的:1、熟悉单片机应用系统的硬件设计及软件设计的基本方法;2、将《单片机原理与应用》理论课的理论知识应用于实际的应用系统中;3、训练单片机应用技术,锻炼实际动手能力4、提高正确地撰写论文的基本能力。

课程设计内容和要求1、完成硬件电路的设计,其中包括单片机和CC1101模块的设计;2、完成无线通信模块的程序设计与实现,上机运行调试程序,记录实验结果(如图表等),并对实验结果进行分析和总结;3、课程设计报告书按学校统一规范来撰写,报告主要包括以下内容:目录、摘要、关键词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论献等;4、查阅不少于6篇参考文献。

初始条件:1、STC89C52和CC1100H模块;2、先修课程:单片机原理与应用。

时间安排:第19周,安排设计任务,完成硬件设计;第20周,完成软件设计、撰写报告,答辩。

指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (Ⅰ)Abstract (Ⅱ)1基本原理 (1)1.1无线通信系统 (1)1.2芯片简介 (1)1.2.1单片机STC89C52 (1)1.2.2 无线通信CC1101芯片 (3)2方案论证与设计 (5)2.1无线通信模块选择 (5)2.2 单片机最小系统选择 (5)2.3整体方案设计 (6)3 硬件电路设计 (6)4软件程序设计 (8)4.1发送端编程 (8)4.2接收端编程 (9)4.3程序调试与下载 (10)5硬件仿真 (12)6实物制作与调试 (12)6.1 STC89C52单片机最小系统 (12)6.2无线通信模块CC1101 (13)6.3稳压电路模块 (13)7心得体会 (15)8参考文献 (16)附录 (17)摘要随着通信系统信息容量的不断提高,射频技术在无线通信中占据着举足轻重的位置。

基于51单片机315MHz无线收发模块调试程序

基于51单片机315MHz无线收发模块调试程序

315Mhz 无线通信程序原理:第一块单片机p1.0 口输出脉冲方波提供给无线发射模块,无线发射模块将信号以电磁波的形式传到无线接收模块。

无线接收模块会根据这个电磁波还原出脉冲方波提供给第二块单片机,第二块单片机进行进一步的解算处理。

通信协议:根据这个原理和315模块的特性。

我决定以900us 高电平和2000us 底电平表示1;450us 高电平和2000us 低电平表示0。

而8个1或0组成一个字节。

为了防止误码,所以在每个字节的前面加一个2ms 高电平和2ms 低电平的起始码。

每个5S 发送一个字符,一个字符发送20 遍*******************************//****************************315Mhz 无线通信程序发送程序11.0592M 晶振 1 机器周期=1.0851us定时器产生2MS 定时TH0=0XF8;TL0=0XCD;900us 定时TH0=0XFC;TL0=0XC3;450us 定时TH0=0XFE;TL0=0X61;*******************************/#include<reg52.h>#include "intrins.h"#define uint unsigned int#define uchar unsigned charsbit WXSEND=P1^0;uchar timedata[8]={0xfe,0x61,0xfc,0xc3,0xf8,0xcd,0xea,0x66};// 450us, 900us,2MS,6ms/*************************************11.0592MHZ 下500 毫秒延时,还准***************************************/void delay500ms(uint i)uint j;uchar k;while(i--){for(j=0;j<750;j++)for(k=0;k<200;k++);}}void time0init(){TMOD=0x01;//}void sendset(uchar senddata);// 发送数据程序void sendstartbit();// 数据发送起始信号2ms 高电平和2ms 低电平的起始码void sendlowbit();// 发送低电平void sendhighbit();// 发送高电平void main(){uchar senddata,i;time0init();// 定时器初始化senddata=0x55;while(1) {for(i=0;i<20;i++){sendset(senddata);// 发送数据程序}delay500ms(10);senddata++;}}// 发送数据程序void sendset(uchar senddata){uchar i,sendbit;sendstartbit();// 发送开始信号for(i=0;i<8;i++){sendbit=senddata&0x80;if(sendbit==0)sendlowbit(); // 发送低电平else sendhighbit();// 发送高电平senddata=senddata<<1;}// 数据发送起始信号6ms 高电平和2ms 低电平的起始码void sendstartbit(){WXSEND=1;TH0=timedata[4];TL0=timedata[5];TR0=1;while(TF0==0);TR0=0;TF0=0;TH0=timedata[4];TL0=timedata[5];WXSEND=0;TR0=1;while(TF0==0);TR0=0;TF0=0;}void sendlowbit() // 发送低电平{WXSEND=1;TH0=timedata[0];TL0=timedata[1];TR0=1;while(TF0==0);TR0=0;TF0=0;TH0=timedata[4];TL0=timedata[5];WXSEND=0;TR0=1;while(TF0==0);TR0=0;TF0=0;}void发送高电平sendhighbit()//{WXSEND=1;TH0=timedata[2];TL0=timedata[3];TR0=1;while(TF0==0);TR0=0;TF0=0;TH0=timedata[4];TL0=timedata[5];WXSEND=0;TR0=1;while(TF0==0);TR0=0;TF0=0;}/****************************315Mhz 无线通信程序接收程序11.0592M 晶振 1 机器周期=1.0851us用中断0 边沿触发中断,开启接收程序由于接收模块平时大部分时间是低电平,有信号时是高电平,而中断以,0 是负边沿触发,所硬件电路中接收模块的信号输出端经过非门后接到单片机P3.2接收到数据,用串口传到上位机的串口调试软件显示*******************************/#include<reg52.h>#include "intrins.h" #define uint unsigned int#define uchar unsigned char sbit WXrecep=P3^2;//uchar code timedata[6]={0xfe,0x61,0xfc,0xc3,0xf8,0xcd};// 450us,900us,2MS uchar wxrecepda;void time0init(){TMOD=0x21;// 定时器0TH0=0;TL0=0;//TMOD=0x20;/*TMOD:timer1,mode2,8-bitreload*/TH1=0xFD;/*TH1 11.0592MHz*/TL1=0XFD;EA=1;EX0=1;ET0=1;IE0=0;}void uartinit(){SCON=0x50;/*SCON: 模式1,8-bitUART, 使能接收*/ TR1=1;/*TR1:timer1run*/void receivewx();// 接收子程序void main(){time0init();// 定时器初始化uartinit();while(1) ;}void receivewx()// 接收子程序{uint i;uchar j,recedata;while(WXrecep==0);TR0=0;i=TH0*256+TL0;TH0=0;TL0=0;if((i>=1800)&&(i<=1890)){ recedata=0;for(j=0;j<8;j++){while(WXrecep==1);TR0=1;while(WXrecep==0);TR0=0;i=TH0*256+TL0;if((i>=390)&&(i<=450)) recedata=recedata&0xfe;else if((i>=800)&&(i<=860)) recedata=recedata|0x01;recedata=recedata<<1;TH0=0;TL0=0;}wxrecepda=recedata>>1 ;SBUF=wxrecepda;while(TI==0);TI=0;}}void wxrecint() interrupt 0{TH0=0;TL0=0;TR0=1;EX0=0;receivewx();EX0=1;}。

基于单片机无线通信网络的实现毕业论文

基于单片机无线通信网络的实现毕业论文
(6) 内置2.4GHz 天线,体积小巧15mm X29mm。
(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便。
(8) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很好的通信效果。
(9)与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要上拉电阻。
关于nRF2401的内部模块结构图参照下图2-1:
图2-1 nRF2401的内部模块结构图
2.1.3 单片机与无线模块的接口—SPI总线
SPI就是串行外围设备接口,是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB 的布局上节省空间,提供方便。该接口一般使用4 条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI 接口芯片带有中断信号线INT 或INT、有的SPI 接口芯片没有主机输出/从机输入数据线MOSI)。SPI 的工作模式有两种:主模式和从模式,无论那种模式,都支持3Mbit/s的速率,并且还具有传输完成标志和写冲突保护标志。
尽量节能;低的系统费用(低速微处理器也能进行高速射频发射);数据在空中停留时间短,抗干扰性高。Enhanced ShockBurstTM技术同时也减小了整个系统的平均工作电流。
Enhanced ShockBurstTM发射流程:
(1).把接收机的地址和要发送的数据按时序送入nRF24L01。
(2).配置CONFIG寄存器,使之进入发送模式。
Enhanced ShockBurstTM接收流程:
(1).配置本机地址和要接收的数据包大小;

51单片机无线课程设计

51单片机无线课程设计

51单片机无线课程设计一、课程目标知识目标:1. 学生能够理解51单片机的基本原理,掌握无线通信技术的基本概念;2. 学生能够掌握51单片机编程的基础知识,包括指令系统、寄存器配置等;3. 学生能够了解无线模块的工作原理,并掌握相关调试方法;4. 学生能够运用51单片机及无线模块实现简单的数据传输和控制功能。

技能目标:1. 学生能够独立完成51单片机的编程与调试;2. 学生能够独立搭建无线通信系统,实现数据收发;3. 学生能够运用所学的知识解决实际问题,具备一定的课程设计能力;4. 学生能够通过课程实践,提升动手能力、团队协作能力和创新能力。

情感态度价值观目标:1. 学生能够认识到单片机及无线通信技术在日常生活中的应用,激发学习兴趣;2. 学生能够通过课程学习,培养严谨的科学态度和良好的学习习惯;3. 学生能够树立团队协作意识,学会与他人分享成果,培养合作精神;4. 学生能够关注单片机及无线通信领域的发展动态,培养持续学习的意识。

课程性质:本课程为实践性较强的课程设计,旨在让学生在掌握51单片机及无线通信技术基础知识的基础上,通过实际操作,提高解决实际问题的能力。

学生特点:学生具备一定的单片机基础和编程能力,对无线通信技术有一定了解,但实践能力有待提高。

教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,培养学生独立思考和解决问题的能力。

将课程目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容1. 51单片机原理及编程基础:- 单片机结构及工作原理- 51单片机指令系统与寄存器- C语言编程基础与Keil开发环境使用2. 无线通信技术原理与模块:- 无线通信基本原理- 常用无线模块介绍(如NRF24L01)- 无线模块的配置与调试方法3. 51单片机与无线模块的接口技术:- 单片机与无线模块的硬件连接- 单片机与无线模块的软件编程- 数据发送与接收处理4. 课程设计实践:- 简单无线数据传输系统设计- 实现无线控制功能(如远程开关、温度监测等)- 课程设计报告撰写与展示教学内容安排与进度:第一周:51单片机原理及编程基础第二周:无线通信技术原理与模块第三周:51单片机与无线模块的接口技术第四周:课程设计实践与成果展示教材章节:《单片机原理与应用》第三章:51单片机结构与工作原理;第四章:51单片机指令系统与编程;第七章:无线通信技术及其应用。

单片机和单片机通信

单片机和单片机通信

单片机和单片机之间的通信主要有以下几种方式:
1. 采用硬件UART进行异步串行通信。

这是一种占用口线少,有效、可靠的通信方式。

但遗憾的是许多小型单片机没有硬件UART,有些也只有1个UART,如果系统还要与上位机通信的话,硬件资源可能是不够的。

这种方法一般用于单片机有硬件UART且不需与外界进行串行通信或采用双UART单片机的场合。

2. 采用片内SPI接口或I2C总线模块串行通信形式。

SPI/I2C接口具有硬件简单、软件编程容易等特点,但目前大多数单片机不具备硬件SPI/I2C模块。

3. 利用软件模拟SPI/I2C模式通信,这种方式很难模拟从机模式,通信双方对每一位要做出响应,通信速率与软件资源的开销会形成一个很大的矛盾,处理不好会导致系统整体性能急剧下降。

这种方法只能用于通信量极少的场合。

4. 通过单片机之间的双机通信设计,进一步学习定时器的功能和编程使用,理解穿行通信与并行通信两种通信方式的异同,掌握串行通信的重要指标:字符帧和波特率,初步了解MCS-51系列单片机串行口的使用方法。

5. 单片机通信的方式分有线通信和无线通信,有线通信主要是通过串行或并行接口进行数据传输,无线通信则是通过无线电波进行数据传输。

nrf24l01无线温度传输—51单片机

nrf24l01无线温度传输—51单片机

无线温度传输系统学校:安徽工业大学学院:电气信息学院由于最近要毕业设计了,老师让我做无线通信,然后我上网找了很多资料,决定用24L01做,经过一段时间的摸索,终于实现了24L01的无线温度传输。

以下是我的程序,可供大家参考(当中在贴吧中学到了很多关于24l01的知识)。

发射端程序:#include <reg52.h>#include <intrins.h>//#include "api.h"#define uchar unsigned char#define TX_ADR_WIDTH 5 // 发射地址的字节个数#define TX_PLOAD_WIDTH 2 //发射字节uchar const TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x55,0x10,0x10,0x01};uchar rx_buf[TX_PLOAD_WIDTH];uchar tx_buf[TX_PLOAD_WIDTH];uchar distance_data[2];uchar flag;//标志sbit CE=P1^1; //发射高电平大于10MS 接收高电平sbit CSN=P1^2; //低电平ISP使能sbit SCK=P1^3; //下降沿sbit MOSI=P1^4; //MCU出sbit MISO=P1^5; //MCU入sbit IRQ=P1^6; //中断uchar bdata sta;sbit RX_DR =sta^6; //接收数据准备就绪sbit TX_DS =sta^5; //已发送数据sbit MAX_RT =sta^4;sbit DQ=P3^3;unsigned char time; //设置全局变量,专门用于严格延时//*********************************************NRF24L01*********************** **************//***************************************NRF24L01寄存器指令*******************************************************#define READ_REG 0x00 // 读寄存器指令#define WRITE_REG 0x20 // 写寄存器指令#define RD_RX_PLOAD 0x61 // 读取接收数据指令#define WR_TX_PLOAD 0xA0 // 写待发数据指令#define FLUSH_TX 0xE1 // 冲洗发送FIFO指令#define FLUSH_RX 0xE2 // 冲洗接收FIFO指令#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令#define NOP 0xFF // 保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01 // 自动应答功能设置#define EN_RXADDR 0x02 // 可用信道设置#define SETUP_AW 0x03 // 收发地址宽度设置#define SETUP_RETR 0x04 // 自动重发功能设置#define RF_CH 0x05 // 工作频率设置#define RF_SETUP 0x06 // 发射速率、功耗功能设置#define STATUS 0x07 // 状态寄存器#define OBSERVE_TX 0x08 // 发送监测功能#define CD 0x09 // 地址检测#define RX_ADDR_P0 0x0A // 频道0接收数据地址#define RX_ADDR_P1 0x0B // 频道1接收数据地址#define RX_ADDR_P2 0x0C // 频道2接收数据地址#define RX_ADDR_P3 0x0D // 频道3接收数据地址#define RX_ADDR_P4 0x0E // 频道4接收数据地址#define RX_ADDR_P5 0x0F // 频道5接收数据地址#define TX_ADDR 0x10 // 发送地址寄存器#define RX_PW_P0 0x11 // 接收频道0接收数据长度#define RX_PW_P1 0x12 // 接收频道0接收数据长度#define RX_PW_P2 0x13 // 接收频道0接收数据长度#define RX_PW_P3 0x14 // 接收频道0接收数据长度#define RX_PW_P4 0x15 // 接收频道0接收数据长度#define RX_PW_P5 0x16 // 接收频道0接收数据长度#define FIFO_STATUS 0x17 // FIFO栈入栈出状态寄存器设置//***************************************************************************** *********void init_io(void){CE=0;CSN=1;SCK=0;}void delay_ms(unsigned int x){unsigned int i,j;for(i=0;i<x;i++){j=108;while(j--);}}uchar SPI_RW(uchar byte)//发送指令,接受状态,返回值为状态值{uchar bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++){MOSI = (byte&0x80);byte = (byte<<1);SCK = 1;byte|=MISO;SCK=0;}return(byte);}uchar SPI_RW_Reg(uchar reg, uchar value){uchar status;CSN = 0;status = SPI_RW(reg);SPI_RW(value);CSN = 1;return(status);}uchar SPI_Read(uchar reg){uchar reg_val;CSN = 0;SPI_RW(reg); //写指令reg_val = SPI_RW(0); //读reg的内容CSN = 1;return(reg_val);}uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes){uchar status,byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)pBuf[byte_ctr] = SPI_RW(0);CSN = 1;return(status);}uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes){uchar status,byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0; byte_ctr<bytes; byte_ctr++)SPI_RW(*pBuf++);CSN = 1;return(status);}void TX_Mode(void){CE=0;SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS/*接收模块的地址*/, TX_ADR_WIDTH/*地址宽度5*/);SPI_Write_Buf(WRITE_REG + RX_ADDR_P0/*通道0 接收数据地址*/, TX_ADDRESS, TX_ADR_WIDTH);SPI_Write_Buf(WR_TX_PLOAD,/*写待发数据指令a0*/ tx_buf, TX_PLOAD_WIDTH/*20*/);SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //数据通道0应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //接收数据通道0允许SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);//等待500+86us 自动重发10次SPI_RW_Reg(WRITE_REG + RF_CH,40);SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //数据传输率1Mbps ,发射功率0dBm SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); //配置寄存器CE=1;}void checkflag(){ sta=SPI_Read(STA TUS);//读状态寄存器// if(RX_DR)// {// SPI_Read_Buf(RD_RX_PLOAD/*读取接收数据指令*/,rx_buf/*数组[20]*/,TX_PLOAD_WIDTH/*20*/);// flag=1;// }if(MAX_RT){SPI_RW_Reg(FLUSH_TX/*冲洗发送FIFO指令*/,0);}SPI_RW_Reg(WRITE_REG+STATUS,sta);//清除中断}//以下是DS18B20的操作程序//************************************************************************/ void delay1ms(){unsigned char i,j;for(i=0;i<4;i++)for(j=0;j<33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/void delaynms(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:将DS18B20传感器初始化,读取应答信号出口参数:flag***************************************************/bit Init_DS18B20(void){bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在DQ = 1; //先将数据线拉高for(time=0;time<2;time++) //略微延时约6微秒;DQ = 0; //再将数据线从高拉低,要求保持480~960usfor(time=0;time<200;time++) //略微延时约600微秒; //以向DS18B20发出一持续480~960us的低电平复位脉冲DQ = 1; //释放数据线(将数据线拉高)for(time=0;time<10;time++); //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time<200;time++) //延时足够长时间,等待存在脉冲输出完毕;return (flag); //返回检测成功标志}/*****************************************************函数功能:从DS18B20读取一个字节数据出口参数:dat***************************************************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat; //储存读出的一个字节数据for (i=0;i<8;i++){DQ =1; // 先将数据线拉高_nop_(); //等待一个机器周期DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序_nop_(); //等待一个机器周期DQ = 1; //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备for(time=0;time<2;time++); //延时约6us,使主机在15us内采样dat>>=1;if(DQ==1)dat|=0x80; //如果读到的数据是1,则将1存入datelsedat|=0x00;//如果读到的数据是0,则将0存入dat//将单片机检测到的电平信号DQ存入r[i]for(time=0;time<8;time++); //延时3us,两个读时序之间必须有大于1us的恢复期}return(dat); //返回读出的十六进制数据}/*****************************************************函数功能:向DS18B20写入一个字节数据入口参数:dat***************************************************/WriteOneChar(unsigned char dat){unsigned char i=0;for (i=0; i<8; i++){DQ =1; // 先将数据线拉高_nop_(); //等待一个机器周期DQ=0; //将数据线从高拉低时即启动写时序DQ=dat&0x01; //利用与运算取出要写的某位二进制数据,//并将其送到数据线上等待DS18B20采样for(time=0;time<10;time++);//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样DQ=1; //释放数据线for(time=0;time<1;time++);//延时3us,两个写时序间至少需要1us的恢复期dat>>=1; //将dat中的各二进制位数据右移1位}for(time=0;time<4;time++); //稍作延时,给硬件一点反应时间}/*****************************************************函数功能:做好读温度的准备***************************************************/void ReadyReadTemp(void){Init_DS18B20(); //将DS18B20初始化WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delaynms(150); //转换一次需要延时一段时间Init_DS18B20(); //将DS18B20初始化WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位}void dwend(void){ uchar TL; //储存暂存器的温度低位uchar TH; //储存暂存器的温度高位TL=ReadOneChar(); //先读的是温度值低位TH=ReadOneChar(); //接着读的是温度值高位distance_data[0]=TH ; //测量结果的高8位distance_data[1]=TL; //放入16位的高8位}void main(void){uchar xx;init_io();while(1){ReadyReadTemp() ;dwend();checkflag();for(xx=0;xx<2;xx++){tx_buf[xx]= distance_data[xx];//发数据之前必须把要发送的数据装入它}TX_Mode(); //必须启动发送模块delay_ms(5);}}接收端程序:#include <reg52.h>#include <intrins.h>#define uchar unsigned charuchar code digit[11]={"0123456789-"}; //定义字符数组显示数字uchar code Str[]={"RICHMCU DS18B20"}; //说明显示的是温度//unsigned char code Error[]={" DS18B20 ERROR"}; //说明没有检测到DS18B20 //unsigned char code Error1[]={" PLEASE CHECK"}; //说明没有检测到DS18B20 uchar code Temp[]={"WENDU:"}; //说明显示的是温度uchar code Cent[]={"Cent"}; //温度单位uchar tm[2];uchar flg=0; //负温度标志和临时暂存变量uchar tltemp;#define TX_ADR_WIDTH 5#define TX_PLOAD_WIDTH 2uchar const TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x55,0x10,0x10,0x01};uchar rx_buf[TX_PLOAD_WIDTH];uchar tx_buf[TX_PLOAD_WIDTH];uchar flag;//标志int cout;sbit CE=P1^1; //发射高电平大于10MS 接收高电平sbit CSN=P1^2; //低电平ISP使能sbit SCK=P1^3; //下降沿sbit MOSI=P1^4; //MCU出sbit MISO=P1^5; //MCU入sbit IRQ=P1^6; //中断uchar bdata sta;sbit RX_DR =sta^6; //接收数据准备就绪sbit TX_DS =sta^5; //已发送数据sbit MAX_RT =sta^4;sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚//***************************************NRF24L01寄存器指令*******************************************************#define READ_REG 0x00 // 读寄存器指令#define WRITE_REG 0x20 // 写寄存器指令#define RD_RX_PLOAD 0x61 // 读取接收数据指令#define WR_TX_PLOAD 0xA0 // 写待发数据指令#define FLUSH_TX 0xE1 // 冲洗发送FIFO指令#define FLUSH_RX 0xE2 // 冲洗接收FIFO指令#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令#define NOP 0xFF // 保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01 // 自动应答功能设置#define EN_RXADDR 0x02 // 可用信道设置#define SETUP_AW 0x03 // 收发地址宽度设置#define SETUP_RETR 0x04 // 自动重发功能设置#define RF_CH 0x05 // 工作频率设置#define RF_SETUP 0x06 // 发射速率、功耗功能设置#define STATUS 0x07 // 状态寄存器#define OBSERVE_TX 0x08 // 发送监测功能#define CD 0x09 // 地址检测#define RX_ADDR_P0 0x0A // 频道0接收数据地址#define RX_ADDR_P1 0x0B // 频道1接收数据地址#define RX_ADDR_P2 0x0C // 频道2接收数据地址#define RX_ADDR_P3 0x0D // 频道3接收数据地址#define RX_ADDR_P4 0x0E // 频道4接收数据地址#define RX_ADDR_P5 0x0F // 频道5接收数据地址#define TX_ADDR 0x10 // 发送地址寄存器#define RX_PW_P0 0x11 // 接收频道0接收数据长度#define RX_PW_P1 0x12 // 接收频道0接收数据长度#define RX_PW_P2 0x13 // 接收频道0接收数据长度#define RX_PW_P3 0x14 // 接收频道0接收数据长度#define RX_PW_P4 0x15 // 接收频道0接收数据长度#define RX_PW_P5 0x16 // 接收频道0接收数据长度#define FIFO_STATUS 0x17 // FIFO栈入栈出状态寄存器设置//***************************************************************************** *********void delay1ms(){unsigned char i,j;for(i=0;i<4;i++)for(j=0;j<33;j++);}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/void delaynms(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}bit BusyTest(void){bit result;RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; //E=1,才允许读写_nop_(); //空操作_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间result=BF; //将忙碌标志电平赋给resultE=0; //将E恢复低电平return result;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/void WriteInstruction (unsigned char dictate){while(BusyTest()==1); //如果忙就等待RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"_nop_();_nop_(); //空操作两个机器周期,给硬件反应时间P0=dictate; //将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址入口参数:x***************************************************/void WriteAddress(unsigned char x){WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/void WriteData(unsigned char y){while(BusyTest()==1);RS=1; //RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"P0=y; //将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/void LcdInitiate(void){delaynms(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x38);delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x38); //连续三次,确保初始化成功delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x06); //显示模式设置:光标右移,字符不移delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除delaynms(5); //延时5ms,给硬件一点反应时间}/*****************************************************函数功能:显示说明信息***************************************************/void display_explain(void){unsigned char i;WriteAddress(0x00); //写显示地址,将在第1行第1列开始显示i = 0; //从第一个字符开始显示while(Str[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Str[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(100); //延时100ms较长时间,以看清关于显示的说明}}/*****************************************************函数功能:显示温度符号***************************************************/void display_symbol(void){unsigned char i;WriteAddress(0x40); //写显示地址,将在第2行第1列开始显示i = 0; //从第一个字符开始显示while(Temp[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Temp[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(50); //延时1ms给硬件一点反应时间}}/*****************************************************函数功能:显示温度的小数点***************************************************/void display_dot(void){WriteAddress(0x49); //写显示地址,将在第2行第10列开始显示WriteData('.'); //将小数点的字符常量写入LCDdelaynms(50); //延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示温度的单位(Cent)***************************************************/void display_cent(void){unsigned char i;WriteAddress(0x4c); //写显示地址,将在第2行第13列开始显示i = 0; //从第一个字符开始显示while(Cent[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Cent[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(50); //延时1ms给硬件一点反应时间}}/*****************************************************函数功能:显示温度的整数部分入口参数:x***************************************************/void display_temp1(uchar x){uchar j,k,l; //j,k,l分别储存温度的百位、十位和个位j=x/100; //取百位k=(x%100)/10; //取十位l=x%10; //取个位WriteAddress(0x46); //写显示地址,将在第2行第7列开始显示if(flg==1) //负温度时显示“—”{WriteData(digit[10]); //将百位数字的字符常量写入LCD}else{WriteData(digit[j]); //将十位数字的字符常量写入LCD}WriteData(digit[k]); //将十位数字的字符常量写入LCDWriteData(digit[l]); //将个位数字的字符常量写入LCDdelaynms(5); //延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示温度的小数数部分入口参数:x***************************************************/void display_temp2(uchar x){WriteAddress(0x4a); //写显示地址,将在第2行第11列开始显示WriteData(digit[x]); //将小数部分的第一位数字字符常量写入LCD delaynms(5); //延时1ms给硬件一点反应时间}void init_io(void){CE=0;CSN=1;SCK=0;}void delay_ms(unsigned int x){unsigned int i,j;for(i=0;i<x;i++){j=108;while(j--);}}uchar SPI_RW(uchar byte){uchar bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++){MOSI = (byte&0x80);byte = (byte<<1);SCK = 1;byte|=MISO;SCK=0;}return(byte);}uchar SPI_RW_Reg(uchar reg, uchar value){uchar status;CSN = 0;status = SPI_RW(reg);SPI_RW(value);CSN = 1;return(status);}uchar SPI_Read(uchar reg){uchar reg_val;CSN = 0;SPI_RW(reg);reg_val = SPI_RW(0);CSN = 1;return(reg_val);}uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes) {uchar status,byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)pBuf[byte_ctr] = SPI_RW(0);CSN = 1;return(status);}uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes) {uchar status,byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0; byte_ctr<bytes; byte_ctr++)SPI_RW(*pBuf++);CSN = 1;return(status);}void RX_Mode(void){CE=0;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //数据通道0应答允许SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);//接收数据通道0允许SPI_RW_Reg(WRITE_REG + RF_CH, 40);SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);// 接收频道0 接收数据长度设置SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //数据传输率1Mbps ,发射功率0dBm SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); //配置寄存器CE = 1;}void checkflag(){sta=SPI_Read(STA TUS);if(RX_DR){SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);flag=1;}if(MAX_RT){SPI_RW_Reg(FLUSH_TX,0);}SPI_RW_Reg(WRITE_REG+STATUS,sta);}void yejinchu(void){LcdInitiate(); //将液晶初始化delaynms(5); //延时5ms给硬件一点反应时间display_explain();display_symbol(); //显示温度说明display_dot(); //显示温度的小数点display_cent(); //显示温度的单位}void xianshi(void){uchar TL; //储存暂存器的温度低位uchar TH; //储存暂存器的温度高位uchar TN; //储存温度的整数部分uchar TD; //储存温度的小数部分TH=tm[0] ;TL=tm[1];if((TH&0xf8)!=0x00)//判断高五位得到温度正负标志{flg=1;TL=~TL; //取反TH=~TH; //取反tltemp=TL+1; //低位加1TL=tltemp;if(tltemp>255) TH++; //如果低8位大于255,向高8位进1TN=TH*16+TL/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了TD=(TL%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,}TN=TH*16+TL/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了TD=(TL%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,//这样得到的是温度小数部分的第一位数字(保留1位小数)display_temp1(TN); //显示温度的整数部分display_temp2(TD); //显示温度的小数部分delaynms(5);}void main(void){uchar xx;yejinchu();init_io();RX_Mode();while(1){checkflag();if(flag){flag=0;for(xx=0;xx<2;xx++){tm[xx]=rx_buf[xx];delay_ms(1);}xianshi();}}}。

基于51单片机与nRF24L01无线门禁控制系统设计

基于51单片机与nRF24L01无线门禁控制系统设计

基于51单片机与nRF24L01无线门禁控制系统设计1. 本文概述本文旨在探讨基于51单片机与nRF24L01无线门禁控制系统的设计。

随着科技的快速发展和智能化趋势的加强,门禁控制系统作为保障场所安全的重要手段,其设计与实现变得尤为重要。

传统的门禁系统多采用有线连接方式,布线复杂、成本较高且灵活性不足。

本文提出了一种基于51单片机与nRF24L01无线模块的门禁控制系统设计,旨在实现门禁系统的无线化、智能化和便捷化。

本文将首先介绍51单片机和nRF24L01无线模块的基本原理和特点,为后续的设计工作提供理论基础。

随后,将详细阐述系统的硬件设计,包括无线模块的选型、电路设计以及门禁控制器的实现等。

在此基础上,本文将进一步探讨软件设计的关键问题,包括无线通信协议的制定、门禁控制算法的实现以及用户界面的设计等。

通过本文的研究,旨在设计并实现一个稳定可靠、易于扩展的无线门禁控制系统,为各类场所提供高效便捷的门禁管理解决方案。

同时,本文的研究结果将为相关领域的研究人员提供有益的参考和借鉴,推动无线门禁控制技术的进一步发展。

2. 系统设计原理51单片机,作为一种经典的微控制器,其核心是基于Intel的8051架构。

它具备基本的输入输出控制能力,定时器计数器,中断系统以及一定的内存管理功能。

在本系统中,51单片机扮演着中央处理单元(CPU)的角色,负责接收传感器数据,处理输入信号,并根据预设的逻辑控制输出设备,如无线通信模块和门禁机构。

nRF24L01是一款高性能的无线传输模块,基于Nordic Semiconductor的 NRF24L01 芯片。

它工作在4GHz的ISM频段,支持点对点、点对多点的通信模式。

nRF24L01模块具有自动应答和自动重发功能,确保数据传输的可靠性。

在本系统中,nRF24L01用于无线传输门禁控制信号,包括身份验证数据和控制指令。

系统设计将51单片机和nRF24L01无线模块整合,形成一个高效、可靠的无线门禁控制系统。

(完整版)基于51单片机的无线数据收发系统设计(带电路图和代码)

(完整版)基于51单片机的无线数据收发系统设计(带电路图和代码)

1 引言伴随着短距离、低功率无线数据传输技术的成熟,无线数据传输被越来越多地应用到新的领域。

与有线通信方式相比,无线通信以其不需铺设明线,使用便捷等一系列优点,在现代通信领域占重要地位。

但以往的无线产品存在范围和方向上的局限。

例如,一些无线产品在使用时,无法将信息反馈给控制者;还有一些无线产品不能很好地显示参数或状态信息,如果能在系统中增加一块小型液晶显示电路,产品不仅能向用户显示其状态或状态的改变,而且可以大大降低成本。

正如人们所发现的,只要建立双向无线通信-双工通信并且选择成本低的收发芯片,就会出现许多新应用。

本次设计主要是利用无线收发电路,加上单片机控制与液晶显示制成一套完整的数据收发系统。

考虑到目前市场上的一些需求,设计的主要要求是方案成本低,体积小,低功耗,集成度高,尽量无需调外部元件,传输时间短,接口简单。

nRF401是国外最新推出的单片无线收发一体芯片,它在一个20脚的芯片中包括了高频发射、高频接收、PLL合成、FSK调制、多频道切换等功能,并且外围元件少,便于设计生产,功耗极低,集成度高,是目前集成度较高的无线数传产品,它为低速率低成本的无线技术提出了解决方案。

2 无线数据收发系统2.1 系统组成无线数据传输系统有点对点,点对多点和多点对多点三种。

本系统由于实际应用的需要,接收器和数据终端之间的数据传输通过nRF401进行,构成点对点无线数据传输系统。

整个系统中,两数据终端之间的无线通信采用433MHz的频段作为载波频率,收发通过串口通信。

无线数据收发系统可以分为无线收发控制电路、单片机控制电路、显示电路和按键电路四部分组成,系统原理如图2-1所示:图2-1 无线数据收发系统原理图2.2 实现过程当我们需要发送数据时,使用按键来输入所需发送的信息。

按键与单片机AT89S52的P3.2-P3.5口相接,单片机的 P1.0口控制信息的发送与接收,并且TXD 端与收发器输入端相连,通过TXD将数据传入收发器,收发器接收到数据后,通过FSK调制,将信号发送出去;接收端的收发器通过解调,将载波信号转换为数字信号,完成信息传输过程;收发器的输出端通过RXD端将数字信号输入到单片机;单片机将数据传送到显示器,这样就完成了一次数据发送与接收并显示的过程。

基于单片机的WIFI智能无线开关

基于单片机的WIFI智能无线开关

本科毕业论文(设计) 题目:基于单片机的WIFI智能无线开关学院:物理与电子科学学院班级:姓名:指导老师:王强职称:助教完成日期: 2014 年 5 月 1基于单片机的WIFI智能无线开关摘要:科技高速发展,人们的需求也在日益增长,智能成为人们孜孜不倦的追求。

电子计算机的出现丰富了这个世界,也简化了这个世界。

当然微型处理系统也悄悄产生了,并大量应用在实际中,利用MCU控制,处理一些事务,降低了劳动时间,提高了劳动效率,也提高了精度。

MCU的出现使生活与生产发生很大的改变。

人们的生活与网络与智能越来越密不可分。

本文阐述了一套智能WIFI无线开关的设计,首先论述了WIFI和开关的历史与发展,然后提出了不同的方案,并进行了详细的分析,在此基础上形成了一套方案,并对此方案提出了一系列的软件及硬件的设计方法。

最后对本方案存在的问题及应用前景进行了分析。

关键词:WIFI;智能;无线开关目录引言 (1)1 WIFI与开关 (2)1.1 WIFI的发展与现状 (2)1.2开关的发展与现状 (2)2 系统方案 (2)2.1系统的设计要求 (2)2.2方案比较与选择 (3)2.2.1 控制芯片的选择 (3)2.2.2 WIFI模块的选择 (3)2.3 短距离无线模块的选择 (3)2.4开关的选择 (4)3 系统硬件电路设计 (5)3.1芯片 (6)3.1.1 STC89C52RC芯片 (6)3.1.2 STC12C2052AD芯片 (6)3.2 WIFI模块 (7)3.3 无线模块 (7)3.4开关 (8)3.5总体设计 (9)4 系统整体设计 (9)4.1系统详细设计及工作原理 (9)4.2上位机软件的编写 (9)4.2系统框架图与流程图 (10)4.3 系统存在问题 (11)5 结束语 (11)引言这是一个智能的时代,科技决定生活质量。

方便,高效,省时是这个时代的主题,也是科学发展的方向。

在千千万万的高科技术中,有一门技术虽然仅仅是在近来才发展起来的,但是其对人类生活的影响却不容小觑,这一技术就是WIFI技术。

基于51单片机的智能家居系统设计

基于51单片机的智能家居系统设计

基于51单片机的智能家居系统设计随着科技的不断发展,智能家居已经逐渐走进了人们的生活。

智能家居系统能够为人们提供更加便捷、舒适和安全的居住环境。

本文将介绍一种基于 51 单片机的智能家居系统设计。

一、系统概述本智能家居系统以 51 单片机为核心控制单元,通过传感器采集环境数据,实现对家居设备的智能控制。

系统主要包括传感器模块、单片机控制模块、执行模块和通信模块等部分。

传感器模块用于采集室内的温度、湿度、光照强度、烟雾浓度等环境参数,并将这些数据传输给单片机。

单片机控制模块对传感器采集到的数据进行处理和分析,根据预设的控制策略,向执行模块发送控制指令。

执行模块包括灯光控制、窗帘控制、电器控制等设备,负责实现具体的控制操作。

通信模块用于实现系统与用户手机或其他终端设备的通信,使用户能够远程监控和控制家居设备。

二、硬件设计1、传感器模块(1)温度传感器:采用DS18B20 数字温度传感器,它具有精度高、测量范围广、接口简单等优点,能够实时准确地测量室内温度。

(2)湿度传感器:选用 DHT11 湿度传感器,它能够同时测量温度和湿度,并将数据以数字信号的形式输出。

(3)光照强度传感器:使用 BH1750FVI 光照传感器,可精确测量环境光照强度,为灯光控制提供依据。

(4)烟雾传感器:采用 MQ-2 烟雾传感器,对烟雾等有害气体具有较高的灵敏度,能够及时检测到火灾隐患。

2、单片机控制模块选用STC89C52 单片机作为控制核心,它具有性能稳定、价格低廉、易于编程等特点。

单片机通过 I/O 口与传感器模块和执行模块进行连接,实现数据的传输和控制指令的发送。

3、执行模块(1)灯光控制:采用继电器控制灯光的开关,通过单片机输出的高低电平信号来控制继电器的通断,从而实现灯光的亮灭控制。

(2)窗帘控制:使用步进电机驱动窗帘的开合,单片机通过发送脉冲信号控制步进电机的转动角度,实现窗帘的开合程度调节。

(3)电器控制:通过智能插座实现对电器的电源控制,智能插座与单片机通过无线通信模块进行连接,接收单片机的控制指令。

51单片机的2个串口分别通信的方法

51单片机的2个串口分别通信的方法

51单片机的2个串口资源分别通信的方法当使用51单片机的2个串口资源进行通信时,比如用一个串口与PLC的串口使用RS485协议通信,一个串口通过蓝牙模块和另一个单片机无线通信时,该如何处理呢?传统的51单片机只有1个串口资源,只能采用分时复用的方法。

STC的15系列增强版51单片机具有多个串口资源,本文将描述如何使用IAP15W4K58S单片机用一个串口资源与PLC的RS485有线通信,另一个串口资源与Arduino单片机通过蓝牙模块无线通信,该通讯连接过程中PLC作为主机,IAP15W4K58S作为中间机,Arduino单片机作为最低层级。

工作过程是按下启动按键,PLC发信息给IAP15W4K58S单片机发高速脉冲控制步进电机驱动的机械臂运动取走货物,当货物取走后,IAP15W4K58S单片机通过蓝牙模块通知Arduino单片机控制的小车将新货物运送过来。

连接结构示意图如下图所示。

本例程使用的单片机型号为:IAP15W4K58S,该单片机有4个采用UART 工作方式的全双工异步串行通信接口(分别为串口1、串口2、串口3和串口4),每个串行口由2个数据缓冲器、1个移位寄存器、1个串行控制寄存器和1个波特率发生器等组成。

本项目使用串行口1和串行口2。

串行口1的两个缓冲器共用寄存器SBUF (99H),串行口2的两个缓冲器共用寄存器S2BUF(9BH)。

10位(1起始位,8位数据位,1停止位)可变波特率(9600)。

串口1对应的硬件部分是TxD和RxD,串行口2对应硬件部分是TxD2和RxD2。

串口1选择引脚P3.0(RxD)和P3.1(TxD),串口2选择引脚P1.0(RxD)和P1.1(TxD)。

串口1既可以选择T1作为波特率发生器,也可以选择T2作为波特率发生器。

本文串口1提供2个选择(T1和T2),串口2只能选择T2作波特率发生器。

但是当串口1和串口2的波特率相同时,可以共用T2作为波特率发器,当T2工作在1T模式时,串行口1的波特率=SYSclk/(65536-[RL_TH2,RL_TL2])/4,SYSclk表示系统时钟频率,[RL_TH2,RL_TL2]表示T2H,T2L的定时初值设置值。

基于WIFI模块和单片机的无线数据传输(附代码)

基于WIFI模块和单片机的无线数据传输(附代码)

目录第一章阶段任务第二章基于WIFI模块的无线数据传输的原理1.1 时钟模块1.2 最小单片机系统的原理1.3 温度传感器DS18B201.4 串口1.5 WIFI模块第三章基于WIFI模块的无线数据传输的实现2.1 WIFI模块设置2.2 串口部分设置2.3 调试与运行过程第四章程序与框图第五章小结第二章基于WIFI模块的无线数据传输的原理1.1时钟DS1302模块:电路原理图:DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟引脚、I/O 串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。

读写时序说明:DS1302是SPI总线驱动方式。

它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。

控制字总是从最低位开始输出。

在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。

同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。

数据读写时序如图1.2单片机最小系统的原理:说明复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)单片机:一片AT89S51/52或其他51系列兼容单片机特别注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行.1.3温度传感器DS18B20的原理(连接到单片机最小系统,并将温度发送给WIFI模块):3.1.1 DS18B20性能特点(1) 独特的单线接口方式,只需一个接口引脚即可通信;(2) 每一个DS18B20都有一个唯一的64位ROM 序列码; (3) 在使用中不需要任何外围元件;(4) 可用数据线供电,电压范围:+3.0V-+5.5 V ;(5) 测温范围:-55℃ -+125℃,在-10℃-+85℃范围内精度为+0.5℃,分辨率为0.0625℃; (6) 通过编程可实现9-12位的数字读数方式。

51单片机实现RS485

51单片机实现RS485

default: // 普通数据则直接发送TI = 0;SBUF = da;while(!TI);TI = 0;}}#endifRS-232接口实现计算机和单片机通信程序作者:佚名来源:本站原创点击数:…更新时间:2008年07月10日【字体:大中小】//此程序通过RS-232接口来完成计算机和单片机通信(程序已用p1 8f458试验板上调试通过)//程序的调试可以用"串口调试助手V2.1"辅助完成,此程序可在htt p:// 下载//此程序首先发送测试数据55H,再通过中断实现数据的接收和发送#include "p18f458.h"void InterruptHandlerHigh(void);//初始化程序void initial(){SPBRG=0X19; //选择传输波特率为9600bpsTXSTA=0X04; //选择异步高速方式传输8位数据RCSTA=0X80; //允许同步串行口工作TRISC=0X80; //将RC7,RC6设置为输入,断绝与外接电路的连接 TXSTAbits.TXEN=1; //发送允许RCSTAbits.CREN=1; //接受数据允许PIE1bits.RCIE=1; //接收中断使能INTCON=0XC0; //总中断和外围中断允许}//高优先级中断向量#pragma code InterruptVectorHigh=0x08void InterruptVectorHigh (void){_asmgoto InterruptHandlerHigh //跳到中断程_endasm}//高优先级中断服务程序#pragma code#pragma interrupt InterruptHandlerHighvoid InterruptHandlerHigh (){while(PIR1bits.RCIF==1) //若接收中断标志不为1,则为误操作,返回{TXREG=RCREG; //将接收到的数据放入发送寄存器,并启动发送 }}//主程序main(){initial(); //系统初始化TXREG=0X55; //发送数据55H进行测试for(;;);}------------------------------------------汇编语言版本的RS-232接口实现计算机和单片机通信程序------------;此程序通过RS-232接口来完成计算机和单片机通讯(程序以在p18 f458试验板上调通);本单片机程序由提供;此程序首先发送测试数据55H,再通过中断实现数据的接收和发送;程序的调试可以用"串口调试助手V2.1"辅助完成LIST P=18f458INCLUDE "P18f458.INC"ORG 0x00GOTO MAINORG 0x08GOTO INTSERVEORG 0X30;**************中断服务子程序***************INTSERVEBTFSS PIR1,RCIF ;接收中断标志为1?GOTO ERR_RE ;误操作,返回MOVF RCREG,0 ;否则,将接收到的数据通过W寄存器MOVWF TXREG ;放入发送寄存器,并启动发送ERR_RE NOPRETFIE;****************初始化程序***************INITIAL NOPMOVLW 0X19 ;选择传输波特率为9600bpsMOVWF SPBRGMOVLW 0X04 ;选择异步高速方式传输8位数据MOVWF TXSTAMOVLW 0X80 ;允许同步串行口工作MOVWF RCSTAMOVLW 0X80 ;将RC7,RC6设置为输入,断绝与外接电路的连接MOVWF TRISCBSF TXSTA,TXEN ;发送允许BSF RCSTA,CREN ;接受数据允许BSF PIE1,RCIE ;接收中断使能MOVLW 0XC0 ;总中断和外围中断允许MOVWF INTCONRETURN;**********************主程序********************* MAIN NOPCLRWDTCALL INITIALMOVLW 0X55 ;发送数据55H进行测试MOVWF TXREGLOOPGOTO LOOPEND两片51单片机互相通信的串行通信程序(一个发送程序,一个接收程序)2007-05-27 08:27;系统晶振是 11.0592 MHz;51单片机发送单片机程序;此程序用Proteus仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信ORG0000HAJMPSTARTORG0040HSTART:MOVSP,#60HMOVSCON,#50H;串口方式 1MOVTMOD,#20H;T1 方式2MOVTL1,#0FDH;波特率 9600 的常数MOVTH1,#0FDHSETBTR1movr5,#00hWAIT:movp1,#0ffhmova ,p1movr5,alcalldelay ;读键盘,这里去抖动,还要加几句话mova ,p1nopCJNEA,5,WAIT ;是否有键输入MOVSBUF,a;串口输出键盘输入的值NOPSS: JBCTI,WAIT;是否发送完毕SJMPSSDELAY:;延时子程序PUSH;保存现场PUSH1MOV0,#06HDELAY1: MOV 1,#0HDJNZ1,$DJNZ0,DELAY1POP1;恢复现场POPRETEND;系统晶振是 11.0592 MHz;51单片机接收单片机程序;此程序用Proteus仿真通过;此程序在硬件上测试通过;2007-05-27;附有简化电路图;为了使初学者能看懂,程序与图尽可能的简单扼要;实验现象为,发送端的P1口的哪个键被接下,接收端的哪个灯对应着亮;如果把两个单片机的T和R通过无线模块(如基于MCP2120芯片的模块)来扩充,便可做成无线通信ORG0000HAJMPSTARTORG0040HSTART:MOVSCON,#50H;串口方式 1MOVTMOD,#20H;T1 方式 2MOVTL1,#0FDH;波特率 9600 的常数MOVTH1,#0FDHSETBTR1WAIT:JBCRI,DIS_REC;是否接收到数据sjmpwaitDIS_REC:MOVA,SBUF;读串口接收到的数据movp1,aSJMPwaitend51单片机串行口通信程序设计例子时间:2009-03-06 17:13来源:未知作者:牛牛点击: 768次串行口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就能扩展一个并行口。

用单片机实现无线通信中数据的编解码

用单片机实现无线通信中数据的编解码

用单片机实现无线通信中数据的编解码用单片机实现无线通信中数据的编解码利用单片机和无线数传模块来完成无线数据通信在石油、电力、水文、冶金等行业的无线控制、数据采集、报警诸多领域中有着广泛的应用前景。

通常采用的办法是用单片机的串行I/O口来完成数据通信,但是该方法有许多不足之处:第一、在利用单片机的串口进行发送和接收数据时,对传输的数据只能进行奇偶校验,然而在无线通信场合,被传输的数据极易受到电磁、静电等的干扰,奇偶校验一般不能检测出这类干扰所引起的突发性错误,所以该方法无法满足差错检测要求较高的场合;第二、由于单片机一般采用异步通信方式,接受器通常不能很快的接收到有效数据,因而该方法也不能满足要求多路进行快速切换的场合;第三、单片机的串口通信在传输速率和每帧的有效数据位数等方面都受到了严格的限制,缺乏灵活性。

本文针对低速无线通信的场合,提出了一种通过单片机用软件实现编解码的方案,该方案可以有效克服上述单片机串口通信的不足之处,在无线通信中得到了令人满意的效果[1-4]。

1编码原理及程序流程1.1编码原理假设传输的数据精度为12位,以A8BH为例,其帧格式,高位在先,低位在后[5]。

数据的编码采用了曼彻斯特编码格式,每帧数据由同步头、有效数据位和校验位三部分组成。

其中数据位&ldquo;1&rdquo;由高到低的跳变表示,数据位&ldquo;0&rdquo;由低到高的跳变表示,而且数据位&ldquo;1&rdquo;和&ldquo;0&rdquo;高低电平周期各为0.5T(设T 为一个数据位宽度)。

根据曼彻斯特码的特点,每个数据位都由高低电平组成,因而在连续传输的有效数据位中不会存在超过一个数据位宽度的高电平或低电平,因此在每个数据的前面设一个同步头,高低电平各为1.5 T。

这样在进行接收数据时,只要采样得到的电平满足1.5T,则认为该电平是同步头,开始接收数据。

基于51单片机的智能火灾报警系统的设计与实现

基于51单片机的智能火灾报警系统的设计与实现

基于51单片机的智能火灾报警系统的设计与实现一、概述随着现代科技的发展,人们对于居住和工作环境的安全性要求日益提高。

在众多安全设备中,火灾报警系统是保护生命财产安全的重要设备之一。

传统的火灾报警系统往往依赖于复杂的电路和较多的硬件设备,不仅成本较高,而且维护复杂。

为了提高火灾报警系统的智能化水平,降低成本,提高可靠性,本文提出了一种基于51单片机的智能火灾报警系统。

51单片机是一种高性能、低成本的微控制器,广泛应用于工业控制、智能仪器等领域。

本设计利用51单片机的强大处理能力和丰富的接口资源,结合现代传感技术和无线通信技术,实现了一种智能化的火灾报警系统。

系统主要由传感器模块、51单片机处理模块、报警模块和无线通信模块组成。

传感器模块负责实时监测环境中的温度、烟雾等参数,当检测到异常时,将数据发送给51单片机处理模块。

51单片机处理模块对接收到的数据进行处理和分析,当判断为火灾时,触发报警模块进行声光报警,并通过无线通信模块将报警信息发送给远程监控中心。

智能化:通过51单片机的处理,能够对环境参数进行实时监测和分析,准确判断火灾情况。

成本低:利用51单片机的低成本和丰富的资源,降低了整个系统的成本。

可靠性高:采用成熟的51单片机技术和无线通信技术,保证了系统的稳定性和可靠性。

本文接下来的章节将详细介绍基于51单片机的智能火灾报警系统的设计与实现过程,包括硬件设计、软件设计以及系统测试等内容。

1. 火灾报警系统的重要性火灾报警系统是现代社会中不可或缺的安全设备之一。

它对于及时发现并响应火灾事件,减少火灾造成的生命财产损失具有至关重要的作用。

在分析火灾报警系统的重要性时,我们可以从以下几个方面进行探讨:火灾报警系统能够实现火灾的早期发现。

由于火灾初期往往不易被察觉,而此时火势较小,是扑救火灾的最佳时机。

火灾报警系统通过检测火焰、烟雾或温度的变化,可以在火灾初期阶段就发出警报,为扑救火灾赢得宝贵的时间。

基于51单片机的无线体感鼠标设计与实现

基于51单片机的无线体感鼠标设计与实现
当人将手持无线体感鼠标发射端在三维空间内移动时, 显示在电脑屏幕上指针也随着发射端的移动精确快速地做 出 指 令。 在 STC89C52 微 处 理 器 中 随 时 不 断 的 解 算 到 由
收稿日期:2020-09-17
MPU-6050 运动处理模块采集到的数据,然后通过无线收发 模块发送到连接电脑的接收端。接收端收到信息后,立刻 进行处理和解算成为光标位移信息和按键控制信息,通过 MPU-6050 运动处理模块优化后得到的最优数据会被实时更 新到电脑端,实时反馈是否有体感动作指令输入,最后经 过 USB 协议编码和信息交互完成电脑屏幕上光标的移动和 控制。
要求,拥有多种中断方式便于数据传输。它的性能优越、功 耗低且开发成本低廉 [6]。当 USB 接口配置成功后 LED 指示
陀螺仪可以检测出运动中物体的角速度并且在短暂的时间内 灯会根据通信的状况间歇闪烁。
48 2020.10
赵华峰:基于 51 单片机的无线体感鼠标设计与实现
第 20 期
3 无线体感鼠标系统软件设计
系统工作时,首先配置好发射部分的姿态采集模块,设 置控制芯片模式,建立无线模块之间的通信连接,还要建立 接收部分 USB 端和电脑端的通信连接。无线体感鼠标系统 流程图如图 2 所示。
开始
初始化设备
线接收模块、按键及供电模块等构成。MPU-6050 运动处理模块通过解算识别运动姿态,实现人在空间中控制鼠标对屏幕指针的
操控。经制作及对比测试,它具备高精度和流畅性好的优点,具有一定的实用价值。
关键词:STC89C52 单片机;MPU-6050 运动处理模块;无线发送模块;无线接收模块
中图分类号:TP368.1;TP334.2
2020.10 47
第 20 期
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖北民族学院信息工程学院课程设计报告书题目: 基于51单片机的无线通信课程:数字通信系统课程设计专业:电子班级: 0314411学号: *********学生姓名:***指导教师:***2017年 06月 18日摘要本文设计了一种以AT89S52单片机为控制核心的无线通信控制模块,详细说明了该系统的基本原理、主要电路、硬件框架以及软件框架。

整个系统采用模块化设计,主要包括单片机与下位机之间的无线通信控制电路,以及无线通信模块与51单片机之间通信接口电路。

该通信控制系统通过51单片机和nrf2401的spi通信,从而通过无线通信控制模块形成与下位机的联系,控制下位机运动控制器,并且将通信接收的数据保存到扩展的存储器内。

本模块的通信方法简便,除了可以进行远程实时控制外,还可广泛的应用于工业监控和数据采集系统。

本系统具有性能可靠、抗干扰能力强、功耗低、性价比高等优点,在无线通信领域具有重要的应用价值和良好的发展前景。

关键字:无线通信控制;AT89S52;nRF2401;串行通信目录1 绪论 (1)2 总体设计 (2)3 各个模块简介 (3)1.单片机STC89C52和nRF2401的接口电路 (3)3.1NRF24L01 无线模块简介 (4)3.2 1602简介 (4)4 各个模块设计 (10)4.1硬件电路板的设计 (10)4.2软件程序设计 (11)4.2.1主程序模块 (11)4.3 结果与分析 (13)总结 (14)参考文献 (15)1 绪论伴随着短距离低功率无线数据传输技术的成熟,无线数据传输被越来越多地应用到新的领域。

与有线通信方式相比,无线通信以其不需铺设明线,使用便捷等一系列优点,在现代通信领域占重要地位。

以往的无线产品存在范围和方向上的局限,例如,一些无线产品在使用时,无法将信息反馈给控制者;还有一些无线产品不能很好地显示参数或状态信息,如果能在系统中增加一块小型液晶显示电路,产品不仅能向用户显示其状态或状态的改变,而且可以大大降低成本。

正如人们所发现的,只要建立双向无线通信-双工通信并且选无线数据传输模块基于微功耗单片射频收发器NRF24L01设计,采用89C52单片机完成数据的处理和控制择成本低的收发芯片,就会出现许多新应用。

本次设计主要是利用无线收发电路,加上单片机控制与液晶显示制成一套完整的点对点数据收发系统。

考虑到目前市场上的一些需求,设计的主要要求是方案成本低,体积小,低功耗,集成度高,尽量无需调外部元件,传输时间短,接口简单。

2 总体设计本设计使用M3单片机和51单片机通过nRF24L01模块进行通信实现51单片机发送字符到M3单片机上显示。

系统原理框如图2.1所示.图 2.1系统原理框图当51单片机通过spi对2401进行数据读写完毕后,2401将储存的字符通过射频技术发送给等待的2401,这时M3对2401接受到的数据进行读写,然后再TFT屏上显示接收到的内容。

3 各个模块简介1.单片机STC89C52和nRF2401的接口电路STC89C52有UART和SPI接口,而nRF2401用的是DRI、CLK和DATA三线传输。

考虑到速率的因数, STC89C52和nRF2401的连接准备用SPI接口实现。

SPI(Serial PeriPheral Interface,串行外设接口)接口是一种同步串行外设接口,它可以使MCU和各种外围设备进行通信以交换信息。

外围设备包括Flash RAM,网络控制器,LCD显示驱动器,A/D转换器和MUC等。

图4说明了一个典型的SPI主从式总线结构。

它使用3根线连接了所有的设̅̅̅脚来选择从设备。

备。

主设备通过并行的4个管脚来控制各个从设备的SS图2典型的SPI主从式总线结构1、MOSI (Master Output Slave Input):这个1bit的信号直接连接主设备和从设备。

信号通过MOSI线从主设备串行传输到从设备。

因此,对主设备而言,MOSI是信号输出端口,对从设备而言,则是信号输入端口。

在这条线上,一个Byte的信号通过高位(MSB)到低位(LSB)的传输。

2、MISO (Master Input Slave Output):通过这个1bit的信号线,信号由从设备传输到主设备,因此它是主设备的信号输入端口,从设备的信号输出端口。

信号同样是从MBS到LBS的传输。

3、SCK (SPI Serial Clock):这个信号来同步所有设备的进出MOSI和MISO的数据。

它通过主设备的8个时钟周期来驱动,允许交换串行线上的1个Byte的信号。

̅̅̅ (Slave Select)4、SS̅̅̅管脚保持低电平来选择该从设备。

显然只有主设备通过使某个从设备的SS̅̅̅管脚保持高电平)才能驱动这个系统。

主设备通过软件,利用端口来选择(它的SS从设备。

通过阻止MISO线上的冲突,来保证主设备每次传输只选择一个从设̅̅̅管脚可以和SPI的状态寄存器SPSTA中的MODF一起工备。

在设置主设备时, SS作来阻止多个主设备一起驱动MOSI和SCK。

3.1NRF24L01 无线模块简介NRF24L01 无线模块,采用的芯片是 NRF24L01,该芯片的主要特点如下:1) 2.4G 全球开放的 ISM 频段,免许可证使用。

2)最高工作速率 2Mbps,高校的 GFSK 调制,抗干扰能力强。

3) 125 个可选的频道,满足多点通信和调频通信的需要。

4)内置 CRC 检错和点对多点的通信地址控制。

5)低工作电压(1.9~3.6V)。

6)可设置自动应答,确保数据可靠传输。

该芯片通过 SPI 与外部 MCU 通信,最大的 SPI 速度可以达到 10Mhz。

本章我们用到的模块是深圳云佳科技生产的 NRF24L01,该模块成熟度和稳定性都是相当不错的。

该模块的外形和引脚图如图 3.1 所示:图 3.1 NRF24L01 无线模块外形和引脚图模块 VCC 脚的电压范围为 1.9~3.6V,建议不要超过 3.6V,否则可能烧坏模块,一般用 3.3V电压比较合适。

除了 VCC 和 GND 脚,其他引脚都可以和 5V 单片机的IO 口直连,正是因为其兼容 5V 单片机的 IO,故使用上具有很大优势。

3.2 1602简介1.1602字符液晶显示模块,可显示数字和字母。

与数码管相比显示内容更丰富,而且编程简单。

它能够显示系统的当前工作时间、时间以及温度传感器检测到的温度。

为使用者观察提供了方便。

LCD1602的接口信号说明如表3表3 LCD1602的接口信号编号引脚符号功能说明编号引脚符号功能说明1 VSS 电源地9 D2 DATA I/O2 VDD 电源正极10 D3 DATA I/O3 VL 液晶显示偏压信号11 D4 DATA I/O12 D5 DATA I/O4 RS 数据/命令选择端(H/L)5 R/W 读/写选择端(H/L)13 D6 DATA I/O6 E 使能信号14 D7 DATA I/O7 D0 DATA I/O 15 BLA 背光正极8 D1 DATA I/O 16 BLK 背光负极2.基本操作时序如下:1)读状态:RS=L,RW=H,E=H2)写指令:RS=L,RW=L,D0~D7=指令码,E=高脉冲3)读数据:RS=H,RW=H,E=H4)写数据:RS=H,RW=L,D0~D7=数据,E=高脉冲3.初始化设置1)显示模式设置如表5表4 显示模式设置指令码功能0 0 1 1 1 0 0 0 设置16*2显示,5*7点阵,8位数据接口2)显示开/关及光标设置如表6:表7 显示开/关及光标设置指令码功能0 0 0 0 1 D C B D=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示0 0 0 0 0 1 N S N=1当读或写一个字符后地址指针加一,且光标加一N=0当读或写一个字符后地址指针减一,且光标减一S=1当写一个字符,整屏显示左移(N=1)LCD1602与MCU的接口电路LCD的D0~D7分别接单片机的的P0口,作为数据线,因为P0口内部没有上拉电阻,所以外部另外加上4.7K的上拉电阻;P2.5—P2.7分别接LCD的RS、RW、E三个控制管脚;RV1用来调节LCD的显示灰度;BLK、BLA为背光的阴极和阳极,接上相应电平即点亮背光灯。

如图4图4 1602显示电路其中1602的第3脚接10K与1.5K的串联电阻起到分压作用,能够调节第一行与第二行亮度对比。

第16接个三极管的作用放大,是为了能够让液晶显示器的背光灯亮起,从而在夜间也能观看显示内容。

3.3 STC89C52单片机单片微型计算机是随着微型计算机的发展而产生和发展的。

自从1975 年美国德克萨斯仪器公司的第一台单片微型计算机(简称单片机)TMS-1000 问世以来,迄今为止,单片机技术已成为计算机技术的一个独特分支,单片机的应用领域也越来越广泛,特别是在工业控制中经常遇到对某些物理量进行定时采样与控制的问题,在仪器仪表智能化中也扮演着极其重要的角色。

如果将8位单片机的推出作为起点,那么单片机的发展历史大致可以分为以下几个阶段:第一阶段(1976—1978):单片机的探索阶段。

以Intel公司的MCS-48为代表。

MCS-48的推出是在工控领域的探索,参与这一探索的公司还有Motorola、Zilog等。

都取得了满意的效果。

这就是SCM的诞生年代,“单片机”一词即由此而来。

第二阶段(1978—1982):单片机的完善阶段。

Intel公司在MCS-48基础上推出了完善的、典型的单片机系列MCS-51。

它在以下几个方面奠定了典型的通用总线型单片机体系结构。

(1)完善的外部总线。

MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有多机通信功能的串行通信接口。

(2)CPU外围功能单元的集中管理模式。

(3)体现工控特性的地址空间及位操作方式。

(4)指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。

第三阶段(1982—1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。

Intel公司推出的MCS-96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。

第四阶段(1990—):微控制器的全面发展阶段。

随着单片机在各个领域全面、深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机。

单片机是在集成电路芯片上集成了各种元件的微型计算机,这些元件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时/计数器、中断系统、时钟部件的集成和I/O接口电路。

相关文档
最新文档