

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 無線投票器的設(shè)計</b></p><p> 摘要:本設(shè)計以直流電壓源為核心,STC89C52RC增強型單片機為主控制器。單片機系統(tǒng)是無線投票器的核心,它通過軟件的運行來控制整個系統(tǒng)的工作,從而完成設(shè)定的功能。通過三個數(shù)字鍵盤來進行投票,在投票結(jié)束之后,經(jīng)過編碼的投票信息由NRF24L01無線模塊發(fā)射出去。在接收端,可由液晶屏LCD1602顯示實際投票結(jié)果。實際
2、結(jié)果表明,本系統(tǒng)實際應(yīng)用于投票領(lǐng)域。</p><p> 關(guān)鍵詞:無線;投票器;單片機;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.設(shè)計要求及方案論證2</p><p> 2.1 設(shè)計要求2</p><p> 2.2 設(shè)計方案及論證2</p><p>
6、; 2.2.1 控制模塊方案及論證2</p><p> 2.2.2 顯示模塊方案及論證2</p><p> 3.系統(tǒng)的硬件電路設(shè)計4</p><p> 3.1 主控制器模塊的設(shè)計4</p><p> 3.2 NRF24L01無線模塊的設(shè)計5</p><p> 3.3 按鍵控制模塊的設(shè)計
7、7</p><p> 3.4 液晶顯示模塊的設(shè)計8</p><p> 3.4.1 LCD1602主要管腳介紹8</p><p> 3.4.2 LCD1602控制指令9</p><p> 3.4.3 液晶顯示模塊設(shè)計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 振蕩電路設(shè)計模塊的設(shè)計12</p><p> 3.6 晶振電路與復(fù)位電路設(shè)計12</p><p> 3.6.1 晶振電路12</p><
9、;p> 3.6.2 復(fù)位電路13</p><p> 3.7 電源模塊的設(shè)計14</p><p> 4.系統(tǒng)軟件設(shè)計16</p><p> 4.1 用C語言開發(fā)單片機的優(yōu)勢16</p><p> 4.2 系統(tǒng)程序設(shè)計流程圖16</p><p> 4.3 軟件編譯與調(diào)試17</
10、p><p> 4.4 液晶顯示19</p><p> 4.5 NRF24L01模塊程序設(shè)計20</p><p> 5.調(diào)試結(jié)果與分析24</p><p> 5.1 測試儀器24</p><p> 5.2 測試方法24</p><p> 5.3 調(diào)試過程與分析24&l
11、t;/p><p> 5.4 測試結(jié)論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ā)展,單片機的應(yīng)用正在不斷地走向深入,同時帶動 傳統(tǒng)控制檢測技術(shù)日新月益更新。</p><p> 投票器,是投票反饋系統(tǒng)中的終端設(shè)備,是一種代替常規(guī)會議舉手表決,會議舉手投票,民主舉手選舉的一種裝置。投票器系統(tǒng)主要由:基站,軟件,終端設(shè)備三部分組成??梢宰杂蛇x擇實名投票與非實名投票。</p><p> 使用
13、時,與會者只需按動手中投票器上對應(yīng)的,“贊同”“反對”或者“棄權(quán)”即可,相應(yīng)的投票結(jié)果會在電腦中記錄并實時顯示的屏幕上,從而公平公正的展現(xiàn)出來。</p><p> 隨著無線技術(shù)的發(fā)展,以及有線投票器的不方便性,無線投票器逐漸取代了有線投票器的市場。</p><p> 基于單片機與無線技術(shù)的投票器的設(shè)計制作過程,以MCS-51系列單片機為控制核心設(shè)計投票系統(tǒng)的投票發(fā)射器與接收器。投票發(fā)射
14、器由單片機、三個按鍵、三個指示燈和NRF24L01模塊等組成.三個鍵分別表示不按代表反對,按下代表同意。投票器把投票結(jié)果信息編碼后通過NRF24L01發(fā)射出去,接收器接收后,辨別發(fā)射傳輸?shù)男畔?,可由液晶屏LCD1602顯示實際投票結(jié)果。</p><p> 2 設(shè)計要求及方案論證</p><p><b> 2.1 設(shè)計要求</b></p><
15、p> 單片機在各種電子產(chǎn)品中的應(yīng)用已經(jīng)越來越廣泛,很多的電子產(chǎn)品利用單片機所取得的便利性得到了人們的好評,針對多路數(shù)據(jù)采集系統(tǒng)的要求提出了以下的方案:</p><p> 設(shè)計一款能進行遠程無線投票的設(shè)備,由多個投票端和一個控制端所組成,模擬遠程投票。其中每一個投票端都有三個按鍵,“贊成”、“反對”和“棄權(quán)”。當(dāng)投票端進行投票后,由控制端顯示投票結(jié)果。</p><p> 2.2
16、 設(shè)計方案及論證</p><p> 2.2.1 控制模塊方案及論證[1]</p><p> 方案1:采用各類數(shù)字電路來組成鍵盤控制系統(tǒng),進行信號處理,如選用CPLD等可編程邏輯器件。本方案電路復(fù)雜,靈活性不高,效率低,不利于系統(tǒng)的擴展,對信號處理比較困難。</p><p> 方案2:采用STC89C52RC單片機作為這個系統(tǒng)的控制單元,可方便利用單片機內(nèi)部的
17、定時器等各種資源,方便程序的編寫和無線射頻模塊的操作。 </p><p> 比較以上兩種方案的優(yōu)缺點,方案1采用中、小規(guī)模器件實現(xiàn)系統(tǒng)的數(shù)控部分,使用的芯片很多,造成控制電路內(nèi)部接口信號繁瑣,中間相互關(guān)聯(lián)多,抗干擾能力差。在方案2中采用單片機完成整個數(shù)控部分的功能,也便于系統(tǒng)功能的擴展。</p><p> 2.2.2 顯示模塊方案及論證[2] </p><p>
18、; 方案1:使用數(shù)碼管顯示</p><p> 使用多位數(shù)碼管顯示,顯示不靈活。</p><p> 方案2:使用LCD1602液晶顯示</p><p> 液晶顯示模塊具有體積小、功耗低、顯示內(nèi)容豐富、超薄輕巧等優(yōu)點。本方案采用LCD1602,它具有兩行顯示,每行顯示16個字符,采用單+5V供電,外圍電路簡單,價格便宜,具有很高的性價比。而數(shù)碼管雖然便宜,但顯示
19、單調(diào)。占用過多的I/O。</p><p> 綜上所述,得到系統(tǒng)整體結(jié)構(gòu)框圖如圖1所示。</p><p> 圖1 系統(tǒng)整體結(jié)構(gòu)框圖</p><p> 3 系統(tǒng)的硬件電路設(shè)計</p><p> 3.1 主控制器模塊的設(shè)計[3]</p><p> 本設(shè)計采用PDIP封裝的STC89C52RC芯片為主控制器,該
20、芯片正常工作電壓為5V,支持的最高時鐘頻率為80MHz,F(xiàn)lash程序存儲器為8KB,RAM數(shù)據(jù)存儲器為512B,內(nèi)置看門狗電路,支持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口、電源、時鐘、看門狗、復(fù)位電路都是經(jīng)過特殊處理。</p><p> ●寬電壓,不怕電源抖動,工作電壓范圍為3.4 – 6V。</p&g
22、t;<p> ●高抗靜電(高ESD保護),輕松過2000V。</p><p><b> ●快速沖干擾。</b></p><p> 控制部分是系統(tǒng)整機協(xié)調(diào)工作和智能化管理的核心部分,采用STC89C52RC單片機實現(xiàn)控制功能是其關(guān)鍵,采用單片機不但方便監(jiān)控,并且大大減少硬件設(shè)計。由于本設(shè)計分兩個板子但上面的單片機最小系統(tǒng)電路是一樣的,所以在此僅以發(fā)射
23、板單片機電路為例。STC89C52RC芯片原理圖如圖2所示。</p><p> 圖圖2 STC89C52RC芯片原理圖</p><p> 3.2 NRF24L01無線模塊的設(shè)計[5]</p><p> NRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無線通信通信芯片,采用 FSK 調(diào)制,內(nèi)部集成NORDI自己的 Enhanced Short Burs
24、t 協(xié)議??梢詫崿F(xiàn)點對點或是 1 對 6 的無線通信[6]。</p><p> 無線通信速度可以達到 2M(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機愛好者只需要為單片機系統(tǒng)預(yù)留 5個GPIO,1個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能,非常適合用來為 MCU 系統(tǒng)構(gòu)建無線通信功能。</p><p> 發(fā)射數(shù)據(jù)時,首先
25、將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū),TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數(shù)據(jù);若自動應(yīng)答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進入接收模式,接收應(yīng)答信號(自動應(yīng)答接收地址應(yīng)該與接收節(jié)點地址TX_ADDR一致)。如果收到應(yīng)答,則認為此次通信
26、成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應(yīng)答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(ARC)達到上限,MAX_RT置高,TX FIFO中數(shù)據(jù)保留以便在次重發(fā);MAX_RT或TX_DS置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時,若CE為低則nRF24L01進入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進入空閑模式2。</p&
27、gt;<p> 接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式,接著延遲130μs進入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效的地址和CRC時,就將數(shù)據(jù)包存儲在RX FIFO中,同時中斷標(biāo)志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。若此時自動應(yīng)答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應(yīng)答信號。最后接收成功時,若CE變低,則nRF24L01進入空閑模式1[7]。</p><p>
28、 NRF24L01內(nèi)部結(jié)構(gòu)如圖3所示,NRF24L01模塊電路圖如圖4所示,NRF24L01指令系統(tǒng)由表1所示[8]。</p><p> 圖3 NRF24L01結(jié)構(gòu)圖</p><p> NRF24L01模塊電路圖如圖4所示。</p><p> 圖4 NRF24L01模塊電路</p><p> NRF24L01的指令列表如表1所示。&
29、lt;/p><p> 表1 NRF24L01令列表</p><p> 3.3 按鍵控制模塊的設(shè)計</p><p> 本設(shè)計中,采用獨立按鍵對單片機核心芯片STC89C52RC進行輸入控制。各按鍵分別一端接地,一端接單片機引腳。實現(xiàn)功能:三個鍵分別表示不按代表反對,按下代表同意。鍵盤控制電路原理圖如圖5所示。</p><p> 圖5 盤
30、控制電路原理圖</p><p> 3.4 液晶顯示模塊的設(shè)計</p><p> 3.4.1 LCD1602主要管腳介紹</p><p> 顯示模塊用于接收機實時顯示投票結(jié)果。這里采用1602液晶顯示屏,其主要參數(shù)為:顯示容量(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: 液晶顯示器對比度調(diào)整端,接正電源的對比度最弱,接地電源是對比度最高,對比度過高時會產(chǎn)生“鬼影”使用時可以通過一個10k的電位器調(diào)整對比度。</p><p
32、> RS: 寄存器選擇,高電平時選擇數(shù)據(jù)存儲器;低電平時選擇指令寄存器。</p><p> R/W:讀寫信號線,高電平時進行讀操作,低電平進行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址;當(dāng)RS為高電平,R/W為低電平時可以寫入數(shù)據(jù)。</p><p> E: 使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。</p><p>
33、 3.4.2 LCD1602控制指令</p><p> 1.清屏指令如表3所示</p><p><b> 表3 清屏指令表</b></p><p> 功能:<1> 清除液晶顯示器,即將DDRAM的內(nèi)容全部填入"空白"的ASCII碼20H;</p><p> <2> 光
34、標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方; <3> 將地址計數(shù)器(AC)的值設(shè)為0。</p><p> 2.顯示開關(guān)控制表如表4所示。</p><p> 表4 顯示開關(guān)控制表</p><p> 功能:設(shè)置顯示,光標(biāo)及閃爍開,關(guān)</p><p> 其中:D表示顯示:1為開,0為關(guān);</p><p&
35、gt; C表示光標(biāo):1為開,0為關(guān)</p><p> D表示閃爍:1為開,0為關(guān)</p><p> 光標(biāo),畫面移動表如表5所示</p><p> 表5 光標(biāo),畫面移動表</p><p> 功能:光標(biāo),畫面移動,不影響DDRAM</p><p> 其中:S/C=1,畫面平移一個字符位</p>&
36、lt;p> S/C=0,光標(biāo)平移一個字符位</p><p> R/L=1:右移;R/L=0:左移</p><p> 功能設(shè)置表如表6所示</p><p><b> 表6 功能設(shè)置表</b></p><p><b> 功能:工作方式設(shè)置</b></p><p>
37、 其中:DL=1,8位數(shù)據(jù)接口;DL=0四位數(shù)據(jù)接口;</p><p> N=1,兩行顯示;N=0,一行顯示;</p><p> F=1,5 10點陣字符;F=0,5 7點陣字符</p><p> 3.4.3 液晶顯示程序設(shè)計</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:顯示關(guān)閉</p><p> 4.寫指令01H:顯示清屏&
40、lt;/p><p> 5.寫指令06H:顯示光標(biāo)移動設(shè)置</p><p> 6.寫指令0CH:顯示開及光標(biāo)設(shè)置</p><p> 3.4.6 LCD1602與單片機連接圖</p><p> LCD1602與單片機連接圖的連接圖如圖8所示。</p><p> 圖8 LCD1602與單片機連接圖</p>
41、<p> 數(shù)據(jù)線DB0-DB7連接單片機的P0口; RS、R/W,E,3條控制線分別接單片機的P2.5、P2.6、P2.7口。電阻R3用來設(shè)置背光的亮度。</p><p> 3.5 振蕩電路設(shè)計模塊的設(shè)計[9]</p><p> 單片機的工作是在統(tǒng)一的脈沖控制下的進行的。這個脈沖就是由單片機控制器的時鐘電路發(fā)出的,即時鐘電路用于產(chǎn)生單片機工作所需的時鐘信號。單片機本身
42、就是一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信號控制下嚴格地按時序進行工作。時鐘電路用于產(chǎn)生單片機工作的時鐘信號。而時鐘電路又各分為兩種,即內(nèi)部時鐘方式和外部時鐘方式。</p><p> 本設(shè)計采用內(nèi)部時鐘方式此種方式時,單片機內(nèi)接一個高增益反向放大器構(gòu)成內(nèi)部振蕩器。引腳XTAL1和XTAL2分別此放大器的輸入端和輸出端。同時在XTAL1和XTAL2兩端跨接晶體或陶瓷諧振器構(gòu)成穩(wěn)定
43、的自激振蕩器,其發(fā)出的脈沖信號直接送入到內(nèi)部時鐘發(fā)生器。電容C1和C2通常選擇為(30+或-10)pf左右;外接陶瓷諧振器時則選為47pf左右。電容C1和 C2對頻率有微調(diào)作用。為了減少寄生電容,更好地保證振蕩器可靠地工作,諧振器和電容應(yīng)安裝得與單片機芯片盡可能的近。內(nèi)部時鐘發(fā)生器實際上是一個二分頻的觸發(fā)器,該二分頻為單片機提供一個二相的時鐘信號即相位信號1(P1)和相位信號2(P2),驅(qū)動CPU產(chǎn)生執(zhí)行指令功能的機器周期。這里我們采用
44、的是12MHz晶振,也就時說單片機的時鐘周期為1/12uS,指令周期為1uS。晶體振蕩器的頻率越高,振蕩頻率就越高,振蕩電路原理圖如圖9所示。</p><p> 圖9 振蕩電路原理圖</p><p> 3.6 晶振電路與復(fù)位電路設(shè)計[10]</p><p> 3.6.1 晶振電路</p><p> 晶振電路為單片機AT89C51工
45、作提供時鐘信號,芯片中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片外石英晶體或陶瓷諧振蕩器一起構(gòu)成自激振蕩器。電路中的外接石英晶體及電容C5、C6接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。由于外接電容C5、C6的容量大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性,如果使用石英晶體,電容的容量大小范圍為20pF~40pF;如果
46、使用陶瓷諧振,則電容容量大小為30 pF~50 pF。本設(shè)計中使用石英晶體,電容的容值設(shè)定為30pF。</p><p> 3.6.2 復(fù)位電路</p><p> 復(fù)位電路的基本功能是:系統(tǒng)上電時提供復(fù)位信號,直至系統(tǒng)電源穩(wěn)定后,撤銷復(fù)位信號。為可靠起見,電源穩(wěn)定后還要經(jīng)一定的延時才撤銷復(fù)位信號,以防電源開關(guān)或電源插頭分合過程中引起的抖動而影響復(fù)位。單片機在啟動時都需要復(fù)位,以使CPU
47、及系統(tǒng)各部件處于確定的初始狀態(tài),并從初態(tài)開始工作。AT89C51的復(fù)位信號是從REST引腳輸入到芯片內(nèi)的施密特觸發(fā)器中的。當(dāng)系統(tǒng)處于正常工作狀態(tài)時,且振蕩器穩(wěn)定后,如果REST引腳上有一個高電平并維持2個機器周期(24個振蕩周期)以上,則CPU就可以響應(yīng)并將系統(tǒng)復(fù)位。單片機系統(tǒng)的復(fù)位方式有:手動按鈕復(fù)位和上電復(fù)位,本設(shè)計采用的是手動按鈕復(fù)位。</p><p> 手動按鈕復(fù)位需要人為在復(fù)位輸入端REST上加入高電
48、平,采用的辦法是在REST端和正電源Vcc之間接一個按鈕。當(dāng)人為按下按鈕時,則Vcc的+5V電平就會直接加到REST端,系統(tǒng)復(fù)位。由于人的動作再快也會使按鈕保持接通達數(shù)十毫秒,所以,設(shè)計完全能夠滿足復(fù)位的時間要求。復(fù)位電路中SW-PB為手動復(fù)位開關(guān),電容Ch1可避免高頻諧波對電路的干擾。</p><p> 因為 MCS-51系列單片機采用高電平復(fù)位方式,其內(nèi)部復(fù)位電路如圖3-15所示,高電平復(fù)位脈沖RST引腳輸
49、入到內(nèi)部施密特觸發(fā)器整形后,送CPU內(nèi)部復(fù)位電路。CPU在每一個機器周期的S5P2相采樣施密特觸發(fā)器的輸出端,若為高電平,則強迫機器進入復(fù)位狀態(tài)。為了保證CPU內(nèi)部各個單元電路可靠復(fù)位,RST引腳復(fù)位脈沖高電平維持時間必須大于等于2個機器周期(即24個振蕩周期)。內(nèi)部復(fù)位電路如圖10所示。 </p><p><b> 圖10 復(fù)位電路</b></p><p
50、> 可以使用RC分立元件或微處理器監(jiān)控芯片構(gòu)成MCS-51單片機的外部復(fù)位電路。本設(shè)計中采用RC分立元件構(gòu)成MCS-51外部復(fù)位電路,外部復(fù)位電路圖電路如圖11所示。</p><p> 圖11 外部復(fù)位電路</p><p> 按下復(fù)位按鍵K20時,電容C3通過R1放電,當(dāng)電容放電結(jié)束后,RST引腳電位由R1、R2分壓比決定。由于R2>>R1,因此RST引腳為高電平,
51、CPU進入復(fù)位狀態(tài)。松開復(fù)位按鍵后,電容C3充電,RST引腳電位下降,使CPU脫離復(fù)位狀態(tài)。R1的作用在于限制復(fù)位按鈕瞬間電容C3的放電電流,避免產(chǎn)生火花,以保護按鈕的觸點。</p><p> 單片機的復(fù)位都是靠外部電路實現(xiàn)的,在時鐘電路工作后,只要在單片機的RST引腳上出現(xiàn)24個時鐘振蕩脈沖以上的高電平,單片機便實現(xiàn)初始化狀態(tài)復(fù)位。為了保證應(yīng)用系統(tǒng)可靠地復(fù)位,在設(shè)計復(fù)位電路時,通常使RST保持高電平。只要RS
52、T保持高電平,則單片機就循環(huán)復(fù)位。</p><p> 3.7 電源模塊的設(shè)計</p><p> 本設(shè)計兩塊板子都是用USB供電方式,以USB接口接收電腦或充電器5V電源,輸入后經(jīng)過100uf和0.1uf電容濾波后,提供給系統(tǒng)。電源模塊電路圖如圖12所示。</p><p> 圖12 電源模塊電路圖</p><p><b>
53、4 系統(tǒng)軟件設(shè)計</b></p><p> 4.1 用C語言開發(fā)單片機的優(yōu)勢[11]</p><p> C語言是一種編譯型的結(jié)構(gòu)化程序設(shè)計語言,具有簡單的語法結(jié)構(gòu)和強大的處理功能,具有運行速度快、編譯效率高,移植性好和可讀性強等多種優(yōu)點,可以實現(xiàn)對系統(tǒng)便件的直接操作。用C語言來編寫目標(biāo)系統(tǒng)軟件,可以大大縮短開發(fā)周期,且明顯地增加軟件的可讀性,便于改進和擴充,從而開發(fā)出大
54、規(guī)模、高性能的應(yīng)用系統(tǒng)。</p><p> 4.2 系統(tǒng)程序設(shè)計流程圖</p><p> 此系統(tǒng)中用到單片機的部分功能:鍵盤擴展,程序中斷,I/O控制等。主程序基本沒什么是可做,但因鍵盤掃描時通過程序查詢的方式來實現(xiàn)的,所以在主程序中要調(diào)用鍵盤掃描程序。發(fā)射板系統(tǒng)流程圖如圖13所示,接收板流程圖如圖14所示。</p><p> 圖13 發(fā)射板程序流程圖<
55、;/p><p> 圖14 接收板程序流程圖</p><p><b> 軟件編譯與調(diào)試</b></p><p> Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。本設(shè)計軟件
56、編譯使用的是uVision2編譯器</p><p> 選擇CPU型號窗口中選擇CPU生產(chǎn)廠家及芯片型號。這里選擇的是Atmel公司的AT89C52芯片。選擇芯片界面設(shè)置如圖15所示。</p><p> 圖15 選擇芯片界面設(shè)置</p><p> 程序代碼編寫完后需要編譯鏈接生成目標(biāo)代碼,然后進行硬件調(diào)試或模擬仿真,編譯代碼可以點擊或鍵盤的快捷鍵F7。編譯后
57、的結(jié)果如圖16所示。</p><p> 圖16 軟件編譯結(jié)果界面</p><p> 編譯軟件后,要對代碼進行下載到STC89C52RC單片機中。這里選用的是STC-ISP下載軟件,STC程序下載界面如圖17所示。</p><p> 圖17 STC程序下載界面</p><p><b> 4.4 液晶顯示</b>
58、</p><p> LCD1602己很普遍了,市面上字符液晶絕大多數(shù)基于HD44780液晶芯片的,控制原理就是完全相同的,HD44780寫的控制程序可以很方便地應(yīng)用于市面上大部分的字符型液晶,字符型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模塊程序設(shè)計[9]</p><p&g
67、t; 該射頻模塊集成了NORDIC公司生產(chǎn)的無線射頻芯片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 調(diào)試結(jié)果與分析</p><p><b> 5.1 測試儀器</b></p><p> 萬用表,軟件Protues。</p><p><b> 5.2 測試方法</b></p><p> 先接通電源,看看系統(tǒng)能否正常工作,如果不能,可以在系統(tǒng)供電情況下,用萬用表檢測發(fā)射板
70、和接收板各個模塊的電壓,如果出現(xiàn)電壓為0或者無限大的情況,則為短路或者斷路,一一排查之后可以確定是哪個地方的問題,檢修后再次接通電源調(diào)試,使用protues軟件事先調(diào)試按鍵邏輯與顯示邏輯觀察是否正常。</p><p> 5.3 調(diào)試過程與分析</p><p> 在本次設(shè)計過程中,由于使用的是宏晶的STC89C52RC芯片,這個系列的程序下載只需通過MAX232下載接口就可以。使得本次
71、設(shè)計中硬件仿真變的就比較簡單,因為有了硬件仿真工具就可以隨時修改程序,通過一步一步的調(diào)試來達到最后的目的,同時尤其學(xué)會了分部調(diào)試的思想,這就使得當(dāng)遇到問題時不會覺得無從下手,不會覺得那么迷茫,使調(diào)試變得比較有條理。</p><p> 在檢查完硬件電路沒有短路、斷路的情況下,接通電源,并且測試各個集成片的電源電壓是否符合要求,以及單片機晶振是否起振,只有晶振正常起振單片機才能工作,通過檢測,上述情況均正常。<
72、;/p><p> 在protues軟件當(dāng)中以單步聯(lián)調(diào)的方法,測試按鍵邏輯與LCD1602現(xiàn)實邏輯在實際電路調(diào)試過程中,由于沒有深入的了解24l01的收發(fā)機制,導(dǎo)致第一次試驗接收器,經(jīng)常接受到亂碼,系統(tǒng)不能正常工作。在查閱相關(guān)資料和優(yōu)化代碼后,以多次檢測接受數(shù)據(jù)的方法,成功解決了該問題。</p><p> 此外,雖然本設(shè)計可以實現(xiàn)最基本的無線投票并有智能輸出結(jié)果的功能,但作為一個無線投票器
73、的設(shè)計在功能方面還存在很多不足和需要改進之處。譬如,投票過程中只能通過液晶顯示其投票結(jié)果,而不能顯示贊成和反對以及棄權(quán)的票數(shù)。但由于時間、硬件、經(jīng)濟等各方面條件的限制,我在此就不能作大的改動,只能附上一段程序,如果在主程序改成如下,并加之硬件條件的配合,便能實現(xiàn)無線投票并統(tǒng)計票數(shù)的功能:</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> 經(jīng)過編碼的投票信息經(jīng)發(fā)射模塊發(fā)射,然后被接收板的接收模塊接收后,又經(jīng)單片機辨別后輸出到液晶屏。任意按下兩個按鍵,液晶顯示如圖19所示。</p><p><b> 圖19液晶顯示現(xiàn)象</b></p><p><b> 5.4
77、 測試結(jié)論</b></p><p> 當(dāng)按下不同的按鍵后,接收板1602液晶屏上,能準確顯示投票信息,實測傳輸有效距離超過10米。</p><p><b> 參考文獻</b></p><p> [1] 高偉.AT89C51單片機原理及應(yīng)用(第一版)[M].北京:國防工業(yè)出版社,2008,71-75</p><
78、;p> [2] 趙亮.液晶顯示模塊LCD1602應(yīng)用[J] .電子制作,2007年3月</p><p> [3] 江太輝.MCS-51系列單片機原理與應(yīng)用[M]. 廣州:華南理工大學(xué)出版社,1900-01,40~45</p><p> [4] 潘永雄.新編單片機原理與應(yīng)用[M].西安電子科技大學(xué)出版社,2007-02,19~25,65~66</p><p&g
79、t; [5] 英慶,王代華,張志杰.基于nRF24L01的無線數(shù)據(jù)傳輸系統(tǒng)[J].現(xiàn)代電子技術(shù),2008,31(7):68-82.</p><p> [6] 丁永紅,孫運強.基于nRF2401的無線數(shù)傳系統(tǒng)設(shè)計[J].國外電子測量技術(shù),2008,27(4):45-47.</p><p> [7] 時志云,蓋建平,王代華,等.新型高速無線射頻器件nRF24L01及其應(yīng)用[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] 張萌,和湘,姜斌.單片機應(yīng)用系統(tǒng)開發(fā)綜合實例(第一版)[M].北京:清華大學(xué)出版社,2007,94-97</p><p> [11] 譚浩強.C程序設(shè)計(第二版) [M] .北京:清華大學(xué)出版社,2006-01</p><p> [12] 白倫博,陳棟,宋愛慧.一種無線通信系統(tǒng)中無線信號傳輸間歇時發(fā)
82、射數(shù)據(jù)突發(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> //************************************數(shù)碼管位選*********************************************</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 // 讀取接收數(shù)據(jù)指令</p><p> #define WR_TX_PLOAD 0xA0 // 寫待發(fā)數(shù)據(jù)指令</p><p> #def
95、ine FLUSH_TX 0xE1 // 沖洗發(fā)送 FIFO指令</p><p> #define FLUSH_RX 0xE2 // 沖洗接收 FIFO指令</p><p> #define REUSE_TX_PL 0xE3 // 定義重復(fù)裝載數(shù)據(jù)指令</p><p> #define NOP
96、 0xFF // 保留</p><p> //*************************************SPI(nRF24L01)寄存器地址****************************************************</p><p> #define CONFIG 0x00 // 配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)
97、狀態(tài)響應(yīng)方式</p><p> #define EN_AA 0x01 // 自動應(yīng)答功能設(shè)置</p><p> #define EN_RXADDR 0x02 // 可用信道設(shè)置</p><p> #define SETUP_AW 0x03 // 收發(fā)地址寬度設(shè)置</p><p> #
98、define SETUP_RETR 0x04 // 自動重發(fā)功能設(shè)置</p><p> #define RF_CH 0x05 // 工作頻率設(shè)置</p><p> #define RF_SETUP 0x06 // 發(fā)射速率、功耗功能設(shè)置</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接收數(shù)據(jù)地址</p>
100、<p> #define RX_ADDR_P1 0x0B // 頻道1接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P2 0x0C // 頻道2接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P3 0x0D // 頻道3接收數(shù)據(jù)地址</p><p> #define RX_ADD
101、R_P4 0x0E // 頻道4接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P5 0x0F // 頻道5接收數(shù)據(jù)地址</p><p> #define TX_ADDR 0x10 // 發(fā)送地址寄存器</p><p> #define RX_PW_P0 0x11 // 接收頻道0接收數(shù)
102、據(jù)長度</p><p> #define RX_PW_P1 0x12 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P2 0x13 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P3 0x14 // 接收頻道0接收數(shù)據(jù)長度</p><
103、p> #define RX_PW_P4 0x15 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P5 0x16 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define FIFO_STATUS 0x17 // FIFO棧入棧出狀態(tài)寄存器設(shè)置</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)標(biāo)志</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> /*延時函數(shù)</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應(yīng)答允許</p><p> SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 </p><p> SPI_RW_Reg(WRITE_REG +
117、 RF_CH, 0); // 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致</p><p> SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為32字節(jié)</p><p> SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //設(shè)置發(fā)射速率為1MHZ,發(fā)射
118、功率為最大值0dB</p><p><b> }</b></p><p> /****************************************************************************************************</p><p> /*函數(shù):uint SPI_RW(uint
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投票管理畢業(yè)論文
- 畢業(yè)論文——asp網(wǎng)上投票系統(tǒng)設(shè)計
- 畢業(yè)論文——在線投票系統(tǒng)
- 畢業(yè)論文——在線投票系統(tǒng)
- 畢業(yè)論文——在線投票系統(tǒng)
- 畢業(yè)論文---網(wǎng)上投票系統(tǒng)的設(shè)計與實現(xiàn)
- 無線傳感器系統(tǒng)的設(shè)計【畢業(yè)論文】
- 累積投票制度研究【畢業(yè)論文】
- 畢業(yè)論文——在線投票系統(tǒng) (2)
- 畢業(yè)論文——在線投票系統(tǒng) (2)
- 智能小車的無線控制器設(shè)計畢業(yè)論文
- 網(wǎng)站投票系統(tǒng)-本科畢業(yè)論文
- 基于zigbee的無線點菜器畢業(yè)論文
- 無線門鈴設(shè)計畢業(yè)論文
- 畢業(yè)論文---無線鼠標(biāo)設(shè)計
- 無線傳感器網(wǎng)絡(luò)畢業(yè)論文
- 畢業(yè)論文范文——無線調(diào)頻發(fā)射器的設(shè)計
- 單片機無線搶答器設(shè)計畢業(yè)論文
- 畢業(yè)論文范文——企業(yè)電子投票系統(tǒng)
- 基于arm的無線傳感器網(wǎng)絡(luò)節(jié)點設(shè)計畢業(yè)論文
評論
0/150
提交評論