(论文)基于stc89c52和nrf24l01篮球24秒倒计时论文最新优秀毕业论文资料搜集呕血奉献_第1页
(论文)基于stc89c52和nrf24l01篮球24秒倒计时论文最新优秀毕业论文资料搜集呕血奉献_第2页
(论文)基于stc89c52和nrf24l01篮球24秒倒计时论文最新优秀毕业论文资料搜集呕血奉献_第3页
(论文)基于stc89c52和nrf24l01篮球24秒倒计时论文最新优秀毕业论文资料搜集呕血奉献_第4页
(论文)基于stc89c52和nrf24l01篮球24秒倒计时论文最新优秀毕业论文资料搜集呕血奉献_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

首届电子设计大赛 A篮球24秒定时控制电路 学 校 院 系 物理与信息工程系 指导教师 基于STC89C52和NRF24L01篮球24秒倒计时 摘要:本作品以STC公司的89C52为开发平台,通过扩展必要的外围显示电路和无线控制模块,实现了篮球24秒倒计时牌的清零、启动、暂停、连续的功能,当24秒递减到零时,数码显示为零,同时扬声器发出报警声音,本设计的采用了NRF24L01无线模块,解决了裁判和计时员因沟通不畅可能造成的计时问题,是一款贴近实际生活,解决实际问题的设计。 关键词:单片机 STC 89c51 NRF24L01 无线控制 24秒倒计时 Based on the STC89C52 and NRF24L01 basketball24 seconds countdown Abstract: This works by STC 89C52 company for development platform, extended the necessary peripheral display circuit and wireless control module, basketball and 24 seconds of the countdown card, start-up, pause, cleared for functions, while 24 seconds to zero, zero, and digital display, the speaker alarm sound design adopted NRF24L01 wireless module, solved the referee and time-keeper for communication may cause problems of time, is a practical, design of solving practical problems.Keyword: STC89C52 NRF24L01 24 seconds countdown wireless(一)系统方案和比较1系统方案2方案比较(二)总体方案1.工作原理2电路原理图(三)硬件电路设计及单元电路分析1单片机电源电路2复位电路原理图3单片机STC89S52接口电路4无线收发电路NRF24L015发送控制端的按键和数码管及其驱动电路6接收显示端的大数码管驱动电路(四)软件设计(五)系统测试附录附1参考文献:附2电路原理图及PCB 2.1发射端原理图2.2接收端原理图2.3发射端PCB2.4接收端PCB附3程序清单3.1发射端源代码3.2接收端源代码(一)系统方案和比较1系统方案 方案一:采用555作为振荡电路,由74LS192、74LS48和七段共阴数码管构成计时电路,电路由秒脉冲发生器、计数器、译码器、显示电路、报警电路和辅助控制电路组成。方案二:采用altera公司的cycloneIIEP2C5T114 FPGA芯片作为处理器和控制器,通过扩展显示电路和无线控制控制电路来实现题目要求。方案三:以STC89S52作为核心,通过软件和硬件结合的方法构成计时电路、译码器、显示电路、报警电路、控制电路,并结合NRF24L01无线模块实现无线控制的要求。2方案比较通过比较以上三种方案,方案一成本最低,但元件数量多,无法扩展难;方案二使用元件最少,但成本较高,做PCB的器材一时难以购齐;方案三使用元件较少,成本较低,能通过简单扩展实现要求的全部功能,并能很好的实现与无线模块的衔接,技术资料丰富。综合以上分析,本设计采用方案三来实现。(二)总体方案1.工作原理以STC89S52作为核心芯片,通过软件编程和外围扩展结合的方法构成计时电路、译码器、显示电路、报警电路、控制电路,并结合NRF24L01无线模块实现无线控制的要求。2电路原理图12M晶振脉冲递减到零时报警数码管显示大数码管 显示12M晶振脉冲电源NRF24L01无线模块NRF24L01无线模块STC89S52单片机STC89S52单片机电源控制按键 发送控制 接收显示(三)硬件电路设计及单元电路分析1单片机电源电路负责将外部电源通过7805稳压后交给负载电路,并提供电源总开关及电源指示灯,当外部电源接通且S2闭合时发光二极管D1发光,指示“有电”。2复位电路原理图 其中RST接STC89S52的第9脚,当S1按下时系统复位,但数据不丢失。3单片机STC89S52接口电路 Y1为外接12M晶振 4无线收发电路NRF24L01 5发送控制端的按键和数码管及其驱动电路 R1R8为上拉电阻。6接收显示端的大数码管驱动电路(四)软件设计主控制芯片为STC89S52,无线收发由NRF24L01实现,由于处理器速度较快,所以采用c语言编程方便简单.软件流程图如下:模块初始化(数码管显示24)开始显示00启动?是清零?示数为0?开始倒计时(数码管示数递减)是否示数保持显示00,警告声响起是是恢复? 否显示24否暂停?是否否(五)系统测试考虑到该设计的实际应用,何其特点主要针对其遥控距离和延时进行了测试,数据如下:传输半径(m)延时(s)有障碍物8100.02无障碍物300.02结果分析:障碍物的存在会对本设计的传输距离造成一定影响,但考虑到其实际应用即便是810米的传输半径也是足以满足需要的,而0.02秒的延时主要来源于无线模块的反应延时,对实际应用影响不大。由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标,并扩展了无线控制功能,使得设计使用更加方便,更有实际应用前景。(六)总结这次竞赛锻炼了我们的动手能力,激发了我们的创新思维,培养了我们勇于面对困难克服困难的坚强意志和不懈的精神,使我们又一次体味到团队的力量和合作的重要性;更重要的是使我们深深的体会到理论结合实际的重要性,体会到知识的海洋是无穷无尽,激发我们去追求。总之,我们喜欢电子设计竞赛,感谢济宁学院团委、教务处、物理与信息工程系、电子应用研究所的各位老师给了我们这次锻炼的机会。 2009年12月10日附录附1参考文献:信号与系统,ALAN V.OPPENHEIM著,西安:西安交通大学出版社,1997年;模拟电子线路基础,吴运昌著,广州:华南理工大学出版社,2004年;数字电子技术基础,阎石著,北京:高等教育出版社,1997年;数据结构与算法,张晓丽等著,北京:机械工业出版社,2002年;单片机原理及应用,李建忠著,西安:西安电子科技大学,2002年; 附2电路原理图及PCB 2.1发射端原理图2.2接收端原理图2.3发射端PCB2.4接收端PCB附3程序清单3.1发射端源代码#include #include /*倒计时*#define uuint unsigned int#define uuchar unsigned charchar miao,pmiao;uuchar msw,mgw,pmsw,pmgw;uuchar count,clear,stop_contin,start;uuchar flag=1,flag1=0,beepbj,startbj=0;sbit key_clear=P20;sbit key_stop_contin=P21;sbit key_start=P22;/sbit key_pmiao=P23;sbit we1=P24;sbit we2=P25;sbit we3=P26;sbit we4=P27;sbit beep=P30;uuchar code tabledu=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90;void delay1(uuint z);void init();void display();void keyscan();/*/void daojishi()/函数keyscan();msw=miao/10;mgw=miao%10;pmsw=pmiao/10;pmgw=pmiao%10; display();if(startbj=1 & miao=0)TR0=0;startbj=0;/*/void delay1(uuint z)/延时函数uuint x,y;for(x=z;x0;x-)for(y=100;y0;y-);/*/void init()/预处理函数miao=24;pmiao=99;TH0=(65536-1000)/256; TL0=(65536-1000)%256;TMOD=0x01;EA=1;ET0=1;TR0=0;/*/void timer0() interrupt 1/定时器0TH0=(65536-1000)/256; TL0=(65536-1000)%256;count+;if(count=10)count=0;pmiao-;if(pmiao=-1)pmiao=99;miao-;if(miao=-1)miao=24;if(miao=0 & beepbj=1)beep=0;beepbj=0;/*/void display()/显示函数 P0=tabledupmsw; we3=0; delay1(2); we3=1; P0=tabledupmgw; we4=0; delay1(2); we4=1; P0=tabledumsw; we1=0; delay1(2); we1=1; P0=tabledumgw; we2=0; delay1(2); we2=1;/*/void keyscan()if(start=1)/启动start=0;flag+; if(flag=1)pmiao=99;miao=24;TR0=0;flag1=0;beep=1;if(flag=2)beepbj=1;TR0=1;flag=0;startbj=1;flag1=0;if(stop_contin=1 & miao!=0)/暂停/继续stop_contin=0;flag1+;if(flag1=1)TR0=0;if(flag1=2)TR0=1;flag1=0;if(clear=1)/清零clear=0;TR0=0;pmiao=0;miao=0;beep=1;flag=0;flag1=0;/*typedef unsigned char uchar;typedef unsigned char uint;/*NRF24L01端口定义*sbit MISO=P13;sbit MOSI=P14;sbitSCK =P12;sbitCE =P11;sbitCSN=P32;sbitIRQ=P33;/*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 20 / 20 uints TX payload#define RX_PLOAD_WIDTH 20 / 20 uints TX payloaduint const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01;/本地地址uint const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01;/接收地址/*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 Delay(unsigned int s)unsigned int i;for(i=0; is; i+);for(i=0; i0;n-)_nop_();/*void Delay(unsigned int s);void inerDelay_us(unsigned char n);void init_NRF24L01(void);uint SPI_RW(uint uchar);uchar SPI_Read(uchar reg);void SetRX_Mode(void);uint SPI_RW_Reg(uchar reg, uchar value);uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void nRF24L01_TxPacket(unsigned char * tx_buf);/*/*NRF24L01初始化/*/void init_NRF24L01(void)init(); inerDelay_us(100); CE=0; / chip enable CSN=1; / Spi disable SCK=0; SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); / 写本地地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 写接收端地址SPI_RW_Reg(WRITE_REG + 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/*/*函数:uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI写时序/*/uint SPI_RW(uint uchar)uint bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit MOSI = (uchar & 0x80); / output uchar, MSB to MOSIuchar = (uchar 1); / shift next bit into MSB.SCK = 1; / Set SCK high.uchar |= MISO; / capture current MISO bitSCK = 0; / .then set SCK low again return(uchar); / return read uchar/*/*函数:uchar SPI_Read(uchar reg)/*功能:NRF24L01的SPI时序/*/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); / return register value/*/*功能:NRF24L01读写寄存器函数/*/uint SPI_RW_Reg(uchar reg, uchar value)uint status;CSN = 0; / CSN low, init SPI transactionstatus = SPI_RW(reg); / select registerSPI_RW(value); / .and write value to it.CSN = 1; / CSN high againreturn(status); / return nRF24L01 status uchar/*/*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数/*/uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)uint 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_ctruchars;uchar_ctr+)pBufuchar_ctr = SPI_RW(0); / CSN = 1; return(status); / return nRF24L01 status uchar/*/*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数/*/uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)uint status,uchar_ctr;CSN = 0; /SPI使能 status = SPI_RW(reg); for(uchar_ctr=0; uchar_ctruchars; uchar_ctr+) /SPI_RW(*pBuf+);CSN = 1; /关闭SPIreturn(status); / /*/*函数:void SetRX_Mode(void)/*功能:数据接收配置 /*/void SetRX_Mode(void)CE=0;SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ收发完成中断响应,16位CRC,主接收CE = 1; inerDelay_us(130);/*/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)/*功能:数据读取后放如rx_buf接收缓冲区中/*/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) unsigned char revale=0;sta=SPI_Read(STATUS);/ 读取状态寄存其来判断数据接收状况if(RX_DR)/ 判断是否接收到数据 CE = 0; /SPI使能SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/ read receive payload from RX_FIFO bufferrevale =1;/读取数据完成标志SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志return revale;/*/*函数:void 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, TX_ADDRESS, TX_ADR_WIDTH); / 装载接收端地址SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); / 装载数据SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / IRQ收发完成中断响应,16位CRC,主发送CE=1; /置高CE,激发数据发送inerDelay_us(10);/*主函数*void main(void)unsigned char TxBuf20=0;unsigned char RxBuf20=0; init_NRF24L01();while(1) if(key_start=0 ) delay1(20);if(key_start=0 ) while(!key_start); start=1; TxBuf1 = 1 ;/先发地址和指令nRF24L01_TxPacket(TxBuf);/ Transmit Tx buffer dataTxBuf1 = 0x00;Delay(1000); if(key_stop_contin=0 ) delay1(20);if(key_stop_contin=0 ) while(!key_stop_contin); stop_contin=1; TxBuf2 = 0x02 ;/先发地址和指令nRF24L01_TxPacket(TxBuf);/ Transmit Tx buffer dataTxBuf2 = 0x00;Delay(1000); if(key_clear=0 ) delay1(20);if(key_clear=0) while(!key_clear); clear=1; TxBuf3 = 0x03 ;/先发地址和指令nRF24L01_TxPacket(TxBuf);/ Transmit Tx buffer dataTxBuf3 = 0x00;Delay(1000); daojishi();SetRX_Mode();/进入接收状态nRF24L01_RxPacket(RxBuf);RxBuf1=0;RxBuf2=0;RxBuf3=0;3.2接收端源代码#include#define uint unsigned int#define uchar unsigned charchar miao;uchar msw,mgw;uchar count;uchar flag=1,flag1=0,beepbj,startbj=0;sbit key_clear=P20;sbit key_stop=P21;sbit key_start=P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论