版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 無線投票器的設計</b></p><p> 摘要:本設計以直流電壓源為核心,STC89C52RC增強型單片機為主控制器。單片機系統(tǒng)是無線投票器的核心,它通過軟件的運行來控制整個系統(tǒng)的工作,從而完成設定的功能。通過三個數字鍵盤來進行投票,在投票結束之后,經過編碼的投票信息由NRF24L01無線模塊發(fā)射出去。在接收端,可由液晶屏LCD1602顯示實際投票結果。實際
2、結果表明,本系統(tǒng)實際應用于投票領域。</p><p> 關鍵詞:無線;投票器;單片機;NRF24L01;STC89C52RC</p><p> The design of wireless voting device</p><p> Abstract: In this design, the DC voltage source is the core, th
3、e enhanced MCU STC89C52RC is the master. MCU is the core of the wireless voting device, it controls the working of the whole system through the running of the software, so it could achieve the scheduled goal. We could ca
4、st a vote through three digital buttons, the voted message will be transmitted by the wireless module NRF24L01 after the vote ends. In the receiver module, the LCD screen will show the result of the vote. It is proved<
5、;/p><p><b> 目 錄</b></p><p><b> 1.引言1</b></p><p> 2.設計要求及方案論證2</p><p> 2.1 設計要求2</p><p> 2.2 設計方案及論證2</p><p>
6、; 2.2.1 控制模塊方案及論證2</p><p> 2.2.2 顯示模塊方案及論證2</p><p> 3.系統(tǒng)的硬件電路設計4</p><p> 3.1 主控制器模塊的設計4</p><p> 3.2 NRF24L01無線模塊的設計5</p><p> 3.3 按鍵控制模塊的設計
7、7</p><p> 3.4 液晶顯示模塊的設計8</p><p> 3.4.1 LCD1602主要管腳介紹8</p><p> 3.4.2 LCD1602控制指令9</p><p> 3.4.3 液晶顯示模塊設計10</p><p> 3.4.4 讀寫控制時序表10</p>
8、<p> 3.4.5 LCD1602的一般初始化過程11</p><p> 3.4.6 LCD1602與單片機連接圖11</p><p> 3.5 振蕩電路設計模塊的設計12</p><p> 3.6 晶振電路與復位電路設計12</p><p> 3.6.1 晶振電路12</p><
9、;p> 3.6.2 復位電路13</p><p> 3.7 電源模塊的設計14</p><p> 4.系統(tǒng)軟件設計16</p><p> 4.1 用C語言開發(fā)單片機的優(yōu)勢16</p><p> 4.2 系統(tǒng)程序設計流程圖16</p><p> 4.3 軟件編譯與調試17</
10、p><p> 4.4 液晶顯示19</p><p> 4.5 NRF24L01模塊程序設計20</p><p> 5.調試結果與分析24</p><p> 5.1 測試儀器24</p><p> 5.2 測試方法24</p><p> 5.3 調試過程與分析24&l
11、t;/p><p> 5.4 測試結論24</p><p><b> 參考文獻25</b></p><p><b> 附 錄26</b></p><p><b> 謝 辭44</b></p><p><b> 1 引言<
12、;/b></p><p> 近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷地走向深入,同時帶動 傳統(tǒng)控制檢測技術日新月益更新。</p><p> 投票器,是投票反饋系統(tǒng)中的終端設備,是一種代替常規(guī)會議舉手表決,會議舉手投票,民主舉手選舉的一種裝置。投票器系統(tǒng)主要由:基站,軟件,終端設備三部分組成??梢宰杂蛇x擇實名投票與非實名投票。</p><p> 使用
13、時,與會者只需按動手中投票器上對應的,“贊同”“反對”或者“棄權”即可,相應的投票結果會在電腦中記錄并實時顯示的屏幕上,從而公平公正的展現出來。</p><p> 隨著無線技術的發(fā)展,以及有線投票器的不方便性,無線投票器逐漸取代了有線投票器的市場。</p><p> 基于單片機與無線技術的投票器的設計制作過程,以MCS-51系列單片機為控制核心設計投票系統(tǒng)的投票發(fā)射器與接收器。投票發(fā)射
14、器由單片機、三個按鍵、三個指示燈和NRF24L01模塊等組成.三個鍵分別表示不按代表反對,按下代表同意。投票器把投票結果信息編碼后通過NRF24L01發(fā)射出去,接收器接收后,辨別發(fā)射傳輸的信息,可由液晶屏LCD1602顯示實際投票結果。</p><p> 2 設計要求及方案論證</p><p><b> 2.1 設計要求</b></p><
15、p> 單片機在各種電子產品中的應用已經越來越廣泛,很多的電子產品利用單片機所取得的便利性得到了人們的好評,針對多路數據采集系統(tǒng)的要求提出了以下的方案:</p><p> 設計一款能進行遠程無線投票的設備,由多個投票端和一個控制端所組成,模擬遠程投票。其中每一個投票端都有三個按鍵,“贊成”、“反對”和“棄權”。當投票端進行投票后,由控制端顯示投票結果。</p><p> 2.2
16、 設計方案及論證</p><p> 2.2.1 控制模塊方案及論證[1]</p><p> 方案1:采用各類數字電路來組成鍵盤控制系統(tǒng),進行信號處理,如選用CPLD等可編程邏輯器件。本方案電路復雜,靈活性不高,效率低,不利于系統(tǒng)的擴展,對信號處理比較困難。</p><p> 方案2:采用STC89C52RC單片機作為這個系統(tǒng)的控制單元,可方便利用單片機內部的
17、定時器等各種資源,方便程序的編寫和無線射頻模塊的操作。 </p><p> 比較以上兩種方案的優(yōu)缺點,方案1采用中、小規(guī)模器件實現系統(tǒng)的數控部分,使用的芯片很多,造成控制電路內部接口信號繁瑣,中間相互關聯多,抗干擾能力差。在方案2中采用單片機完成整個數控部分的功能,也便于系統(tǒng)功能的擴展。</p><p> 2.2.2 顯示模塊方案及論證[2] </p><p>
18、; 方案1:使用數碼管顯示</p><p> 使用多位數碼管顯示,顯示不靈活。</p><p> 方案2:使用LCD1602液晶顯示</p><p> 液晶顯示模塊具有體積小、功耗低、顯示內容豐富、超薄輕巧等優(yōu)點。本方案采用LCD1602,它具有兩行顯示,每行顯示16個字符,采用單+5V供電,外圍電路簡單,價格便宜,具有很高的性價比。而數碼管雖然便宜,但顯示
19、單調。占用過多的I/O。</p><p> 綜上所述,得到系統(tǒng)整體結構框圖如圖1所示。</p><p> 圖1 系統(tǒng)整體結構框圖</p><p> 3 系統(tǒng)的硬件電路設計</p><p> 3.1 主控制器模塊的設計[3]</p><p> 本設計采用PDIP封裝的STC89C52RC芯片為主控制器,該
20、芯片正常工作電壓為5V,支持的最高時鐘頻率為80MHz,Flash程序存儲器為8KB,RAM數據存儲器為512B,內置看門狗電路,支持ISP/IAP[4]。本單片機具有以下優(yōu)點:</p><p><b> 超低功耗。</b></p><p> ●掉電模式:典型功耗為0.5uA,可由外部中斷喚醒,中斷返回后,繼續(xù)執(zhí)行原程序。</p><p>
21、 ●空閑模式:典型功耗為2mA。</p><p> ●正常工作模式:典型功耗為4mA-7mA。</p><p><b> 超強抗干擾。</b></p><p> ●I/O口、電源、時鐘、看門狗、復位電路都是經過特殊處理。</p><p> ●寬電壓,不怕電源抖動,工作電壓范圍為3.4 – 6V。</p&g
22、t;<p> ●高抗靜電(高ESD保護),輕松過2000V。</p><p><b> ●快速沖干擾。</b></p><p> 控制部分是系統(tǒng)整機協(xié)調工作和智能化管理的核心部分,采用STC89C52RC單片機實現控制功能是其關鍵,采用單片機不但方便監(jiān)控,并且大大減少硬件設計。由于本設計分兩個板子但上面的單片機最小系統(tǒng)電路是一樣的,所以在此僅以發(fā)射
23、板單片機電路為例。STC89C52RC芯片原理圖如圖2所示。</p><p> 圖圖2 STC89C52RC芯片原理圖</p><p> 3.2 NRF24L01無線模塊的設計[5]</p><p> NRF24L01 是 NORDIC 公司最近生產的一款無線通信通信芯片,采用 FSK 調制,內部集成NORDI自己的 Enhanced Short Burs
24、t 協(xié)議??梢詫崿F點對點或是 1 對 6 的無線通信[6]。</p><p> 無線通信速度可以達到 2M(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產。嵌入式工程師或是單片機愛好者只需要為單片機系統(tǒng)預留 5個GPIO,1個中斷輸入引腳,就可以很容易實現無線通信的功能,非常適合用來為 MCU 系統(tǒng)構建無線通信功能。</p><p> 發(fā)射數據時,首先
25、將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點地址TX_ADDR和有效數據TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū),TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數據;若自動應答開啟,那么nRF24L01在發(fā)射數據后立即進入接收模式,接收應答信號(自動應答接收地址應該與接收節(jié)點地址TX_ADDR一致)。如果收到應答,則認為此次通信
26、成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應答,則自動重新發(fā)射該數據(自動重發(fā)已開啟),若重發(fā)次數(ARC)達到上限,MAX_RT置高,TX FIFO中數據保留以便在次重發(fā);MAX_RT或TX_DS置高時,使IRQ變低,產生中斷,通知MCU。最后發(fā)射成功時,若CE為低則nRF24L01進入空閑模式1;若發(fā)送堆棧中有數據且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數據且CE為高,則進入空閑模式2。</p&
27、gt;<p> 接收數據時,首先將nRF24L01配置為接收模式,接著延遲130μs進入接收狀態(tài)等待數據的到來。當接收方檢測到有效的地址和CRC時,就將數據包存儲在RX FIFO中,同時中斷標志位RX_DR置高,IRQ變低,產生中斷,通知MCU去取數據。若此時自動應答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應答信號。最后接收成功時,若CE變低,則nRF24L01進入空閑模式1[7]。</p><p>
28、 NRF24L01內部結構如圖3所示,NRF24L01模塊電路圖如圖4所示,NRF24L01指令系統(tǒng)由表1所示[8]。</p><p> 圖3 NRF24L01結構圖</p><p> NRF24L01模塊電路圖如圖4所示。</p><p> 圖4 NRF24L01模塊電路</p><p> NRF24L01的指令列表如表1所示。&
29、lt;/p><p> 表1 NRF24L01令列表</p><p> 3.3 按鍵控制模塊的設計</p><p> 本設計中,采用獨立按鍵對單片機核心芯片STC89C52RC進行輸入控制。各按鍵分別一端接地,一端接單片機引腳。實現功能:三個鍵分別表示不按代表反對,按下代表同意。鍵盤控制電路原理圖如圖5所示。</p><p> 圖5 盤
30、控制電路原理圖</p><p> 3.4 液晶顯示模塊的設計</p><p> 3.4.1 LCD1602主要管腳介紹</p><p> 顯示模塊用于接收機實時顯示投票結果。這里采用1602液晶顯示屏,其主要參數為:顯示容量(16*2個字符),芯片工作電壓(4.5-5.5V),工作電流(2.0mA),模塊最佳工作電壓(5.0V)。LCD1602共有16個引
31、腳,LCD1602管腳功能介紹表如表2所示</p><p> 表2 LCD1602管腳功能介紹表</p><p><b> 說明:</b></p><p> V0: 液晶顯示器對比度調整端,接正電源的對比度最弱,接地電源是對比度最高,對比度過高時會產生“鬼影”使用時可以通過一個10k的電位器調整對比度。</p><p
32、> RS: 寄存器選擇,高電平時選擇數據存儲器;低電平時選擇指令寄存器。</p><p> R/W:讀寫信號線,高電平時進行讀操作,低電平進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址;當RS為高電平,R/W為低電平時可以寫入數據。</p><p> E: 使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p>
33、 3.4.2 LCD1602控制指令</p><p> 1.清屏指令如表3所示</p><p><b> 表3 清屏指令表</b></p><p> 功能:<1> 清除液晶顯示器,即將DDRAM的內容全部填入"空白"的ASCII碼20H;</p><p> <2> 光
34、標歸位,即將光標撤回液晶顯示屏的左上方; <3> 將地址計數器(AC)的值設為0。</p><p> 2.顯示開關控制表如表4所示。</p><p> 表4 顯示開關控制表</p><p> 功能:設置顯示,光標及閃爍開,關</p><p> 其中:D表示顯示:1為開,0為關;</p><p&
35、gt; C表示光標:1為開,0為關</p><p> D表示閃爍:1為開,0為關</p><p> 光標,畫面移動表如表5所示</p><p> 表5 光標,畫面移動表</p><p> 功能:光標,畫面移動,不影響DDRAM</p><p> 其中:S/C=1,畫面平移一個字符位</p>&
36、lt;p> S/C=0,光標平移一個字符位</p><p> R/L=1:右移;R/L=0:左移</p><p> 功能設置表如表6所示</p><p><b> 表6 功能設置表</b></p><p><b> 功能:工作方式設置</b></p><p>
37、 其中:DL=1,8位數據接口;DL=0四位數據接口;</p><p> N=1,兩行顯示;N=0,一行顯示;</p><p> F=1,5 10點陣字符;F=0,5 7點陣字符</p><p> 3.4.3 液晶顯示程序設計</p><p> 1.讀操作時序如圖6所示</p><p><b>
38、 圖6 讀操作時序</b></p><p> 2.寫操作時序如圖7所示。</p><p><b> 圖7 寫操作時序</b></p><p><b> 讀寫控制時序表</b></p><p> 讀寫控制時序如表7所示。</p><p> 表7 讀寫控制時
39、序表</p><p> 3.4.5 LCD1602的一般初始化過程</p><p><b> 1.延時15mS</b></p><p><b> 2.寫指令38H</b></p><p> 3.寫指令08H:顯示關閉</p><p> 4.寫指令01H:顯示清屏&
40、lt;/p><p> 5.寫指令06H:顯示光標移動設置</p><p> 6.寫指令0CH:顯示開及光標設置</p><p> 3.4.6 LCD1602與單片機連接圖</p><p> LCD1602與單片機連接圖的連接圖如圖8所示。</p><p> 圖8 LCD1602與單片機連接圖</p>
41、<p> 數據線DB0-DB7連接單片機的P0口; RS、R/W,E,3條控制線分別接單片機的P2.5、P2.6、P2.7口。電阻R3用來設置背光的亮度。</p><p> 3.5 振蕩電路設計模塊的設計[9]</p><p> 單片機的工作是在統(tǒng)一的脈沖控制下的進行的。這個脈沖就是由單片機控制器的時鐘電路發(fā)出的,即時鐘電路用于產生單片機工作所需的時鐘信號。單片機本身
42、就是一個復雜的同步時序電路,為了保證同步工作方式的實現,電路應在唯一的時鐘信號控制下嚴格地按時序進行工作。時鐘電路用于產生單片機工作的時鐘信號。而時鐘電路又各分為兩種,即內部時鐘方式和外部時鐘方式。</p><p> 本設計采用內部時鐘方式此種方式時,單片機內接一個高增益反向放大器構成內部振蕩器。引腳XTAL1和XTAL2分別此放大器的輸入端和輸出端。同時在XTAL1和XTAL2兩端跨接晶體或陶瓷諧振器構成穩(wěn)定
43、的自激振蕩器,其發(fā)出的脈沖信號直接送入到內部時鐘發(fā)生器。電容C1和C2通常選擇為(30+或-10)pf左右;外接陶瓷諧振器時則選為47pf左右。電容C1和 C2對頻率有微調作用。為了減少寄生電容,更好地保證振蕩器可靠地工作,諧振器和電容應安裝得與單片機芯片盡可能的近。內部時鐘發(fā)生器實際上是一個二分頻的觸發(fā)器,該二分頻為單片機提供一個二相的時鐘信號即相位信號1(P1)和相位信號2(P2),驅動CPU產生執(zhí)行指令功能的機器周期。這里我們采用
44、的是12MHz晶振,也就時說單片機的時鐘周期為1/12uS,指令周期為1uS。晶體振蕩器的頻率越高,振蕩頻率就越高,振蕩電路原理圖如圖9所示。</p><p> 圖9 振蕩電路原理圖</p><p> 3.6 晶振電路與復位電路設計[10]</p><p> 3.6.1 晶振電路</p><p> 晶振電路為單片機AT89C51工
45、作提供時鐘信號,芯片中有一個用于構成內部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振蕩器一起構成自激振蕩器。電路中的外接石英晶體及電容C5、C6接在放大器的反饋回路中構成并聯振蕩電路。由于外接電容C5、C6的容量大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性,如果使用石英晶體,電容的容量大小范圍為20pF~40pF;如果
46、使用陶瓷諧振,則電容容量大小為30 pF~50 pF。本設計中使用石英晶體,電容的容值設定為30pF。</p><p> 3.6.2 復位電路</p><p> 復位電路的基本功能是:系統(tǒng)上電時提供復位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復位信號。為可靠起見,電源穩(wěn)定后還要經一定的延時才撤銷復位信號,以防電源開關或電源插頭分合過程中引起的抖動而影響復位。單片機在啟動時都需要復位,以使CPU
47、及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。AT89C51的復位信號是從REST引腳輸入到芯片內的施密特觸發(fā)器中的。當系統(tǒng)處于正常工作狀態(tài)時,且振蕩器穩(wěn)定后,如果REST引腳上有一個高電平并維持2個機器周期(24個振蕩周期)以上,則CPU就可以響應并將系統(tǒng)復位。單片機系統(tǒng)的復位方式有:手動按鈕復位和上電復位,本設計采用的是手動按鈕復位。</p><p> 手動按鈕復位需要人為在復位輸入端REST上加入高電
48、平,采用的辦法是在REST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到REST端,系統(tǒng)復位。由于人的動作再快也會使按鈕保持接通達數十毫秒,所以,設計完全能夠滿足復位的時間要求。復位電路中SW-PB為手動復位開關,電容Ch1可避免高頻諧波對電路的干擾。</p><p> 因為 MCS-51系列單片機采用高電平復位方式,其內部復位電路如圖3-15所示,高電平復位脈沖RST引腳輸
49、入到內部施密特觸發(fā)器整形后,送CPU內部復位電路。CPU在每一個機器周期的S5P2相采樣施密特觸發(fā)器的輸出端,若為高電平,則強迫機器進入復位狀態(tài)。為了保證CPU內部各個單元電路可靠復位,RST引腳復位脈沖高電平維持時間必須大于等于2個機器周期(即24個振蕩周期)。內部復位電路如圖10所示。 </p><p><b> 圖10 復位電路</b></p><p
50、> 可以使用RC分立元件或微處理器監(jiān)控芯片構成MCS-51單片機的外部復位電路。本設計中采用RC分立元件構成MCS-51外部復位電路,外部復位電路圖電路如圖11所示。</p><p> 圖11 外部復位電路</p><p> 按下復位按鍵K20時,電容C3通過R1放電,當電容放電結束后,RST引腳電位由R1、R2分壓比決定。由于R2>>R1,因此RST引腳為高電平,
51、CPU進入復位狀態(tài)。松開復位按鍵后,電容C3充電,RST引腳電位下降,使CPU脫離復位狀態(tài)。R1的作用在于限制復位按鈕瞬間電容C3的放電電流,避免產生火花,以保護按鈕的觸點。</p><p> 單片機的復位都是靠外部電路實現的,在時鐘電路工作后,只要在單片機的RST引腳上出現24個時鐘振蕩脈沖以上的高電平,單片機便實現初始化狀態(tài)復位。為了保證應用系統(tǒng)可靠地復位,在設計復位電路時,通常使RST保持高電平。只要RS
52、T保持高電平,則單片機就循環(huán)復位。</p><p> 3.7 電源模塊的設計</p><p> 本設計兩塊板子都是用USB供電方式,以USB接口接收電腦或充電器5V電源,輸入后經過100uf和0.1uf電容濾波后,提供給系統(tǒng)。電源模塊電路圖如圖12所示。</p><p> 圖12 電源模塊電路圖</p><p><b>
53、4 系統(tǒng)軟件設計</b></p><p> 4.1 用C語言開發(fā)單片機的優(yōu)勢[11]</p><p> C語言是一種編譯型的結構化程序設計語言,具有簡單的語法結構和強大的處理功能,具有運行速度快、編譯效率高,移植性好和可讀性強等多種優(yōu)點,可以實現對系統(tǒng)便件的直接操作。用C語言來編寫目標系統(tǒng)軟件,可以大大縮短開發(fā)周期,且明顯地增加軟件的可讀性,便于改進和擴充,從而開發(fā)出大
54、規(guī)模、高性能的應用系統(tǒng)。</p><p> 4.2 系統(tǒng)程序設計流程圖</p><p> 此系統(tǒng)中用到單片機的部分功能:鍵盤擴展,程序中斷,I/O控制等。主程序基本沒什么是可做,但因鍵盤掃描時通過程序查詢的方式來實現的,所以在主程序中要調用鍵盤掃描程序。發(fā)射板系統(tǒng)流程圖如圖13所示,接收板流程圖如圖14所示。</p><p> 圖13 發(fā)射板程序流程圖<
55、;/p><p> 圖14 接收板程序流程圖</p><p><b> 軟件編譯與調試</b></p><p> Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。本設計軟件
56、編譯使用的是uVision2編譯器</p><p> 選擇CPU型號窗口中選擇CPU生產廠家及芯片型號。這里選擇的是Atmel公司的AT89C52芯片。選擇芯片界面設置如圖15所示。</p><p> 圖15 選擇芯片界面設置</p><p> 程序代碼編寫完后需要編譯鏈接生成目標代碼,然后進行硬件調試或模擬仿真,編譯代碼可以點擊或鍵盤的快捷鍵F7。編譯后
57、的結果如圖16所示。</p><p> 圖16 軟件編譯結果界面</p><p> 編譯軟件后,要對代碼進行下載到STC89C52RC單片機中。這里選用的是STC-ISP下載軟件,STC程序下載界面如圖17所示。</p><p> 圖17 STC程序下載界面</p><p><b> 4.4 液晶顯示</b>
58、</p><p> LCD1602己很普遍了,市面上字符液晶絕大多數基于HD44780液晶芯片的,控制原理就是完全相同的,HD44780寫的控制程序可以很方便地應用于市面上大部分的字符型液晶,字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條是背光電源線VCC和地線GND,其控制原理與14條引腳線的LCD完全一樣的。液晶顯示模塊的流程圖如圖18所示。</p><p>
59、圖18 LCD1602液晶顯示模塊的流程圖</p><p> 液晶部分的程序如下:</p><p> void main(void)</p><p> { uchar n;</p><p> unsigned char tf =0;</p><p> unsigned char TxBuf[20]={
60、0}; // </p><p> unsigned char RxBuf[20]={0};</p><p> InitLcd();</p><p> init_NRF24L01() ;</p><p> lcd_1602_word(0x80,16,"*****Loading****");</p>
61、<p> lcd_1602_word(0xc0,16,"*****Loading****");</p><p><b> while(1)</b></p><p><b> {</b></p><p> SetRX_Mode();</p><p> RxBuf
62、[1] = 0x00;</p><p> RxBuf[2] = 0x00;</p><p> RxBuf[3] = 0x00;</p><p> Delay(1000);</p><p> nRF24L01_RxPacket(RxBuf);</p><p> n=RxBuf[1]+RxBuf[2]+RxBuf
63、[3];</p><p><b> if(n>4)</b></p><p><b> { </b></p><p> lcd_1602_word(0x80,16,"**Pass****Pass**");</p><p> lcd_1602_word(0
64、xc0,16,"**Pass****Pass**");</p><p><b> }</b></p><p><b> if(n==3)</b></p><p><b> {</b></p><p> lcd_1602_word(0x80,16,&q
65、uot;**Down****Down**");</p><p> lcd_1602_word(0xc0,16,"**Down****Down**"); </p><p><b> }</b></p><p><b> n=0;</b></p><p> R
66、xBuf[1] = 0x00;</p><p> RxBuf[2] = 0x00;</p><p> RxBuf[3] = 0x00;</p><p> Delay(1000); //old is '1000'</p><p> 4.5 NRF24L01模塊程序設計[9]</p><p&g
67、t; 該射頻模塊集成了NORDIC公司生產的無線射頻芯片nRF24L01:</p><p> 1.支持2.4GHz的全球開放ISM頻段,最大發(fā)射功率為0dBm</p><p> 2.2Mbps,傳輸速率高</p><p> 3.功耗低,等待模式時電流消耗僅22uA</p><p> 4.多頻點(125個),滿足多點通信及跳頻通信需求
68、</p><p> 5.在空曠場地,有效通信距離:25m(外置天線)、10m(PCB天線)</p><p><b> 6.工作原理簡介:</b></p><p> NRF24L01無線模塊的軟件流程圖如圖20所示。</p><p> 圖20 NRF24L01無線模塊的軟件流程圖</p><p
69、> 5 調試結果與分析</p><p><b> 5.1 測試儀器</b></p><p> 萬用表,軟件Protues。</p><p><b> 5.2 測試方法</b></p><p> 先接通電源,看看系統(tǒng)能否正常工作,如果不能,可以在系統(tǒng)供電情況下,用萬用表檢測發(fā)射板
70、和接收板各個模塊的電壓,如果出現電壓為0或者無限大的情況,則為短路或者斷路,一一排查之后可以確定是哪個地方的問題,檢修后再次接通電源調試,使用protues軟件事先調試按鍵邏輯與顯示邏輯觀察是否正常。</p><p> 5.3 調試過程與分析</p><p> 在本次設計過程中,由于使用的是宏晶的STC89C52RC芯片,這個系列的程序下載只需通過MAX232下載接口就可以。使得本次
71、設計中硬件仿真變的就比較簡單,因為有了硬件仿真工具就可以隨時修改程序,通過一步一步的調試來達到最后的目的,同時尤其學會了分部調試的思想,這就使得當遇到問題時不會覺得無從下手,不會覺得那么迷茫,使調試變得比較有條理。</p><p> 在檢查完硬件電路沒有短路、斷路的情況下,接通電源,并且測試各個集成片的電源電壓是否符合要求,以及單片機晶振是否起振,只有晶振正常起振單片機才能工作,通過檢測,上述情況均正常。<
72、;/p><p> 在protues軟件當中以單步聯調的方法,測試按鍵邏輯與LCD1602現實邏輯在實際電路調試過程中,由于沒有深入的了解24l01的收發(fā)機制,導致第一次試驗接收器,經常接受到亂碼,系統(tǒng)不能正常工作。在查閱相關資料和優(yōu)化代碼后,以多次檢測接受數據的方法,成功解決了該問題。</p><p> 此外,雖然本設計可以實現最基本的無線投票并有智能輸出結果的功能,但作為一個無線投票器
73、的設計在功能方面還存在很多不足和需要改進之處。譬如,投票過程中只能通過液晶顯示其投票結果,而不能顯示贊成和反對以及棄權的票數。但由于時間、硬件、經濟等各方面條件的限制,我在此就不能作大的改動,只能附上一段程序,如果在主程序改成如下,并加之硬件條件的配合,便能實現無線投票并統(tǒng)計票數的功能:</p><p> void Piaoshu_View(){ uchar Piao;
74、60;if(RxBuf[1]==1) Piao++; if(RxBuf[2]==1) Piao++; if(RxBuf[3]==1) Piao++; if(Piao<2) { lcd_1602_word(0x80,16,"**Down****Down**&
75、quot;); lcd_1602_word(0xc0,1,(3-Piao+0x30)); } else { lcd_1602_word(0x80,16,"**Pass****Pass**"); lcd_1602_word(0xc
76、0,1,Piao+0x30); } }</p><p> 經過編碼的投票信息經發(fā)射模塊發(fā)射,然后被接收板的接收模塊接收后,又經單片機辨別后輸出到液晶屏。任意按下兩個按鍵,液晶顯示如圖19所示。</p><p><b> 圖19液晶顯示現象</b></p><p><b> 5.4
77、 測試結論</b></p><p> 當按下不同的按鍵后,接收板1602液晶屏上,能準確顯示投票信息,實測傳輸有效距離超過10米。</p><p><b> 參考文獻</b></p><p> [1] 高偉.AT89C51單片機原理及應用(第一版)[M].北京:國防工業(yè)出版社,2008,71-75</p><
78、;p> [2] 趙亮.液晶顯示模塊LCD1602應用[J] .電子制作,2007年3月</p><p> [3] 江太輝.MCS-51系列單片機原理與應用[M]. 廣州:華南理工大學出版社,1900-01,40~45</p><p> [4] 潘永雄.新編單片機原理與應用[M].西安電子科技大學出版社,2007-02,19~25,65~66</p><p&g
79、t; [5] 英慶,王代華,張志杰.基于nRF24L01的無線數據傳輸系統(tǒng)[J].現代電子技術,2008,31(7):68-82.</p><p> [6] 丁永紅,孫運強.基于nRF2401的無線數傳系統(tǒng)設計[J].國外電子測量技術,2008,27(4):45-47.</p><p> [7] 時志云,蓋建平,王代華,等.新型高速無線射頻器件nRF24L01及其應用[J].國外電子
80、元器件,2007(8):42-44.</p><p> [8] NorDic Semiconductor. nRF24L01 single chip 2.4 GHz transceiver product specification[EB/OL]. July 2007.</p><p> [9] 湯競南,沈國琴.51單片機C語言開發(fā)與實例[M]. 北京:人民郵電出版社,2
81、008-02,1~4,89~95</p><p> [10] 張萌,和湘,姜斌.單片機應用系統(tǒng)開發(fā)綜合實例(第一版)[M].北京:清華大學出版社,2007,94-97</p><p> [11] 譚浩強.C程序設計(第二版) [M] .北京:清華大學出版社,2006-01</p><p> [12] 白倫博,陳棟,宋愛慧.一種無線通信系統(tǒng)中無線信號傳輸間歇時發(fā)
82、射數據突發(fā)的方法[Z].CN1627658:,2005.</p><p> [13]張默晗,張北,王天亮.無線信號傳輸裝置及傳輸方法[Z].CN101694740A:,2010.</p><p> [14] 林群堯. 無線信號傳輸裝置[Z]. CN301028800: ,2009.</p><p> [15] 張默晗,張北,王天亮. 無線信號傳輸裝置[Z].
83、CN201514694U: ,2010. </p><p><b> 附 錄</b></p><p> 附錄1:系統(tǒng)總體電路圖</p><p> 1.發(fā)射板電路原理圖:</p><p> 2.接收板電路原理圖:</p><p><b> 3.實物圖:</b><
84、;/p><p> 附錄2:發(fā)射板系統(tǒng)源代碼 </p><p><b> 程序:</b></p><p> /*--------------------------------------------------------------------------------------------------------------------&
85、lt;/p><p> #include <reg52.h></p><p> #include <intrins.h></p><p> typedef unsigned char uchar;</p><p> typedef unsigned char uint;</p><p> /
86、/****************************************NRF24L01端口定義***************************************</p><p> sbit MISO=P1^5;</p><p> sbit MOSI=P1^4;</p><p> sbitSCK =P1^3;</p
87、><p> sbitCE =P1^1;</p><p> sbitCSN=P1^2;</p><p> sbitIRQ=P1^6;</p><p> sbit LCD_RS =P2^5;</p><p> sbit LCD_RW =P2^6;</p><p> sb
88、it LCD_E =P2^7;</p><p> //************************************按鍵***************************************************</p><p> sbitKEY1=P3^1;</p><p> sbitKEY2=P3^3;</p>&l
89、t;p> sbitKEY3=P3^5;</p><p> //************************************數碼管位選*********************************************</p><p> sbitled1=P3^2;</p><p> sbitled2=P3^4;</p>
90、;<p> sbitled3=P3^6;</p><p> //*********************************************NRF24L01*************************************</p><p> #define TX_ADR_WIDTH 5 // 5 uints TX address wi
91、dth</p><p> #define RX_ADR_WIDTH 5 // 5 uints RX address width</p><p> #define TX_PLOAD_WIDTH 20 // 20 uints TX payload</p><p> #define RX_PLOAD_WIDTH 20 // 20 uints
92、TX payload</p><p> #define LCD_DATA P0</p><p> uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//本地地址</p><p> uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0
93、x43,0x10,0x10,0x01};//接收地址</p><p> //***************************************NRF24L01寄存器指令*******************************************************</p><p> #define READ_REG 0x00 // 讀寄存器
94、指令</p><p> #define WRITE_REG 0x20 // 寫寄存器指令</p><p> #define RD_RX_PLOAD 0x61 // 讀取接收數據指令</p><p> #define WR_TX_PLOAD 0xA0 // 寫待發(fā)數據指令</p><p> #def
95、ine FLUSH_TX 0xE1 // 沖洗發(fā)送 FIFO指令</p><p> #define FLUSH_RX 0xE2 // 沖洗接收 FIFO指令</p><p> #define REUSE_TX_PL 0xE3 // 定義重復裝載數據指令</p><p> #define NOP
96、 0xFF // 保留</p><p> //*************************************SPI(nRF24L01)寄存器地址****************************************************</p><p> #define CONFIG 0x00 // 配置收發(fā)狀態(tài),CRC校驗模式以及收發(fā)
97、狀態(tài)響應方式</p><p> #define EN_AA 0x01 // 自動應答功能設置</p><p> #define EN_RXADDR 0x02 // 可用信道設置</p><p> #define SETUP_AW 0x03 // 收發(fā)地址寬度設置</p><p> #
98、define SETUP_RETR 0x04 // 自動重發(fā)功能設置</p><p> #define RF_CH 0x05 // 工作頻率設置</p><p> #define RF_SETUP 0x06 // 發(fā)射速率、功耗功能設置</p><p> #define STATUS 0x07
99、 // 狀態(tài)寄存器</p><p> #define OBSERVE_TX 0x08 // 發(fā)送監(jiān)測功能</p><p> #define CD 0x09 // 地址檢測 </p><p> #define RX_ADDR_P0 0x0A // 頻道0接收數據地址</p>
100、<p> #define RX_ADDR_P1 0x0B // 頻道1接收數據地址</p><p> #define RX_ADDR_P2 0x0C // 頻道2接收數據地址</p><p> #define RX_ADDR_P3 0x0D // 頻道3接收數據地址</p><p> #define RX_ADD
101、R_P4 0x0E // 頻道4接收數據地址</p><p> #define RX_ADDR_P5 0x0F // 頻道5接收數據地址</p><p> #define TX_ADDR 0x10 // 發(fā)送地址寄存器</p><p> #define RX_PW_P0 0x11 // 接收頻道0接收數
102、據長度</p><p> #define RX_PW_P1 0x12 // 接收頻道0接收數據長度</p><p> #define RX_PW_P2 0x13 // 接收頻道0接收數據長度</p><p> #define RX_PW_P3 0x14 // 接收頻道0接收數據長度</p><
103、p> #define RX_PW_P4 0x15 // 接收頻道0接收數據長度</p><p> #define RX_PW_P5 0x16 // 接收頻道0接收數據長度</p><p> #define FIFO_STATUS 0x17 // FIFO棧入棧出狀態(tài)寄存器設置</p><p> //******
104、********************************************************************************</p><p> void Delay(unsigned int s);</p><p> void inerDelay_us(unsigned char n);</p><p> void init
105、_NRF24L01(void);</p><p> uint SPI_RW(uint uchar);</p><p> uchar SPI_Read(uchar reg);</p><p> void SetRX_Mode(void);</p><p> uint SPI_RW_Reg(uchar reg, uchar value);
106、</p><p> uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);</p><p> uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);</p><p> unsigned char nRF24L01_RxPacket(unsign
107、ed char* rx_buf);</p><p> void nRF24L01_TxPacket(unsigned char * tx_buf);</p><p> //*****************************************長延時*****************************************</p><p>
108、void Delay(unsigned int s)</p><p><b> {</b></p><p> unsigned int i;</p><p> for(i=0; i<s; i++);</p><p> for(i=0; i<s; i++);</p><p>&l
109、t;b> }</b></p><p> //******************************************************************************************</p><p> uint bdata sta; //狀態(tài)標志</p><p> sbitRX_DR=st
110、a^6;</p><p> sbitTX_DS=sta^5;</p><p> sbitMAX_RT=sta^4;</p><p> /******************************************************************************************</p><p&g
111、t;<b> /*延時函數</b></p><p> /******************************************************************************************/</p><p> void inerDelay_us(unsigned char n)</p><p&g
112、t;<b> {</b></p><p> for(;n>0;n--)</p><p><b> _nop_();</b></p><p><b> }</b></p><p> //***************************************
113、*************************************************</p><p> /*NRF24L01初始化</p><p> //***************************************************************************************/</p><p>
114、 void init_NRF24L01(void)</p><p><b> {</b></p><p> inerDelay_us(100);</p><p> CE=0; // chip enable</p><p> CSN=1; // Spi disable </p><p
115、> SCK=0; // </p><p> SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 寫本地地址</p><p> SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 寫接收端地址</p&g
116、t;<p> SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 頻道0自動ACK應答允許</p><p> SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 </p><p> SPI_RW_Reg(WRITE_REG +
117、 RF_CH, 0); // 設置信道工作為2.4GHZ,收發(fā)必須一致</p><p> SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設置接收數據長度,本次設置為32字節(jié)</p><p> SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //設置發(fā)射速率為1MHZ,發(fā)射
118、功率為最大值0dB</p><p><b> }</b></p><p> /****************************************************************************************************</p><p> /*函數:uint SPI_RW(uint
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投票管理畢業(yè)論文
- 畢業(yè)論文——asp網上投票系統(tǒng)設計
- 畢業(yè)論文——在線投票系統(tǒng)
- 畢業(yè)論文——在線投票系統(tǒng)
- 畢業(yè)論文——在線投票系統(tǒng)
- 畢業(yè)論文---網上投票系統(tǒng)的設計與實現
- 無線傳感器系統(tǒng)的設計【畢業(yè)論文】
- 累積投票制度研究【畢業(yè)論文】
- 畢業(yè)論文——在線投票系統(tǒng) (2)
- 畢業(yè)論文——在線投票系統(tǒng) (2)
- 智能小車的無線控制器設計畢業(yè)論文
- 網站投票系統(tǒng)-本科畢業(yè)論文
- 基于zigbee的無線點菜器畢業(yè)論文
- 無線門鈴設計畢業(yè)論文
- 畢業(yè)論文---無線鼠標設計
- 無線傳感器網絡畢業(yè)論文
- 畢業(yè)論文范文——無線調頻發(fā)射器的設計
- 單片機無線搶答器設計畢業(yè)論文
- 畢業(yè)論文范文——企業(yè)電子投票系統(tǒng)
- 基于arm的無線傳感器網絡節(jié)點設計畢業(yè)論文
評論
0/150
提交評論