资源描述
河南大学·物理与电子学院·开放实验室·单片机设计报告
河南大学物理与电子学院
开放实验室单片机设计报告
测温并24L01无线传输设计
设计人:开放实验室入室人员
15
目 录
0 前言 1
1 系统组成与功能 1
1.1系统组成 1
1.1.1 AT89C52单片机 1
1.1.2 18B20测温芯片 1
1.1.3 24L01模块 2
1.1.4 四位一体八段共阴数码管、无源蜂鸣器、74LS138 3
1.2 系统功能 6
1.3 系统功能扩充 6
2 系统原理 6
2.1无线发射仿真图 6
2.2 无线接收仿真图 7
2.3 实物照片 7
3 程序流程图 8
3.1 测温程序流程图 8
3.2 发射程序流程图 9
3.3 接收程序流程图 10
4 具体程序 11
4.1测温程序 11
4.2 发射板部分程序 11
4.3 接收板部分程序 13
5 主要元件清单 14
5.1 发射板其他主要元件 14
5.2 接收板其他主要元件 14
6 结论 15
7测温并无线收发心得 15
参考文献 15
测温并24L01无线传输
开放实验室入室人员
(河南大学物理与电子学院,河南 开封,475004)
0 前言
温度的测试技术已经成熟,已经满足了人们的大部分需求,然而在某些工作场合下,我们更想知道与自己不在一个地方的温度,以便进行温度调控,更好更方便地生产生活,因此,温度的传输就成为了我们要考虑的内容了。
此单片机项目设计中,我们就基于24L01模拟温度的无线传输,经过调试,试验,已经实现了预期功能,同时也实现了对生产生活中温度预警的模拟功能。
1 系统组成与功能
1.1 系统组成
本系统主要有AT89C52单片机、复位按键、无源蜂鸣器、18B20芯片、24L01模块、四位一体共阴8段数码管等元件组成。
1.1.1 AT89C52单片机
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),兼容标准MCS-51指令系统。
图1-1 单片机引脚图
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52
可以按照常规方法进行编程,但不可以在线
编程(S系列的才支持在线编程)。
引脚图如图1-1所示
1.1.2 18B20测温芯片
图1-2 18B20测温芯片
DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。DS18B20 共有三种形态的存储器资源:ROM 只读存储器,用于存放 DS18B20ID 编码; RAM 数据暂存器,用于内部计算和数据存取; EEPROM 非易失性, 记忆体,用于存放长期需要保存的数据.
1.1.3 24L01模块
NRF24L01是工作于2.4~2.5GHz世界通用的ISM频段的单片无线收发器芯片。无线收发器芯片包括:频率发生器、增强型SchockBurst模式控制器、功率放大器、晶体振荡器、调制器、解调器。输出功率、频道选择和协议的设置可以通过SPI接口进行设置.其拥有极低的电流消耗:当工作在发射模式下发射功率为-6dBm时电流消耗为9mA,接收模式为12.3mA。
图1-3
其引脚功能:
引脚
名称
引脚功能
描述
1
CE
数字输入
RX或TX模式选择
2
CSN
数字输入
SPI片选信号
3
SCK
数字输入
SPI时钟
4
MOSI
数字输入
从SPI数据输入脚
5
MISO
数字输出
从SPI数据输出脚
6
IRQ
数字输出
可屏蔽中断脚
7
VDD
电源
电源(+3V)
8
VSS
电源
接地(0V)
1.1.4 四位一体共阴数码管
图1-4
其引脚图为:
无源蜂鸣器
图1-5
无源蜂鸣器是蜂鸣器的一种,区别于有源蜂鸣器,无源蜂鸣器是内部不带振荡源的蜂鸣器,是一体化结构的电子讯响器,在电路中的图形符号位H或者HA。无源蜂鸣器是靠压电效应的原理来发声的,压电材料,一般常见的是各种压电陶瓷. 这种材料的特别之处在于,当电压作用于压电材料时,就会随电压和频率的变化产生机械变形.另一方面,当振动压电陶瓷时,则会产生电荷.就是说这种材料能把机械变形和电荷相互转化,压电式蜂鸣器里面的起振片,就是一种压电陶瓷.如上所述,要让它振动,除了压电陶瓷本身,还需要适当大小和频率变化的电压作用于压电陶瓷.压电式(有源)蜂鸣器内部带有多谐振荡器,可以产生 1.5—2.5kHZ 的电压信号. 由此压电式蜂鸣器才能发声。
74LS138 3-8译码器
图1-6
74LS138:当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
A、B、C
译码地址输入端
G1
选通端
/(G2A)、/(G2B)
选通端(低电平有效)
Y0-Y7
译码输出端(低电平有效)
1.2 系统功能
本设计的主要功能是用18B20测温传送至单片机中存储,在发射端数码管显示温度,并通过24L01发射模块无线传输,在一定距离内放置接收板利用接收模块进行接收,同时显示温度值。
1.2 系统功能扩充
本设计的主要功能扩充:实现报警功能 ,当所测温度超过预定值时,接收端的蜂鸣器报警提示;并且在发射端拥有七彩指示灯,当所测温度不发生变化时,指示灯会熄灭,以提示温度已恒定。
2 系统原理
本设计主要原理是单片机采集18B20测得的温度,同时将数据传给24L01的发射模块,并通过另一单片机控制24L01接收模块的接收,同时显示所测温度值。
2.1 18B20测温与24L01发射模块仿真图
说明:24L01无线模块不能实现真正的仿真,上图中的NRF24L01仅作示意,但是数码管能正常仿真
2.2 24L01接收模块仿真图
2.3 实物照片
测温并发射效果图,测温为12.2度。右下边带晶振的模块为收发模块。
接收信号并显示效果图,显示为12.2度,等于发射温度,实验成功。
3 程序流程图
发射板与接收板分别执行各自功能,各有各自的单片机控制,由24L01收发模块作为他们的关联。
3.1 测温程序流程图
开 始
初始化数码管
DB18B20复位
读取 温度
处理 温度
数码管显示温度2s
结 束
3.2发射端程序流程图
开 始
初 始 化
读取18B20的温度
处 理 温 度
温度存入24L0发射数组
数组值是否改变
24L01发射
数码管显示温度值
指示灯闪烁
是
否
结 束
3.3接收端程序流程图
开 始
初始化
24L01接收准备
24L01接收
接收数据存入数组
数码管显示
温度是否
大于20℃
蜂鸣器唱一首歌
是
否
唱歌定时时间是否到了
是
否
结 束
4 主要程序源代码
4.1 温度采集处理主要部分函数
#include "reg51.h"
……
/**************DS18B20复位函数****************/
ow_reset(void)
{·····};
/***********DS18B20写命令函数*************/
void write_byte(uchar val)
{·····};
/***********DS18B20读1字节函数*************/
uchar read_byte(void)
{····};
/*************读出温度函数*************/
read_temp()
{·····};
/**********温度数据处理函数***************/
work_temp()
{···};
main()
{···};
4.2 发送模块主要程序
#include "reg51.h"
/*NRF24L01初始化
void init_NRF24L01(void)
{···}; //程序太长不宜写在报告中,完整程序请
···· //联系QQ154401855(或154401856)下载
/***********主函数************/
main()
{
int f=0;
uchar a[3];
int t;
while(1)
{uchar t=0;
uchar i=1;
long int j=0;
Disdata=0xFF; //初始化端口
discan=0xff;
led=0;
for(h=0;h<4;h++){display[h]=0;} //开始显示"0000"
ow_reset();
init_NRF24L01() ;
write_byte(0xCC); //Skip ROM
write_byte(0x44); //发转换命令
if(f==0)
{
for(h=0;h<500;h++) {scan();}
f=1;
}///每次重新初始化,重新装载数据,最大限度地消除干扰 ,
//同时只有第一次初始化显示0000 再次初始化时数码管并不再显示0000
read_temp(); //读出DS18B20温度数据
work_temp(); //处理温度数据
i=display[0]; //把发射数组中的第1个数设为i
TxBuf[0]=i;
i=display[1]; //把发射数组中的第2个数设为i
TxBuf[1]=i;
i=display[2]; //把发射数组中的第3个数设为i
TxBuf[2]=i;
i=display[3]; //把发射数组中的第4个数设为i
TxBuf[3]=i;
if(a[0]==TxBuf[0]&&a[1]==TxBuf[1]&&a[2]==TxBuf[2]) ;
else
led=1; // 温度不变时指示灯不再闪烁,温度变化,指示灯开始闪烁
for(t=0;t<3;t++)
{ a[t]=TxBuf[t]; }
nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data 一次发完数组中的20个数
for(h=0;h<500;h++) {scan();} //显示温度2 s
}}
4.3接收端模块主要程序
void main(void)
{
long int j=0;
char k;
p=1;
for(h=0;h<4;h++){RxBuf[h]=0;} //开始显示"0000"
init_NRF24L01() ; //2401初始化
Delay(2000);
while(1)
{ SetRX_Mode();
nRF24L01_RxPacket(RxBuf); //一次收完20个数,放在RxBuf[20]中//接收到数据
for(k=0;k<4;k++)
{Disdata=dis_7[RxBuf[k]];
if(k==1) { DIN=1;}
discan=scan_con[k];
delay1(90);
discan=0xff;
} //显示温度2 s
if(RxBuf[2]>=2)
{ InitialSound();
/* Play(Music_tomorrow,0,3,360) ;
Delay1ms(500); */
Play(Music_Girl,0,3,360);
Delay1ms(500);
/* Play(Music_Same,0,3,360);
Delay1ms(500); */ //去掉隐藏符号即可播放
/* Play(Music_Two,0,3,360);
Delay1ms(500); */}// 高于20℃播放音乐
} }
5 主要元件清单
原件名称
数量
万用板(9cm×15cm)
2
STC89C52单片机
2
74LS138
2
24L01接收模块
1
24L01发送模块
1
四位一体共阴数码管
2
AMS1117-3.3稳压芯片
2
5.1 发射板其他元件
原件名称
数量
18B20测温芯片
1
晶振12M,
1
上拉电阻
1
复位按键
1
七彩发光二极管指示灯
1
电容30pf
2
电阻(10k,4.7k)
各一个
5.2 接收板其他元件
原件名称
数量
晶振12M,
1
上拉电阻
1
复位按键
1
无源蜂鸣器
1
电容30pf
2
电阻(10k,4.7k)
各一个
6 结论
通过18B20测温并由单片机控制,利用24L01实现无线传输,能够很准确将所测温度传输到几十米外的距离,可以用于某些不利于近距离观测的生产生活中。
7 此项目设计的心得
项目设计中,感受最深的便是程序的修改,由原始程序18B20测温到与24L01测试程序融合,是此次项目设计的核心所在,软件是一个企业的灵魂,同样项目设计软件部分也起着类似的作用。首先从温度的数码管显示说起,数码管的引脚与单片机引脚连接的不同,控制数码管段选或者位选的I/O口就不同,所以在修改程序过程中这点是最容易忽略的;其次,当今社会是一个很精细化的社会,分工明确,同时另一种能力也就显得尤为重要——整合资源,我们可以实现随机的发送一个数据,但如何发送多位数据,以及数据的存取便是我们当思考的问题;最后,如何判断错误是出现在软件部分还是硬件部分,也同样是一种能力。
8 参考文献
[1]李朝青,单片机原理及接口技术(第3版),北京航空航天大学出版社
[2] 阎石.数字电子技术基础[M],北京:高等教育出版社,1998。
[3]
展开阅读全文