版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、物理与机电工程学院课程设计报告课程名称: 电子系统课程设计 系 部: 物理与机电工程学院 专业班级: 电子信息工程08级 学生姓名: 学 号: 指导教师: 完成时间: 2011年10月25日 报告成绩: 评阅意见: 评阅教师 日期 基于52的无线收发系统物理与机电工程学院 电子信息工程学号:* 姓名:* 指导老师:*【摘 要】在我们的日常生活学习与工作当中,经常需要两个设备终端之间进行通信,但是设备一多造成使用导线也多,使我们的环境变得非常的杂乱,设备的移动也受到了限制,无线通信不再因使身边一大堆的线路显得杂乱无章,两个通信设备在一定范围内能随意移动。本次设计使用挪威nordic semico
2、nductor公司的无线收发芯片nrf2401,它把射频收发电路集成在一块芯片上,可在2.4ghz一2.50ghz频段范围内可靠通信,以宏晶科技生产的stc89c52为主控对他进行控制,并增加达拉斯公司的单总线式数字温度传感器ds18b20进行温度信息采集,用数码管和lcd1602分别作为两个终端的显示部分以及按键对其控制实现人机交互。【关键词】 无线通信 温度采集 目录一 设计总体思路,基本原理和框图.4二 单元电路设计.4三 总电路图及元器件清单.6四 安装与调试步骤.8五 故障分析与改进.9六 功能测试与分析.9七 结论与心得体会.9八 程序流程图与代码10九 参考文献24一、设计总体思
3、路、基本原理和框图总体框图如下图所示mcua独立键盘温度采集无线收发模块a液晶显示器数码管显示无线收发模块bmcub电磁波根据设计思路本次设计可分为a、b两个系统模块,互为主从机,甲乙可以双向通信。实现如下功能1、 甲可以显示时钟和由乙采集到的温度信息,可以向乙发送命令,使乙当前显示的是温度还是时钟。2、 乙可以按甲的命令显示时钟(与甲时钟需同步)或者温度信息,当乙接受了甲的命令时指示灯闪烁一次。3、 以上的信息传递及显示都是为了证明系统收发信息的有效性,不突出本系统实际应用。系统中主要有mcu、液晶显示、数码管显示、独立按键、温度采集、无线收发等单元。其中mcu为各单元的控制中心,无线收发模
4、块是实现两机通信的终端,显示部分用来观察系统工作状态及无线通信的成功与否。二、单元设计电路1主控mcu单元主控mcu如图1所示,a、b都采用stc89c52为主控mcu,晶振频率为12.0m,c3(10uf),r1(10k)组成上电复位电路。 图12液晶显示单元液晶显示模块如图2所示,采用字符型液晶1602,其具有操作简单显示字符多特点,并接r0(104)进行对比度调节,p0为数据接口,p2.0,p2.1,p3.2为控制线。 图2 图3 图43数码管显示单元如图3所示,数码管采用四位一体的共阴数码管,由于单片机的i/o输出电流较小,故采用三极管进行放大驱动,当位选为高时三极管饱和导通,对应位的
5、数码管选中。4独立按键单元如图4,独立按键用来对系统工作控制,例如调时间,发命令等作用。5温度采集单元温度采集单元采用达拉斯公司生产的数字温度传感器ds18b20进行数据采集,其采用单总线数据传输,具有硬件简单的优势,而且数据采集周期短,精度高,量程大,可以达到室温计的要求,其数据总线与p2.5相接。6无线收发单元无线收发单元采用2.4ghz单片高速2mbps无线收发芯片nrf24l01,nrf2401是挪威nordic semiconductor公司的产品,它把射频收发电路集成在一块芯片上,可以用mcu模拟spi通信协议实现数字传输。通过编程,nrf2401芯片的射频工作频率和输出信号的功率
6、等参量可以非常方便地调节。无线收发芯片nrf2401具有以下功能: 125个工作频道,工作频道之间的转换时间小于200us 无线通信数据具有地址检测和循环冗余(cyclicredundancy check,,crc)检查。 信号的调制方式为频移键控(fsk) 最大数据传输速率1mbps 最大输出功率0db 独特的shock burst tm射频信号发射模式。该模式降低平均发射功率,降低对微控制器数据传输速率的要求。 接收灵敏度93dbm。 独特的duoceivert“接收模式。该模式支持两个不同工作频道的信号同时接收。 工作电压范围:1.9v一3.6v;具有正常、旁路和掉电3种供电模式。 图5
7、三、总电路图及元件清单1、总原理图如图6所示图62、pcb图如图7所示图73、元器件清单元件名称主要参数数量元件名称主要参数数量lcd16021个电解电容0.1uf2个mcustc89c522个10uf6个47uf2个芯片座dip402个瓷片电容30pf4个lm11173.3v2个1044个晶振12.0m2个定值电阻10k4个数码管四位共阴1个1k20个按键6个2208个三极管90134个排针3排电位器1041个排插1排无线模块8脚2块温度传感器ds18b201个四、安装与调试步骤印制正确的电路板,打好孔,先将比较矮的元器件焊上,不耐温的选择在最后焊接,芯片先放管座,逐个管脚焊接,整个板焊好后
8、才把芯片插上,液晶先插排针,也要等到整个板焊接好后才插上,晶振、蜂鸣器和传感器元件先焊圆柱排孔,在插上,不要直接焊接,以免焊接时损坏,焊接时一定要按正确的方式焊接以避免虚焊,焊好了后下载程序,接通电源,触摸芯片看看是否发热,调整液晶的对比度,然后对照任务书,看能不能达到任务书所要求的性能,如不能达到检查电路以及程序。安装后如图8所示。图8五、故障分析与改进在一开始刚下进程序时并没用达到想象中的效果,a机的液晶屏不显示数据,只有背光亮,于是我就调节了对比度,调节过程中还是不会显示数据,只是在液晶上显示出一些黑格,每个字符都是全黑,可以知道硬件出问题了,特别是液晶模块部分,于是我就开始用万用表检查
9、是否短路和断路,在液晶部分有个地方布线比较密集,而且线比较细,是最容易发生断路和短路的地方,检查之后还是没查出问题,于是再去检查别的还是没出来,最后还是回到液晶部分,终于发现有个管脚虚焊了,于是对每个排针加固了一遍,再次上电便达到了想要的效果,液晶显示出了文字,然后再测试按键,还好比较顺利,a机的硬件部分算是完成了,再测试b机,开始数码管有一个段不亮,对其焊点加固之后就亮了,加上温度测试程序,硬件也算是完成,最后是繁琐的软件调试,由于有两个模块,同时对其调试特别麻烦,一开始只能单方向通信,很久后才发现地址配置有问题,最后终于成功了,系统一切工作正常。六、功能测试与分析(1)下面是所设计的功能列
10、表1、按s1,a机向b机发送命令,使b显示温度,并且发回当前温度值给a机显示出来。2、按s2,a机向b机发送命令,使b显示时钟,并且和a机同步。3、s3,s4,s5配合调整时钟、万年历,s3为调节位置选择按键,s4为数值加按键,s5为数值减按键,万年历支持闰年自动调整。4、按s6,a机显示的温度随b机变化而变化,再次按s6,停止这项功能。(2)实际功能进行测试 上电之后,a机显示万年历时钟,不显示温度,b机显示时钟,但是与a机不同;按s2,b机便显示与a机同步的时钟;再按s1,b机显示当前温度,并发一次当前温度信息给a机显示;按s6,b机不停的给a机发温度信息并实时显示;调节s3、s4、s5可
11、正确调节万年历与时钟。七、结论与心得体会从开始设计到设计结束花了两个星期的时间,前一周主要是设计方案、画板制板,第二个星期开始做程序部分,虽然程序不太长,但是经验少、水平有限,在这个上面还是花了不少的时间,加上硬件做的也有点问题,在联调的时候比较麻烦。通过这次设计能使我学到很多的东西,提高了硬件电路设计的能力、程序设计的能力以及调试的能力。硬件设计要有很多的基础知识,电路基础、模电、数电、单片机、protel等,这都是我们之前学过的专业基础课,这次设计我们都用上了,使我们对之前学过的知识进行应用及巩固;程序设计使用c语言,学单片机之前不懂得c学来有什么用,只知道要应付考试,现在懂得了c的重要性
12、,而且还要学会结合实际的硬件进行软硬结合编程;最后调试可以说是最难的一个步骤了,是最考验一个人的耐性的时候,由于做板的工艺条件不是很好,一旦出问题,要一个一个模块的去检查,硬件检查完了还要检查程序,这个是在书本上学不到的,只有自己去经历、去做才会领悟到这些东西,总结出一些经验,以后可以利用自己之前的经验去解决问题,做多了自然就会掌握很多的调试技巧。作品调试出来后会有很大的成就感,使自己更喜欢做这些事情。经过这次设计,虽然我们很忙,感觉非常的累,头脑总是处于疲劳状态,但是我觉得很值得,因为我学到了很多东西,很多在平常学不到的在这次设计中我学到了。这次设计比之前的实训更有成就感,这次做出来的作品相
13、比以前更加的智能化,不会像以前做的那么的单调,无趣。通过这次使我更加喜欢了这个专业,对这些东西增加了兴趣,对我以后的学习增加了动力,我将会更加的努力,学习好这个专业领域的更多的知识,为以后的工作铺路。八、程序流程图与代码(1)流程图a机流程图液晶初始化主程序开始无线模块初始化结束timer0中断开始结束定时器0初始化按键扫描时钟更新发送温度信息中断返回判断中断标志sendflag为1?接收中断开始读取接收到的数据更新液晶显示y中断返回结束nb机流程图led闪烁读取一次温度信息主程序开始无线模块初始化结束timer0中断开始结束定时器0初始化数码管扫描时钟更新中断返回判断中断标志rcv为1?接收
14、中断开始读取接收到的数据判断接收到的命令置位rcv结束ny显示时钟并与a机同步显示温度发回温度信息(2)程序代码a机代码#include <reg52.h>#define uchar unsigned char#define uint unsigned int/*nrf24l01端口定义*sbit miso=p35;sbit mosi=p33;sbitsck =p36;sbitce =p37;sbitcsn=p34;/*按键*sbits1=p10;sbits2=p11;sbits3=p12;sbits4=p13;sbits5=p14;sbits6=p15; /*液晶控制*sbit
15、lcdrs=p20;sbit lcdrw=p21;sbit lcden=p22;/*nrf24l01*#define tx_adr_width 5 / 5 uints tx address width 发送地址的宽度#define rx_adr_width 5 / 5 uints rx address width 接收地址的宽度#define tx_pload_width 4 / 4 uints tx payload 发送数据宽度#define rx_pload_width 4 / 4 uints rx payloaduchar const a_adrtx_adr_width= 0x34,0x
16、43,0x10,0x10,0x01;/a机地址uchar const b_adrrx_adr_width= 0x34,0x43,0x10,0x10,0x02;/b机地址/*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指令
17、#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
18、/ 发射速率、功耗功能设置#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接
19、收数据地址#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栈入栈出状态寄存器设置/*uchar bdata
20、 sta; /状态标志sbitrx_dr=sta6;sbittx_ds=sta5;sbitmax_rt=sta4;uchar code table="0123456789.-c:" /写液晶对应ascll码/*/*延时函数/*/*延时x毫秒*/void delayms(uint x) uchar y; for(;x>0;x-) for(y=111;y>0;y-); void write_com(uchar com) /向液晶写指令函数 lcdrs=0;p0=com;delayms(1);lcden=1;delayms(1);lcden=0;void write_
21、data(uchar date) /向液晶写数据函数lcdrs=1;p0=date;delayms(1);lcden=1;delayms(1);lcden=0; void init() /液晶初始化函数 lcdrw=0;lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);/*/*函数:uint spi_rw(uint uchar)/*功能:nrf24l01的spi读写时序/*/uchar spi_rw(uchar date)uint bit_ctr; for(bit_ctr=0;bit_ctr<8
22、;bit_ctr+) / output 8-bit mosi = (date & 0x80); / output 'date', msb to mosidate = (date << 1); / shift next bit into msb.sck = 1; / set sck high.上升沿给出数据date |= miso; / capture current miso bitsck = 0; / .then set sck low again 下降沿读回数据 return(date); / return read date/*/*函数:uchar s
23、pi_read(uchar reg)/*功能:nrf24l01的spi读时序 reg为寄存器地址/*/uchar spi_read(uchar reg)uchar reg_val;csn = 0; / csn low, initialize spi communication.spi_rw(reg); / select register to read from.reg_val = spi_rw(0); / .then read registervaluecsn = 1; / csn high, terminate spi communicationreturn(reg_val); / ret
24、urn register value/*/*功能:nrf24l01写寄存器函数/*/void spi_rw_reg(uchar reg, uchar value)csn = 0; / csn low, init spi transactionspi_rw(reg); / select registerspi_rw(value); / .and write value to it.csn = 1; / csn high again/*/*函数:uint spi_read_buf(uchar reg, uchar *pbuf, uchar uchars)/*功能: 用于读数据,reg:为寄存器地址
25、,pbuf:为待读出数据地址,uchars:读出数据的个数/*/uchar spi_read_buf(uchar reg, uchar *pbuf, uchar uchars)uchar status,uchar_ctr;csn = 0; / set csn low, init spi tranactionstatus = spi_rw(reg); / select register to write to and read status ucharfor(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr+)pbufuchar_ctr = spi_rw(0);
26、 / csn = 1; return(status); / return nrf24l01 status uchar/*/*函数:uint spi_write_buf(uchar reg, uchar *pbuf, uchar uchars)/*功能: 用于写数据:为寄存器地址,pbuf:为待写入数据地址,uchars:写入数据的个数/*/void spi_write_buf(uchar reg, uchar *pbuf, uchar uchars)uint uchar_ctr;csn = 0; /spi使能 spi_rw(reg); for(uchar_ctr=0; uchar_ctr<
27、;uchars; uchar_ctr+) /spi_rw(*pbuf+);csn = 1; /关闭spi/*/*nrf24l01初始化/*/void init_nrf24l01(void) ce=0; / chip enable csn=1; / spi disable sck=0; / spi_write_buf(write_reg + tx_addr, a_adr, tx_adr_width); / 写本地地址spi_write_buf(write_reg + rx_addr_p0, b_adr, rx_adr_width); / 写接收端地址spi_rw_reg(write_reg +
28、en_aa, 0x01); / 频道0自动ack应答允许spi_rw_reg(write_reg + en_rxaddr, 0x01); / 允许接收地址只有频道0,如果需要多频道可以参考page21 spi_rw_reg(write_reg + rf_ch, 0); / 设置信道工作为2.4ghz,收发必须一致spi_rw_reg(write_reg + rx_pw_p0, rx_pload_width); /设置接收数据长度,本次设置为32字节spi_rw_reg(write_reg + rf_setup, 0x07); /设置发射速率为1mhz,发射功率为最大值0db/*/*函数:voi
29、d nrf24l01_txpacket(unsigned char * tx_buf)/*功能:发送 tx_buf中数据/*/void nrf24l01_txpacket(unsigned char * tx_buf)ce=0;/standby i模式spi_write_buf(write_reg + rx_addr_p0, a_adr, tx_adr_width); / 装载接收端地址 此时是接受应答信号spi_write_buf(wr_tx_pload, tx_buf, tx_pload_width); / 装载数据spi_rw_reg(write_reg + config, 0x3e);
30、 / irq收发完成中断响应,16位crc,主发送ce=1; /置高ce,激发数据发送delayms(1); / 大于10us/*/*函数:void setrx_mode(void)/*功能:数据接收配置 /*/void setrx_mode(void)ce=0;spi_rw_reg(write_reg + config, 0x3f); / irq收发完成中断响应,16位crc,主接收 spi_write_buf(write_reg + rx_addr_p0, b_adr, rx_adr_width); / 写接收端地址ce = 1; delayms(1);/大于130us/*中断与定时器0初
31、始化*void init_timer0() tmod=0x01; th0=(65536-50000)>>8; tl0=65536-50000; ea=1; et0=1; tr0 = 1; it0=1; /触发方式为负跳变触发ex0 = 1;uchar hour=23,min=59,sec=50,month=10,day=28; uint year=2011;/*主函数*uchar txbuf4=0; / uchar rxbuf4=0;uchar rcv = 0;uchar bai,shi,ge,run;uchar weizhi=0,sendflag=0;/*中断处理*/void n
32、rf24l01_int(void) interrupt 0 /中断说明有数据接收到或其他中断源 ex0=0;sta=spi_read(status);/ 读取状态寄存其来判断数据接收状况if(rx_dr) /接收到数据 ce = 0; / 进入待机模式读数据spi_read_buf(rd_rx_pload,rxbuf,tx_pload_width);/ read receive payload from rx_fifo buffer spi_rw_reg(write_reg+status,sta);/清除中断标志 bai = rxbuf1; shi = rxbuf2; ge = rxbuf3;
33、 write_com(0x80+0x0a); write_data(tablebai); write_data(tableshi); write_data(table10); write_data(tablege); write_data(0xdf); write_data(table12); ce = 1; ex0=1; uchar num=0;void timer0() interrupt 1 th0=(65536-50000)>>8; tl0=65536-50000; num+; if(num>=20) num=0; sec+; if(sec>=60) sec=0
34、; min+; if(min>=60) min=0; hour+; if(hour>=24) hour=0; day+; switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12:if(day>=32) day=1; month+; break; case 4: case 6: case 9: case 11: if(day=31) day=1; month+; break; case 2:if(run) if(day=30) day=1; month+; else if(day=29) da
35、y=1; month+; break; if(month>=13) month=1; year+; write_com(0x80+0x43); write_data(tableyear/1000); write_data(tableyear%1000/100); write_data(tableyear%100/10); write_data(tableyear%10); if(year%4)=0) run=1; else run=0; write_com(0x80+0x48); write_data(tablemonth/10); write_data(tablemonth%10); write_com(0x80+0x4b); write_data(tableday/10); write_data(tableday%10); write_com(0x80+0x00); write_data(tablehour/10); write_data(tablehour%10); write_com(0x80+0x03); write_data(tabl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省宁波市九校2024-2025学年高一上学期期末联考地理试卷( 含答案)
- 2024-2025学年云南省昆明市盘龙区三年级(上)期末数学试卷(含答案)
- 08年到11年自考合同法真题及答案
- 语文-山东省2025年1月济南市高三期末学习质量检测济南期末试题和答案
- 2024电机技术培训与技术支持合同3篇
- 2024版商业物业验收接管协议范例版
- 2024版猎头业务合作合同简化版版B版
- 福建省南平市来舟中学高三地理联考试卷含解析
- 中药天花粉简介
- 2024项目委托咨询服务协议
- JGJ/T235-2011建筑外墙防水工程技术规程
- 残疾军人新退休政策
- T-HNKCSJ 002-2023 河南省地源热泵系统工程技术规范
- 人教版数学三年级下册《简单的小数加、减法》说课稿(附反思、板书)课件
- 渔业资源基本术语-编制说明
- 酒店住宿水单模板-皇冠假日
- 中医优势病种优化方案及总结
- 春节期间值班值守方案
- 2021-2022学年贵州省贵阳市花溪区人教版五年级上册期末测试数学试卷
- 基础写作(小学教育专业)全套教学课件
- 户口未婚改已婚委托书
评论
0/150
提交评论