版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 單片機(jī)原理與接口技術(shù)</p><p> 課 程 設(shè) 計(jì)</p><p><b> 目 錄</b></p><p><b> 1設(shè)計(jì)任務(wù)4</b></p><p><b> 2 設(shè)計(jì)方案5</b></p><p>
2、 2.1 任務(wù)分析5</p><p><b> 2.2方案設(shè)計(jì)6</b></p><p><b> 3系統(tǒng)硬件設(shè)計(jì)8</b></p><p> 3.1晶振電路設(shè)計(jì)8</p><p> 3.2 復(fù)位電路設(shè)計(jì)9</p><p> 3.3 鍵盤電路設(shè)計(jì)10&l
3、t;/p><p> 3.4 顯示電路設(shè)計(jì)11</p><p> 3.5 蜂鳴器電路設(shè)計(jì)12</p><p> 4系統(tǒng)軟件設(shè)計(jì)12</p><p> 4.1 系統(tǒng)程序設(shè)計(jì)流程圖12</p><p> 4.2 數(shù)碼管顯示子程序設(shè)計(jì)13</p><p> 4.3 鍵盤掃描子程序設(shè)計(jì)
4、15</p><p><b> 5 調(diào)試19</b></p><p> 5.1 調(diào)試軟件環(huán)境簡(jiǎn)介19</p><p> 5.2 實(shí)驗(yàn)板調(diào)試效果圖20</p><p><b> 6 總 結(jié)22</b></p><p><b> 參考文獻(xiàn)22<
5、;/b></p><p> 附錄1:系統(tǒng)原理圖24</p><p> 附錄2:程序清單25</p><p><b> 1設(shè)計(jì)任務(wù)</b></p><p> 根據(jù)所學(xué)的知識(shí),設(shè)計(jì)一個(gè)電子密碼鎖,利用發(fā)光二極管的亮滅來(lái)代表鎖的開(kāi)閉。</p><p> 隨著我國(guó)現(xiàn)代化建設(shè)的日益完善,
6、人們的生活水平也不斷提高,家中的貴重物品自然也就越來(lái)越多。在這樣的時(shí)代背景下,如何防盜的問(wèn)題也就顯得尤為重要了。傳統(tǒng)鎖具已經(jīng)無(wú)法阻止竊賊的腳步了,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的青睞。</p><p> 本設(shè)計(jì)以單片機(jī)89C51作為密碼鎖監(jiān)控裝置的檢測(cè)和控制核心,分為主機(jī)控制和從機(jī)執(zhí)行機(jī)構(gòu)(本設(shè)重點(diǎn)介紹主機(jī)設(shè)計(jì)),實(shí)現(xiàn)以下功能:</p><p> 1、開(kāi)
7、鎖:下載程序后,輸入初始密碼,8位LED亮,代表鎖被打開(kāi),輸入密碼時(shí),六位數(shù)碼管依次顯示小橫杠。</p><p> 2、更改密碼:只有當(dāng)開(kāi)鎖(LED亮)后,該功能方可使用。首先按下更改密碼鍵S16,然后設(shè)置相應(yīng)密碼,此時(shí)六位數(shù)碼管會(huì)顯示設(shè)置密碼對(duì)應(yīng)的數(shù)字。最后設(shè)置完六位后,按下確認(rèn)鍵S17確認(rèn)密碼更改,此后新密碼即生效。</p><p> 3、重試密碼:當(dāng)輸入密碼時(shí),密碼輸錯(cuò)后按下重試
8、鍵S18,可重新輸入六位密碼。</p><p> 當(dāng)設(shè)置密碼時(shí),設(shè)置中途想更改密碼,也可按下此鍵重新設(shè)置。</p><p> 4、關(guān)閉密碼鎖:按下關(guān)閉鍵S19即可將打開(kāi)的密碼鎖關(guān)閉。</p><p> 5、開(kāi)發(fā)板矩陣鍵盤上的S6—S15鍵分別代表數(shù)字0-9。</p><p><b> 2 設(shè)計(jì)方案</b><
9、/p><p><b> 2.1 任務(wù)分析</b></p><p> 根據(jù)設(shè)計(jì)要求,可以用電位器來(lái)模擬溫度的變化,用微控制器來(lái)控制模擬溫度的測(cè)量和顯示,其任務(wù)設(shè)計(jì)方案原理圖如圖2.1所示:</p><p> 圖2.1 設(shè)計(jì)方案原理圖</p><p><b> 2.2方案設(shè)計(jì)</b></p
10、><p> 根據(jù)設(shè)計(jì)方案原理圖,每個(gè)模塊的方案設(shè)計(jì)詳細(xì)內(nèi)容如下。</p><p> 2.2.1控制器選型</p><p> 控制器選擇STC 89C51RC 單片機(jī)作為密碼鎖的控制器。STC89C51RC 單片機(jī)是宏晶科技推出的新一代高速/低功耗/超強(qiáng)抗干擾的單 片機(jī),指令代碼完全兼容傳統(tǒng)8051 單片機(jī)。</p><p><b>
11、; 主要特性如下:</b></p><p> 1. 增強(qiáng)型8051 單片機(jī),6 時(shí)鐘/機(jī)器周期和12 時(shí)鐘/機(jī)器周期可以任意 選擇,指令代碼完全兼容傳統(tǒng)8051;</p><p> 2. 工作電壓:5.5V~3.3V(5V 單片機(jī))/3.8V~2.0V(3V 單片機(jī));</p><p> 3. 工作頻率范圍:0~40MHz,相當(dāng)于普通8051 的
12、0~80MHz,實(shí)際工作 頻率可達(dá)48MHz;</p><p> 4. 用戶應(yīng)用程序空間為4K 字節(jié);</p><p> 5. 片上集成512 字節(jié)RAM;</p><p> 6. 通用I/O 口(32 個(gè)),復(fù)位后為:P1/P2/P3/P4 是準(zhǔn)雙向口/弱上拉, P0 口是漏極開(kāi)路輸出,作為總線擴(kuò)展用時(shí),不用加上拉電阻,作為 I/O 口用時(shí),需加上拉電阻;&
13、lt;/p><p> 7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無(wú)需專用編程器,無(wú) 需專用仿真器,可通過(guò)串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片;</p><p> 8. 具有EEPROM 功能;</p><p> 9. 具有看門狗功能;</p><p> 10. 通用異步串行口(UART
14、),還可用定時(shí)器軟件實(shí)現(xiàn)多個(gè)UART;</p><p> 11. 工作溫度范圍:-40~+85℃(工業(yè)級(jí))/0~75℃(商業(yè)級(jí));</p><p> 12. PDIP 封裝;</p><p> 工作模式:掉電模式:典型功耗<0.1μA,可由外部中斷喚醒,中斷返回后,繼續(xù)執(zhí)行原程序;</p><p> 空閑模式:典型功耗2mA;&
15、lt;/p><p> 正常工作模式:典型功耗4Ma~7mA;</p><p> 掉電模式可由外部中斷喚醒,適用于水表、氣表等電池供電系統(tǒng)及便攜設(shè)備。</p><p> 其管腳圖如圖2.2所示</p><p> 圖2.2 STC89C51管腳圖 </p><p><b> 2.2.2顯示設(shè)計(jì)<
16、/b></p><p> 本設(shè)計(jì)采用數(shù)碼管顯示,數(shù)碼管顯示明顯,易于控制。數(shù)碼管是靠點(diǎn)亮內(nèi)部不同的發(fā)光二極管發(fā)光,從而顯示不同的形狀。下面對(duì)數(shù)碼管進(jìn)行詳細(xì)的介紹。數(shù)碼管內(nèi)部原理圖如圖2.3所示: </p><p> 圖2.3 數(shù)碼管內(nèi)部原理圖</p><p> 從圖2.3可以看出,一位數(shù)碼管的引腳是10個(gè),顯示一個(gè)8字需要7個(gè)小段,另外還有一個(gè)小數(shù)點(diǎn)
17、,所以其內(nèi)部一共有8個(gè)小的發(fā)光二極管,最后還有另兩個(gè)引腳是公共端,連接在一起。</p><p><b> 3系統(tǒng)硬件設(shè)計(jì)</b></p><p> 根據(jù)設(shè)計(jì)要求,系統(tǒng)硬件部分主要由四部分組成,分別是晶振電路、復(fù)位電路、矩陣鍵盤電路、顯示電路、蜂鳴器電路。</p><p><b> 3.1晶振電路設(shè)計(jì)</b></
18、p><p> 單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時(shí)鐘頻率,單片機(jī)晶振提供的時(shí)鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時(shí)鐘頻率。在通常工作條件下,普通的晶振頻率絕對(duì)精度可達(dá)百萬(wàn)分之五十。高級(jí)的精度更高。有些晶振還可以由外加電壓在一定范圍內(nèi)調(diào)整頻率,稱為壓控振蕩器(VCO)。晶振用一種能把電能和機(jī)械能相
19、互轉(zhuǎn)化的晶體在共振的狀態(tài)下工作,以提供穩(wěn)定,精確的單頻振蕩。 單片機(jī)晶振的作用是為系統(tǒng)提供基本的時(shí)鐘信號(hào)。通常一個(gè)系統(tǒng)共用一個(gè)晶振,便于各部分保持同步。有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而通過(guò)電子調(diào)整頻率的方法保持同步。晶振通常與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時(shí)鐘頻率。如果不同子系統(tǒng)需要不同頻率的時(shí)鐘信號(hào),可以用與同一個(gè)晶振相連的不同鎖相環(huán)來(lái)提供。STC 89C51單片機(jī)內(nèi)部的晶振電路如圖3.1所示:</p&g
20、t;<p> 圖3.1 晶振電路圖</p><p> 3.2 復(fù)位電路設(shè)計(jì)</p><p> 復(fù)位是單片機(jī)的初始化操作,單片機(jī)在啟動(dòng)運(yùn)行時(shí),都需要先復(fù)位,它的作用是使用CPU和系統(tǒng)中其它部件都處于一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作,本設(shè)計(jì)采用外部按鍵電平復(fù)位電路。如圖3.2所示,當(dāng)按下按鈕時(shí),RESET 管腳高電平觸發(fā)。為保證復(fù)位可靠,參數(shù)選取應(yīng)保證復(fù)位高電平持
21、續(xù)時(shí)間大于兩個(gè)機(jī)器周期。</p><p> 圖3.2 按鍵電平復(fù)位電路</p><p> 3.3 鍵盤電路設(shè)計(jì)</p><p> 矩陣鍵盤能減少鍵盤與單片機(jī)接口時(shí)所占用的I/O線的數(shù)目,在按鍵比較多的時(shí)候,通常采用這樣方法。所以本設(shè)計(jì)就采用矩陣鍵盤,其原理如圖3.3所示:</p><p> 圖3.3矩陣鍵盤原理圖</p>
22、<p> 利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個(gè)按鍵的鍵盤。在這種行列式矩陣鍵盤非鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無(wú)按鍵按下的程序段。</p><p> 當(dāng)確認(rèn)有按鍵按下后,下一步就要識(shí)別哪一個(gè)按鍵按下。對(duì)鍵的識(shí)別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。</p><p>
23、 下面說(shuō)明線反轉(zhuǎn)法的工作原理:</p><p> 首先辨別鍵盤中有無(wú)鍵按下,有單片機(jī)I/O口向鍵盤送全掃描字,然后讀入行線狀態(tài)來(lái)判斷。方法是:向行線輸出全掃描字00H,把全部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器A中。如果有按鍵按下,總會(huì)有一根行線電平被拉至低電平從而使行線不全為1。判斷鍵盤中哪一個(gè)鍵被按下使通過(guò)將列線逐列置低電平后,檢查行輸入狀態(tài)來(lái)實(shí)現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài)
24、,如果全為1,則所按下的鍵不在此列;如果不全為1,則所按下的鍵必在此列,而且是在與零電平行線相交的交點(diǎn)上的那個(gè)鍵。</p><p> 具體的按鍵功能設(shè)計(jì)如表3.1:</p><p> 表3.1 矩陣鍵盤上各個(gè)鍵的功能</p><p> 3.4 顯示電路設(shè)計(jì)</p><p> 本設(shè)計(jì)采用的是6位8段數(shù)碼管。數(shù)碼管內(nèi)部二極管點(diǎn)亮?xí)r,電流太
25、大會(huì)燒毀二極管,太低則不能點(diǎn)亮。二極管需要5mA以上的電流才能點(diǎn)亮,但是單片機(jī)的I/O口送不出如此大的電流,所以數(shù)碼管與單片機(jī)連接時(shí),需要加驅(qū)動(dòng)電路,可以用上拉電阻的方法或用專門的驅(qū)動(dòng)芯片來(lái)驅(qū)動(dòng)。本設(shè)計(jì)采用的是74HC573鎖存器,其輸出電流比較大,而且電路也比較簡(jiǎn)單。這里用了兩個(gè)鎖存器,一個(gè)用于鎖存段選信號(hào),一個(gè)用于鎖存位選信號(hào)。而這兩個(gè)鎖存器則由I/O口P2.6和P2.7控制,而輸出信號(hào)都用I/O口P0送出。數(shù)碼管的連接圖如圖3.4
26、所示:</p><p> 圖3.4 數(shù)碼管連接圖</p><p> 3.5 蜂鳴器電路設(shè)計(jì)</p><p> 蜂鳴器在此設(shè)計(jì)主要是為了提供按鍵提醒,通過(guò)一個(gè)三極管來(lái)提供驅(qū)動(dòng),蜂鳴器一端接高電平,一端接三極管的發(fā)射極,三極管的基極通過(guò)一個(gè)電阻接I/O口的P2.3,集電極接地。當(dāng)P2.3口送出低電平時(shí),三極管接通,蜂鳴器接通,發(fā)出響聲。蜂鳴器電路如圖3.5所示
27、:</p><p> 圖3.5 蜂鳴器控制電路</p><p><b> 4系統(tǒng)軟件設(shè)計(jì)</b></p><p> 按照設(shè)計(jì)任務(wù)設(shè)計(jì)要求,軟件部分設(shè)計(jì)主要分為三部分,系統(tǒng)程序流程圖設(shè)計(jì),數(shù)碼管顯示子程序設(shè)計(jì)和按鍵掃描子程序設(shè)計(jì)。</p><p> 4.1 系統(tǒng)程序設(shè)計(jì)流程圖</p><p>
28、; 系統(tǒng)程序流程圖如圖4.1所示:</p><p> 圖4.1 主程序流程圖 </p><p> 4.2 數(shù)碼管顯示子程序設(shè)計(jì)</p><p> LED顯示器工作方式有兩種:靜態(tài)顯示方式和動(dòng)態(tài)顯示方式。靜態(tài)顯示的特點(diǎn)是每個(gè)數(shù)碼管的段選必須接一個(gè)8位數(shù)據(jù)線來(lái)保持顯示的字形碼。當(dāng)送入一次字形碼后,顯示字形可一直保持,直到送入新字形碼為止。這種方法的優(yōu)點(diǎn)是占用C
29、PU時(shí)間少,顯示便于監(jiān)測(cè)和控制。缺點(diǎn)是硬件電路比較復(fù)雜,成本較高;動(dòng)態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。選亮數(shù)碼管采用動(dòng)態(tài)掃描顯示。所謂動(dòng)態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺(jué)暫留作用,使人的感覺(jué)好像各位數(shù)碼管同時(shí)都在顯示。動(dòng)態(tài)顯示的亮度比靜態(tài)顯示要差一些。</p><p> 本設(shè)計(jì)使用動(dòng)態(tài)顯示方法。</p>&l
30、t;p> void display()</p><p> { uchar i,j,cs=0x7f;</p><p> for(i=num;i>0;i--)</p><p><b> { </b></p><p> P0=table[0];</p><p> cs=_cro
31、l_(cs,1);</p><p><b> P2=cs;</b></p><p> delay(10);</p><p><b> }</b></p><p> for(j=4-num;j>0;j--)</p><p><b> {</b&g
32、t;</p><p> P0=table[1];</p><p> cs=_crol_(cs,1);</p><p><b> P2=cs;</b></p><p> delay(10);</p><p><b> }</b></p><p>
33、;<b> }</b></p><p> 按下確認(rèn)鍵后執(zhí)行功能子程序:(使用標(biāo)志變量flg,根據(jù)其值來(lái)選擇執(zhí)行相應(yīng)的功能)</p><p><b> void ok()</b></p><p> {uchar i=0;</p><p> display(); // P0=(flg+1);
34、delay(1000);</p><p> if(flg==0)</p><p><b> {</b></p><p> for(i=0;i<4;i++)</p><p> if(keyword[i]!=keycmp[i]) {alarm();break;}</p><p> if
35、(num==4) {relay=0;num=0;}</p><p><b> }</b></p><p> if(flg==2)</p><p><b> {</b></p><p><b> num=0;</b></p><p> for(i
36、=0;i<4;i++) keyword[i]=keycmp[i];</p><p><b> flg=0;</b></p><p><b> }</b></p><p> if(flg==1)</p><p><b> {</b></p><p
37、> for(i=0;i<4;i++)</p><p> if(keyword[i]!=keycmp[i]) {alarm();break;}</p><p> if(num==4)</p><p><b> {</b></p><p><b> num=0;</b></p
38、><p> display(); // P0=0x07;delay(1000);</p><p><b> flg=2;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }&l
39、t;/b></p><p> 4.3 鍵盤掃描子程序設(shè)計(jì)</p><p> 鍵盤是單片機(jī)常用輸入設(shè)備,在按鍵數(shù)量較多時(shí),為了節(jié)省I/O口等單片機(jī)資源,一般采取掃描的方式來(lái)識(shí)別到底是哪一個(gè)鍵被按下。即通過(guò)確定被按下的鍵處在哪一行哪一列來(lái)確定該鍵的位置,獲取鍵值以啟動(dòng)相應(yīng)的功能程序。</p><p> 查找哪個(gè)按鍵被按下的方法為:一個(gè)一個(gè)地查找。 先第一行輸
40、出0,檢查列線是否非全高;否則第二行輸出0,檢查列線是否非全高;否則第三行輸出0,檢查列線是否非全高;如果某行輸出0時(shí),查到列線非全高,則該行有按鍵按下;根據(jù)第幾行線輸出0與第幾列線讀入為0,即可判斷在具體什么位置的按鍵按下。</p><p> void keyscan()</p><p><b> {</b></p><p> ucha
41、r temp1,temp2;</p><p> P1=0xfe;//令第一列為低電平,檢測(cè)第1列</p><p><b> temp1=P1;</b></p><p> if(temp1!=0xfe)</p><p><b> {</b></p><p> dela
42、y(5);//去抖</p><p><b> temp2=P1;</b></p><p> if(temp1==temp2)</p><p><b> {</b></p><p> switch(temp2)</p><p><b> {</b&g
43、t;</p><p> Case 0xf6: if(num<4){key=1;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xee: if(num<4)
44、{key=4;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xde: if(num<4){key=7;keycmp[num]=key;num++;display();}</p>
45、;<p> else alarm();</p><p><b> break;</b></p><p> case 0xbe: set();break;</p><p><b> }</b></p><p><b> }</b></p>&
46、lt;p><b> }</b></p><p> while(temp1!=0xfe)temp1=P1;//等待按鍵釋放</p><p> P1=0xfd;//檢測(cè)第2列</p><p><b> temp1=P1;</b></p><p> if(temp1!=0xfd)<
47、/p><p><b> {</b></p><p> delay(5);//去抖</p><p><b> temp2=P1;</b></p><p> if(temp1==temp2)</p><p><b> {</b></p>
48、<p> switch(temp2)</p><p><b> {</b></p><p> case 0xf5: if(num<4){key=2;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b>
49、; break;</b></p><p> case 0xed: if(num<4){key=5;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0
50、xdd: if(num<4){key=8;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xbd: if(num<4){key=0;keycmp[num]=key;num++;dis
51、play();}</p><p> else alarm();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b>
52、;</p><p> while(temp1!=0xfd)temp1=P1;//等待按鍵釋放</p><p> P1=0xfb;//檢測(cè)第3列</p><p><b> temp1=P1;</b></p><p> if(temp1!=0xfb)</p><p><b> {
53、</b></p><p> delay(5);//去抖</p><p><b> temp2=P1;</b></p><p> if(temp1==temp2)</p><p><b> {</b></p><p> switch(temp2)<
54、/p><p><b> {</b></p><p> case 0xf3: if(num<4){key=3;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p>
55、<p> case 0xeb: if(num<4){key=6;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xdb: if(num<4){key=9;keycm
56、p[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xbb: if(num==4) ok(); </p><p> else alarm();</p><p>
57、<b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> while(temp1!=0xfb)temp1=P1;//等待按鍵釋放</
58、p><p> display();</p><p><b> }</b></p><p><b> 5 調(diào)試</b></p><p> 5.1 調(diào)試軟件環(huán)境簡(jiǎn)介</p><p> 調(diào)試本程序需要用到KEIL C51,及51開(kāi)發(fā)板一塊及其配套的下載燒錄軟件</p&g
59、t;<p> Keil C51是美國(guó)Keil Software公司出品的51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C來(lái)開(kāi)發(fā),體會(huì)更加深刻。Keil C51軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高
60、,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。</p><p> C51工具包的整體結(jié)構(gòu): uVision與Ishell分別是C51 for Windows和for Dos的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由L
61、IB51創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM中。</p><p> 5.2 實(shí)驗(yàn)板調(diào)試效果圖</p><p> 把調(diào)試好的程序下載到開(kāi)發(fā)板中,并輸入初始密碼后
62、,電子鎖被打開(kāi)(及8個(gè)發(fā)光二極管點(diǎn)亮),結(jié)果如圖5.1所示:</p><p><b> 圖5.1</b></p><p> 按下關(guān)閉鍵S19后,電子鎖被關(guān)閉。下面進(jìn)行更改密碼的演示。密碼鎖打開(kāi)后,按下更改密碼鍵S16后,輸入新密碼(以123456為例),這是數(shù)碼管上會(huì)顯示出由按鍵輸入的新密碼的值,如圖5.2所示:</p><p><b
63、> 圖5.2</b></p><p> 更改密碼后按下S17鍵確認(rèn)。確認(rèn)后按下S19關(guān)閉密碼鎖,則下次再開(kāi)鎖時(shí)就要輸入新的密碼了。關(guān)閉后的密碼鎖如圖5.3所示:</p><p><b> 圖5.3 </b></p><p><b> 6 總 結(jié)</b></p><p>
64、課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計(jì)算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握單片機(jī)的開(kāi)發(fā)技術(shù)是十分重要的。</p><p> 回顧起此次單片機(jī)課程設(shè)計(jì),本人感慨頗多。從選題到定稿,從理論到實(shí)踐,在整整兩星期的日子里,可以
65、說(shuō)得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自
66、己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)單片機(jī)匯編語(yǔ)言掌握得不好,通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)重新溫故。</p><p><b> 參考文獻(xiàn)</b></p><p> 【1】:張迎新.單片微型計(jì)算機(jī)原理,應(yīng)用及接口技術(shù).北京:國(guó)防工業(yè)出版社</p><p> 【2】:郭天祥.新概念51單片機(jī)C語(yǔ)言
67、教程[M].北京:電子工業(yè)出版社。</p><p> 【4】:閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社。</p><p> 【5】:譚浩強(qiáng). C程序設(shè)計(jì)第四版. 清華大學(xué)出版社....2010.6</p><p> 【6】:康華光.模擬電子技術(shù)基礎(chǔ).第五版.北京:高等教育出版社,2001:53-69</p><p><b>
68、; 附錄1:系統(tǒng)原理圖</b></p><p><b> 附錄2:程序清單</b></p><p> #include <reg51.h></p><p> #include<intrins.h></p><p> #define uint unsigned int</
69、p><p> #define uchar unsigned char</p><p> sbit buzzer=P3^0;</p><p> sbit relay=P3^1;</p><p> uchar code table[2]={0x40,0x00 }; //共陰極數(shù)碼管編碼 顯示‘-’和 熄滅</p><p&g
70、t; uchar keyword[4]={1,1,1,1};</p><p> uchar keycmp[4];</p><p> uchar key=0,num=0,flg=0;</p><p> //==============================延遲程序 延時(shí)x毫秒</p><p> void delay(uint
71、 x)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p> for(i=x;i>0;i--)</p><p> for(j=110;j>0;j--);</p><p><b> }<
72、;/b></p><p> //==============================數(shù)碼管顯示程序</p><p> void display()</p><p> { uchar i,j,cs=0x7f;</p><p> for(i=num;i>0;i--)</p><p><b
73、> { </b></p><p> P0=table[0];</p><p> cs=_crol_(cs,1);</p><p><b> P2=cs;</b></p><p> delay(10);</p><p><b> }</b><
74、/p><p> for(j=4-num;j>0;j--)</p><p><b> {</b></p><p> P0=table[1];</p><p> cs=_crol_(cs,1);</p><p><b> P2=cs;</b></p>&
75、lt;p> delay(10);</p><p><b> }</b></p><p><b> }</b></p><p> //==============================密碼重置程序</p><p> void set()</p><p>
76、;<b> {</b></p><p><b> num=0;</b></p><p> display();</p><p><b> flg=1;</b></p><p><b> }</b></p><p> //
77、==============================確認(rèn)鍵程序</p><p><b> void ok()</b></p><p> {uchar i=0;</p><p> display(); // P0=(flg+1);delay(1000);</p><p> if(flg==0)</p
78、><p><b> {</b></p><p> for(i=0;i<4;i++)</p><p> if(keyword[i]!=keycmp[i]) {alarm();break;}</p><p> if(num==4) {relay=0;num=0;}</p><p><b
79、> }</b></p><p> if(flg==2)</p><p><b> {</b></p><p><b> num=0;</b></p><p> for(i=0;i<4;i++) keyword[i]=keycmp[i];</p><
80、;p><b> flg=0;</b></p><p><b> }</b></p><p> if(flg==1)</p><p><b> {</b></p><p> for(i=0;i<4;i++)</p><p> if(
81、keyword[i]!=keycmp[i]) {alarm();break;}</p><p> if(num==4)</p><p><b> {</b></p><p><b> num=0;</b></p><p> display(); // P0=0x07;delay(1000);
82、</p><p><b> flg=2;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> //==================
83、============鍵盤掃描程序</p><p> void keyscan()</p><p><b> {</b></p><p> uchar temp1,temp2;</p><p> P1=0xfe;//令第一列為低電平,檢測(cè)第1列</p><p><b> te
84、mp1=P1;</b></p><p> if(temp1!=0xfe)</p><p><b> {</b></p><p> delay(5);//去抖</p><p><b> temp2=P1;</b></p><p> if(temp1==t
85、emp2)</p><p><b> {</b></p><p> switch(temp2)</p><p><b> {</b></p><p> case 0xf6: if(num<4){key=1;keycmp[num]=key;num++;display();}</p&
86、gt;<p> else alarm();</p><p><b> break;</b></p><p> case 0xee: if(num<4){key=4;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p>
87、<b> break;</b></p><p> case 0xde: if(num<4){key=7;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p>
88、case 0xbe: set();break;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> while(temp1!=0xfe)temp1=P1;//等待按鍵釋放</p>
89、;<p> P1=0xfd;//檢測(cè)第2列</p><p><b> temp1=P1;</b></p><p> if(temp1!=0xfd)</p><p><b> {</b></p><p> delay(5);//去抖</p><p>&
90、lt;b> temp2=P1;</b></p><p> if(temp1==temp2)</p><p><b> {</b></p><p> switch(temp2)</p><p><b> {</b></p><p> case 0x
91、f5: if(num<4){key=2;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xed: if(num<4){key=5;keycmp[num]=key;num++;displ
92、ay();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xdd: if(num<4){key=8;keycmp[num]=key;num++;display();}</p><p> else alarm();</p&g
93、t;<p><b> break;</b></p><p> case 0xbd: if(num<4){key=0;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p>
94、<p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> while(temp1!=0xfd)temp1=P1;//等待按鍵釋放</p><p> P1=0xfb;//檢測(cè)第3列<
95、/p><p><b> temp1=P1;</b></p><p> if(temp1!=0xfb)</p><p><b> {</b></p><p> delay(5);//去抖</p><p><b> temp2=P1;</b><
96、/p><p> if(temp1==temp2)</p><p><b> {</b></p><p> switch(temp2)</p><p><b> {</b></p><p> case 0xf3: if(num<4){key=3;keycmp[num
97、]=key;num++;display();}</p><p> else alarm();</p><p><b> break;</b></p><p> case 0xeb: if(num<4){key=6;keycmp[num]=key;num++;display();}</p><p> else
98、 alarm();</p><p><b> break;</b></p><p> case 0xdb: if(num<4){key=9;keycmp[num]=key;num++;display();}</p><p> else alarm();</p><p><b> break;<
99、;/b></p><p> case 0xbb: if(num==4) ok(); </p><p> else alarm();</p><p><b> break;</b></p><p><b> }</b></p><p><b> }&l
100、t;/b></p><p><b> }</b></p><p> while(temp1!=0xfb)temp1=P1;//等待按鍵釋放</p><p> display();</p><p><b> }</b></p><p> //=========
101、===================主函數(shù)</p><p><b> main()</b></p><p><b> {</b></p><p><b> EA=1;</b></p><p><b> EX0=1;</b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于89c51電子密碼鎖設(shè)計(jì)
- 基于89c51電子密碼鎖設(shè)計(jì)設(shè)計(jì)
- 基于89c51的電子密碼鎖設(shè)計(jì)
- 基于89c51電子密碼鎖設(shè)計(jì)報(bào)告
- 基于89c51電子密碼鎖設(shè)計(jì)程序
- 基于at89c51的電子密碼鎖的設(shè)計(jì)【開(kāi)題報(bào)告】
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì)
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 基于c51單片機(jī)的電子密碼鎖課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子密碼鎖
- 畢業(yè)設(shè)計(jì)---基于at89c51)子密碼鎖設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖課程設(shè)計(jì)
- 電子密碼鎖設(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)----電子密碼鎖設(shè)計(jì)
- 基于at89c51的電子密碼鎖的設(shè)計(jì)【任務(wù)書(shū)】
- 電子密碼鎖課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論