(論文)基于stc89c52和nrf24l01籃球24秒倒計時論文最新優(yōu)秀畢業(yè)論文資料搜集嘔血奉獻_第1頁
(論文)基于stc89c52和nrf24l01籃球24秒倒計時論文最新優(yōu)秀畢業(yè)論文資料搜集嘔血奉獻_第2頁
(論文)基于stc89c52和nrf24l01籃球24秒倒計時論文最新優(yōu)秀畢業(yè)論文資料搜集嘔血奉獻_第3頁
(論文)基于stc89c52和nrf24l01籃球24秒倒計時論文最新優(yōu)秀畢業(yè)論文資料搜集嘔血奉獻_第4頁
(論文)基于stc89c52和nrf24l01籃球24秒倒計時論文最新優(yōu)秀畢業(yè)論文資料搜集嘔血奉獻_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

首屆電子設計大賽 A籃球24秒定時控制電路 學 校 院 系 物理與信息工程系 指導教師 基于STC89C52和NRF24L01籃球24秒倒計時 摘要:本作品以STC公司的89C52為開發(fā)平臺,通過擴展必要的外圍顯示電路和無線控制模塊,實現(xiàn)了籃球24秒倒計時牌的清零、啟動、暫停、連續(xù)的功能,當24秒遞減到零時,數(shù)碼顯示為零,同時揚聲器發(fā)出報警聲音,本設計的采用了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(一)系統(tǒng)方案和比較1系統(tǒng)方案2方案比較(二)總體方案1.工作原理2電路原理圖(三)硬件電路設計及單元電路分析1單片機電源電路2復位電路原理圖3單片機STC89S52接口電路4無線收發(fā)電路NRF24L015發(fā)送控制端的按鍵和數(shù)碼管及其驅(qū)動電路6接收顯示端的大數(shù)碼管驅(qū)動電路(四)軟件設計(五)系統(tǒng)測試附錄附1參考文獻:附2電路原理圖及PCB 2.1發(fā)射端原理圖2.2接收端原理圖2.3發(fā)射端PCB2.4接收端PCB附3程序清單3.1發(fā)射端源代碼3.2接收端源代碼(一)系統(tǒng)方案和比較1系統(tǒng)方案 方案一:采用555作為振蕩電路,由74LS192、74LS48和七段共陰數(shù)碼管構成計時電路,電路由秒脈沖發(fā)生器、計數(shù)器、譯碼器、顯示電路、報警電路和輔助控制電路組成。方案二:采用altera公司的cycloneIIEP2C5T114 FPGA芯片作為處理器和控制器,通過擴展顯示電路和無線控制控制電路來實現(xiàn)題目要求。方案三:以STC89S52作為核心,通過軟件和硬件結合的方法構成計時電路、譯碼器、顯示電路、報警電路、控制電路,并結合NRF24L01無線模塊實現(xiàn)無線控制的要求。2方案比較通過比較以上三種方案,方案一成本最低,但元件數(shù)量多,無法擴展難;方案二使用元件最少,但成本較高,做PCB的器材一時難以購齊;方案三使用元件較少,成本較低,能通過簡單擴展實現(xiàn)要求的全部功能,并能很好的實現(xiàn)與無線模塊的銜接,技術資料豐富。綜合以上分析,本設計采用方案三來實現(xiàn)。(二)總體方案1.工作原理以STC89S52作為核心芯片,通過軟件編程和外圍擴展結合的方法構成計時電路、譯碼器、顯示電路、報警電路、控制電路,并結合NRF24L01無線模塊實現(xiàn)無線控制的要求。2電路原理圖12M晶振脈沖遞減到零時報警數(shù)碼管顯示大數(shù)碼管 顯示12M晶振脈沖電源NRF24L01無線模塊NRF24L01無線模塊STC89S52單片機STC89S52單片機電源控制按鍵 發(fā)送控制 接收顯示(三)硬件電路設計及單元電路分析1單片機電源電路負責將外部電源通過7805穩(wěn)壓后交給負載電路,并提供電源總開關及電源指示燈,當外部電源接通且S2閉合時發(fā)光二極管D1發(fā)光,指示“有電”。2復位電路原理圖 其中RST接STC89S52的第9腳,當S1按下時系統(tǒng)復位,但數(shù)據(jù)不丟失。3單片機STC89S52接口電路 Y1為外接12M晶振 4無線收發(fā)電路NRF24L01 5發(fā)送控制端的按鍵和數(shù)碼管及其驅(qū)動電路 R1R8為上拉電阻。6接收顯示端的大數(shù)碼管驅(qū)動電路(四)軟件設計主控制芯片為STC89S52,無線收發(fā)由NRF24L01實現(xiàn),由于處理器速度較快,所以采用c語言編程方便簡單.軟件流程圖如下:模塊初始化(數(shù)碼管顯示24)開始顯示00啟動?是清零?示數(shù)為0?開始倒計時(數(shù)碼管示數(shù)遞減)是否示數(shù)保持顯示00,警告聲響起是是恢復? 否顯示24否暫停?是否否(五)系統(tǒng)測試考慮到該設計的實際應用,何其特點主要針對其遙控距離和延時進行了測試,數(shù)據(jù)如下:傳輸半徑(m)延時(s)有障礙物8100.02無障礙物300.02結果分析:障礙物的存在會對本設計的傳輸距離造成一定影響,但考慮到其實際應用即便是810米的傳輸半徑也是足以滿足需要的,而0.02秒的延時主要來源于無線模塊的反應延時,對實際應用影響不大。由于系統(tǒng)架構設計合理,功能電路實現(xiàn)較好,系統(tǒng)性能優(yōu)良、穩(wěn)定,較好地達到了題目要求的各項指標,并擴展了無線控制功能,使得設計使用更加方便,更有實際應用前景。(六)總結這次競賽鍛煉了我們的動手能力,激發(fā)了我們的創(chuàng)新思維,培養(yǎng)了我們勇于面對困難克服困難的堅強意志和不懈的精神,使我們又一次體味到團隊的力量和合作的重要性;更重要的是使我們深深的體會到理論結合實際的重要性,體會到知識的海洋是無窮無盡,激發(fā)我們?nèi)プ非?。總之,我們喜歡電子設計競賽,感謝濟寧學院團委、教務處、物理與信息工程系、電子應用研究所的各位老師給了我們這次鍛煉的機會。 2009年12月10日附錄附1參考文獻:信號與系統(tǒng),ALAN V.OPPENHEIM著,西安:西安交通大學出版社,1997年;模擬電子線路基礎,吳運昌著,廣州:華南理工大學出版社,2004年;數(shù)字電子技術基礎,閻石著,北京:高等教育出版社,1997年;數(shù)據(jù)結構與算法,張曉麗等著,北京:機械工業(yè)出版社,2002年;單片機原理及應用,李建忠著,西安:西安電子科技大學,2002年; 附2電路原理圖及PCB 2.1發(fā)射端原理圖2.2接收端原理圖2.3發(fā)射端PCB2.4接收端PCB附3程序清單3.1發(fā)射端源代碼#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()/函數(shù)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)/延時函數(shù)uuint x,y;for(x=z;x0;x-)for(y=100;y0;y-);/*/void init()/預處理函數(shù)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()/顯示函數(shù) 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)/暫停/繼續(xù)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 / 讀取接收數(shù)據(jù)指令#define WR_TX_PLOAD 0xA0 / 寫待發(fā)數(shù)據(jù)指令#define FLUSH_TX 0xE1 / 沖洗發(fā)送 FIFO指令#define FLUSH_RX 0xE2 / 沖洗接收 FIFO指令#define REUSE_TX_PL 0xE3 / 定義重復裝載數(shù)據(jù)指令#define NOP 0xFF / 保留/*SPI(nRF24L01)寄存器地址*#define CONFIG 0x00 / 配置收發(fā)狀態(tài),CRC校驗模式以及收發(fā)狀態(tài)響應方式#define EN_AA 0x01 / 自動應答功能設置#define EN_RXADDR 0x02 / 可用信道設置#define SETUP_AW 0x03 / 收發(fā)地址寬度設置#define SETUP_RETR 0x04 / 自動重發(fā)功能設置#define RF_CH 0x05 / 工作頻率設置#define RF_SETUP 0x06 / 發(fā)射速率、功耗功能設置#define STATUS 0x07 / 狀態(tài)寄存器#define OBSERVE_TX 0x08 / 發(fā)送監(jiān)測功能#define CD 0x09 / 地址檢測 #define RX_ADDR_P0 0x0A / 頻道0接收數(shù)據(jù)地址#define RX_ADDR_P1 0x0B / 頻道1接收數(shù)據(jù)地址#define RX_ADDR_P2 0x0C / 頻道2接收數(shù)據(jù)地址#define RX_ADDR_P3 0x0D / 頻道3接收數(shù)據(jù)地址#define RX_ADDR_P4 0x0E / 頻道4接收數(shù)據(jù)地址#define RX_ADDR_P5 0x0F / 頻道5接收數(shù)據(jù)地址#define TX_ADDR 0x10 / 發(fā)送地址寄存器#define RX_PW_P0 0x11 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P1 0x12 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P2 0x13 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P3 0x14 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P4 0x15 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P5 0x16 / 接收頻道0接收數(shù)據(jù)長度#define FIFO_STATUS 0x17 / FIFO棧入棧出狀態(tài)寄存器設置/*/*長延時*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,收發(fā)必須一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /設置接收數(shù)據(jù)長度,本次設置為32字節(jié)SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /設置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB/*/*函數(shù):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/*/*函數(shù):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讀寫寄存器函數(shù)/*/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/*/*函數(shù):uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于讀數(shù)據(jù),reg:為寄存器地址,pBuf:為待讀出數(shù)據(jù)地址,uchars:讀出數(shù)據(jù)的個數(shù)/*/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/*/*函數(shù):uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)/*/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); / /*/*函數(shù):void SetRX_Mode(void)/*功能:數(shù)據(jù)接收配置 /*/void SetRX_Mode(void)CE=0;SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / IRQ收發(fā)完成中斷響應,16位CRC,主接收CE = 1; inerDelay_us(130);/*/*函數(shù):unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)/*功能:數(shù)據(jù)讀取后放如rx_buf接收緩沖區(qū)中/*/unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) unsigned char revale=0;sta=SPI_Read(STATUS);/ 讀取狀態(tài)寄存其來判斷數(shù)據(jù)接收狀況if(RX_DR)/ 判斷是否接收到數(shù)據(jù) CE = 0; /SPI使能SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);/ read receive payload from RX_FIFO bufferrevale =1;/讀取數(shù)據(jù)完成標志SPI_RW_Reg(WRITE_REG+STATUS,sta); /接收到數(shù)據(jù)后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志return revale;/*/*函數(shù):void nRF24L01_TxPacket(unsigned char * tx_buf)/*功能:發(fā)送 tx_buf中數(shù)據(jù)/*/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); / 裝載數(shù)據(jù)SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / IRQ收發(fā)完成中斷響應,16位CRC,主發(fā)送CE=1; /置高CE,激發(fā)數(shù)據(jù)發(fā)送inerDelay_us(10);/*主函數(shù)*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 ;/先發(fā)地址和指令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 ;/先發(fā)地址和指令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 ;/先發(fā)地址和指令nRF24L01_TxPacket(TxBuf);/ Transmit Tx buffer dataTxBuf3 = 0x00;Delay(1000); daojishi();SetRX_Mode();/進入接收狀態(tài)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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論