2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  單片機(jī)原理與接口技術(shù)</p><p>  課 程 設(shè) 計</p><p><b>  目 錄</b></p><p><b>  1設(shè)計任務(wù)4</b></p><p><b>  2 設(shè)計方案5</b></p><p> 

2、 2.1 任務(wù)分析5</p><p><b>  2.2方案設(shè)計6</b></p><p><b>  3系統(tǒng)硬件設(shè)計8</b></p><p>  3.1晶振電路設(shè)計8</p><p>  3.2 復(fù)位電路設(shè)計9</p><p>  3.3 鍵盤電路設(shè)計10&l

3、t;/p><p>  3.4 顯示電路設(shè)計11</p><p>  3.5 蜂鳴器電路設(shè)計12</p><p>  4系統(tǒng)軟件設(shè)計12</p><p>  4.1 系統(tǒng)程序設(shè)計流程圖12</p><p>  4.2 數(shù)碼管顯示子程序設(shè)計13</p><p>  4.3 鍵盤掃描子程序設(shè)計

4、15</p><p><b>  5 調(diào)試19</b></p><p>  5.1 調(diào)試軟件環(huán)境簡介19</p><p>  5.2 實驗板調(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è)計任務(wù)</b></p><p>  根據(jù)所學(xué)的知識,設(shè)計一個電子密碼鎖,利用發(fā)光二極管的亮滅來代表鎖的開閉。</p><p>  隨著我國現(xiàn)代化建設(shè)的日益完善,

6、人們的生活水平也不斷提高,家中的貴重物品自然也就越來越多。在這樣的時代背景下,如何防盜的問題也就顯得尤為重要了。傳統(tǒng)鎖具已經(jīng)無法阻止竊賊的腳步了,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的青睞。</p><p>  本設(shè)計以單片機(jī)89C51作為密碼鎖監(jiān)控裝置的檢測和控制核心,分為主機(jī)控制和從機(jī)執(zhí)行機(jī)構(gòu)(本設(shè)重點(diǎn)介紹主機(jī)設(shè)計),實現(xiàn)以下功能:</p><p>  1、開

7、鎖:下載程序后,輸入初始密碼,8位LED亮,代表鎖被打開,輸入密碼時,六位數(shù)碼管依次顯示小橫杠。</p><p>  2、更改密碼:只有當(dāng)開鎖(LED亮)后,該功能方可使用。首先按下更改密碼鍵S16,然后設(shè)置相應(yīng)密碼,此時六位數(shù)碼管會顯示設(shè)置密碼對應(yīng)的數(shù)字。最后設(shè)置完六位后,按下確認(rèn)鍵S17確認(rèn)密碼更改,此后新密碼即生效。</p><p>  3、重試密碼:當(dāng)輸入密碼時,密碼輸錯后按下重試

8、鍵S18,可重新輸入六位密碼。</p><p>  當(dāng)設(shè)置密碼時,設(shè)置中途想更改密碼,也可按下此鍵重新設(shè)置。</p><p>  4、關(guān)閉密碼鎖:按下關(guān)閉鍵S19即可將打開的密碼鎖關(guān)閉。</p><p>  5、開發(fā)板矩陣鍵盤上的S6—S15鍵分別代表數(shù)字0-9。</p><p><b>  2 設(shè)計方案</b><

9、/p><p><b>  2.1 任務(wù)分析</b></p><p>  根據(jù)設(shè)計要求,可以用電位器來模擬溫度的變化,用微控制器來控制模擬溫度的測量和顯示,其任務(wù)設(shè)計方案原理圖如圖2.1所示:</p><p>  圖2.1 設(shè)計方案原理圖</p><p><b>  2.2方案設(shè)計</b></p

10、><p>  根據(jù)設(shè)計方案原理圖,每個模塊的方案設(shè)計詳細(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 時鐘/機(jī)器周期和12 時鐘/機(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,實際工作 頻率可達(dá)48MHz;</p><p>  4. 用戶應(yīng)用程序空間為4K 字節(jié);</p><p>  5. 片上集成512 字節(jié)RAM;</p><p>  6. 通用I/O 口(32 個),復(fù)位后為:P1/P2/P3/P4 是準(zhǔn)雙向口/弱上拉, P0 口是漏極開路輸出,作為總線擴(kuò)展用時,不用加上拉電阻,作為 I/O 口用時,需加上拉電阻;&

13、lt;/p><p>  7. ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無 需專用仿真器,可通過串口(RxD/P3.0,TxD/P3.1)直接下載用戶程 序,數(shù)秒即可完成一片;</p><p>  8. 具有EEPROM 功能;</p><p>  9. 具有看門狗功能;</p><p>  10. 通用異步串行口(UART

14、),還可用定時器軟件實現(xiàn)多個UART;</p><p>  11. 工作溫度范圍:-40~+85℃(工業(yè)級)/0~75℃(商業(yè)級);</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è)計<

16、/b></p><p>  本設(shè)計采用數(shù)碼管顯示,數(shù)碼管顯示明顯,易于控制。數(shù)碼管是靠點(diǎn)亮內(nèi)部不同的發(fā)光二極管發(fā)光,從而顯示不同的形狀。下面對數(shù)碼管進(jìn)行詳細(xì)的介紹。數(shù)碼管內(nèi)部原理圖如圖2.3所示: </p><p>  圖2.3 數(shù)碼管內(nèi)部原理圖</p><p>  從圖2.3可以看出,一位數(shù)碼管的引腳是10個,顯示一個8字需要7個小段,另外還有一個小數(shù)點(diǎn)

17、,所以其內(nèi)部一共有8個小的發(fā)光二極管,最后還有另兩個引腳是公共端,連接在一起。</p><p><b>  3系統(tǒng)硬件設(shè)計</b></p><p>  根據(jù)設(shè)計要求,系統(tǒng)硬件部分主要由四部分組成,分別是晶振電路、復(fù)位電路、矩陣鍵盤電路、顯示電路、蜂鳴器電路。</p><p><b>  3.1晶振電路設(shè)計</b></

18、p><p>  單片機(jī)系統(tǒng)里都有晶振,在單片機(jī)系統(tǒng)里晶振作用非常大,全稱叫晶體振蕩器,它結(jié)合單片機(jī)內(nèi)部電路產(chǎn)生單片機(jī)所需的時鐘頻率,單片機(jī)晶振提供的時鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時鐘頻率。在通常工作條件下,普通的晶振頻率絕對精度可達(dá)百萬分之五十。高級的精度更高。有些晶振還可以由外加電壓在一定范圍內(nèi)調(diào)整頻率,稱為壓控振蕩器(VCO)。晶振用一種能把電能和機(jī)械能相

19、互轉(zhuǎn)化的晶體在共振的狀態(tài)下工作,以提供穩(wěn)定,精確的單頻振蕩。 單片機(jī)晶振的作用是為系統(tǒng)提供基本的時鐘信號。通常一個系統(tǒng)共用一個晶振,便于各部分保持同步。有些通訊系統(tǒng)的基頻和射頻使用不同的晶振,而通過電子調(diào)整頻率的方法保持同步。晶振通常與鎖相環(huán)電路配合使用,以提供系統(tǒng)所需的時鐘頻率。如果不同子系統(tǒng)需要不同頻率的時鐘信號,可以用與同一個晶振相連的不同鎖相環(huán)來提供。STC 89C51單片機(jī)內(nèi)部的晶振電路如圖3.1所示:</p&g

20、t;<p>  圖3.1 晶振電路圖</p><p>  3.2 復(fù)位電路設(shè)計</p><p>  復(fù)位是單片機(jī)的初始化操作,單片機(jī)在啟動運(yùn)行時,都需要先復(fù)位,它的作用是使用CPU和系統(tǒng)中其它部件都處于一個確定的初始狀態(tài),并從這個狀態(tài)開始工作,本設(shè)計采用外部按鍵電平復(fù)位電路。如圖3.2所示,當(dāng)按下按鈕時,RESET 管腳高電平觸發(fā)。為保證復(fù)位可靠,參數(shù)選取應(yīng)保證復(fù)位高電平持

21、續(xù)時間大于兩個機(jī)器周期。</p><p>  圖3.2 按鍵電平復(fù)位電路</p><p>  3.3 鍵盤電路設(shè)計</p><p>  矩陣鍵盤能減少鍵盤與單片機(jī)接口時所占用的I/O線的數(shù)目,在按鍵比較多的時候,通常采用這樣方法。所以本設(shè)計就采用矩陣鍵盤,其原理如圖3.3所示:</p><p>  圖3.3矩陣鍵盤原理圖</p>

22、<p>  利用這種行列式矩陣結(jié)構(gòu)只需要N條行線和M條列線,即可組成具有N×M個按鍵的鍵盤。在這種行列式矩陣鍵盤非鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無按鍵按下的程序段。</p><p>  當(dāng)確認(rèn)有按鍵按下后,下一步就要識別哪一個按鍵按下。對鍵的識別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。</p><p> 

23、 下面說明線反轉(zhuǎn)法的工作原理:</p><p>  首先辨別鍵盤中有無鍵按下,有單片機(jī)I/O口向鍵盤送全掃描字,然后讀入行線狀態(tài)來判斷。方法是:向行線輸出全掃描字00H,把全部列線置為低電平,然后將列線的電平狀態(tài)讀入累加器A中。如果有按鍵按下,總會有一根行線電平被拉至低電平從而使行線不全為1。判斷鍵盤中哪一個鍵被按下使通過將列線逐列置低電平后,檢查行輸入狀態(tài)來實現(xiàn)的。方法是:依次給列線送低電平,然后查所有行線狀態(tài)

24、,如果全為1,則所按下的鍵不在此列;如果不全為1,則所按下的鍵必在此列,而且是在與零電平行線相交的交點(diǎn)上的那個鍵。</p><p>  具體的按鍵功能設(shè)計如表3.1:</p><p>  表3.1 矩陣鍵盤上各個鍵的功能</p><p>  3.4 顯示電路設(shè)計</p><p>  本設(shè)計采用的是6位8段數(shù)碼管。數(shù)碼管內(nèi)部二極管點(diǎn)亮?xí)r,電流太

25、大會燒毀二極管,太低則不能點(diǎn)亮。二極管需要5mA以上的電流才能點(diǎn)亮,但是單片機(jī)的I/O口送不出如此大的電流,所以數(shù)碼管與單片機(jī)連接時,需要加驅(qū)動電路,可以用上拉電阻的方法或用專門的驅(qū)動芯片來驅(qū)動。本設(shè)計采用的是74HC573鎖存器,其輸出電流比較大,而且電路也比較簡單。這里用了兩個鎖存器,一個用于鎖存段選信號,一個用于鎖存位選信號。而這兩個鎖存器則由I/O口P2.6和P2.7控制,而輸出信號都用I/O口P0送出。數(shù)碼管的連接圖如圖3.4

26、所示:</p><p>  圖3.4 數(shù)碼管連接圖</p><p>  3.5 蜂鳴器電路設(shè)計</p><p>  蜂鳴器在此設(shè)計主要是為了提供按鍵提醒,通過一個三極管來提供驅(qū)動,蜂鳴器一端接高電平,一端接三極管的發(fā)射極,三極管的基極通過一個電阻接I/O口的P2.3,集電極接地。當(dāng)P2.3口送出低電平時,三極管接通,蜂鳴器接通,發(fā)出響聲。蜂鳴器電路如圖3.5所示

27、:</p><p>  圖3.5 蜂鳴器控制電路</p><p><b>  4系統(tǒng)軟件設(shè)計</b></p><p>  按照設(shè)計任務(wù)設(shè)計要求,軟件部分設(shè)計主要分為三部分,系統(tǒng)程序流程圖設(shè)計,數(shù)碼管顯示子程序設(shè)計和按鍵掃描子程序設(shè)計。</p><p>  4.1 系統(tǒng)程序設(shè)計流程圖</p><p>

28、;  系統(tǒng)程序流程圖如圖4.1所示:</p><p>  圖4.1 主程序流程圖 </p><p>  4.2 數(shù)碼管顯示子程序設(shè)計</p><p>  LED顯示器工作方式有兩種:靜態(tài)顯示方式和動態(tài)顯示方式。靜態(tài)顯示的特點(diǎn)是每個數(shù)碼管的段選必須接一個8位數(shù)據(jù)線來保持顯示的字形碼。當(dāng)送入一次字形碼后,顯示字形可一直保持,直到送入新字形碼為止。這種方法的優(yōu)點(diǎn)是占用C

29、PU時間少,顯示便于監(jiān)測和控制。缺點(diǎn)是硬件電路比較復(fù)雜,成本較高;動態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一位數(shù)碼管有效。選亮數(shù)碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數(shù)碼管送出字形碼和相應(yīng)的位選,利用發(fā)光管的余輝和人眼視覺暫留作用,使人的感覺好像各位數(shù)碼管同時都在顯示。動態(tài)顯示的亮度比靜態(tài)顯示要差一些。</p><p>  本設(shè)計使用動態(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ù)其值來選擇執(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è)計</p><p>  鍵盤是單片機(jī)常用輸入設(shè)備,在按鍵數(shù)量較多時,為了節(jié)省I/O口等單片機(jī)資源,一般采取掃描的方式來識別到底是哪一個鍵被按下。即通過確定被按下的鍵處在哪一行哪一列來確定該鍵的位置,獲取鍵值以啟動相應(yīng)的功能程序。</p><p>  查找哪個按鍵被按下的方法為:一個一個地查找。 先第一行輸

40、出0,檢查列線是否非全高;否則第二行輸出0,檢查列線是否非全高;否則第三行輸出0,檢查列線是否非全高;如果某行輸出0時,查到列線非全高,則該行有按鍵按下;根據(jù)第幾行線輸出0與第幾列線讀入為0,即可判斷在具體什么位置的按鍵按下。</p><p>  void keyscan()</p><p><b>  {</b></p><p>  ucha

41、r temp1,temp2;</p><p>  P1=0xfe;//令第一列為低電平,檢測第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;//檢測第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;//檢測第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)境簡介</p><p>  調(diào)試本程序需要用到KEIL C51,及51開發(fā)板一塊及其配套的下載燒錄軟件</p&g

59、t;<p>  Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。Keil C51軟件提供豐富的庫函數(shù)和功能強(qiáng)大的集成開發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會到Keil C51生成的目標(biāo)代碼效率非常之高

60、,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。</p><p>  C51工具包的整體結(jié)構(gòu): uVision與Ishell分別是C51 for Windows和for Dos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及A51編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由L

61、IB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.ABS)。ABS文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。</p><p>  5.2 實驗板調(diào)試效果圖</p><p>  把調(diào)試好的程序下載到開發(fā)板中,并輸入初始密碼后

62、,電子鎖被打開(及8個發(fā)光二極管點(diǎn)亮),結(jié)果如圖5.1所示:</p><p><b>  圖5.1</b></p><p>  按下關(guān)閉鍵S19后,電子鎖被關(guān)閉。下面進(jìn)行更改密碼的演示。密碼鎖打開后,按下更改密碼鍵S16后,輸入新密碼(以123456為例),這是數(shù)碼管上會顯示出由按鍵輸入的新密碼的值,如圖5.2所示:</p><p><b

63、>  圖5.2</b></p><p>  更改密碼后按下S17鍵確認(rèn)。確認(rèn)后按下S19關(guān)閉密碼鎖,則下次再開鎖時就要輸入新的密碼了。關(guān)閉后的密碼鎖如圖5.3所示:</p><p><b>  圖5.3 </b></p><p><b>  6 總 結(jié)</b></p><p>  

64、課程設(shè)計是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,單片機(jī)已經(jīng)成為當(dāng)今計算機(jī)應(yīng)用中空前活躍的領(lǐng)域, 在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握單片機(jī)的開發(fā)技術(shù)是十分重要的。</p><p>  回顧起此次單片機(jī)課程設(shè)計,本人感慨頗多。從選題到定稿,從理論到實踐,在整整兩星期的日子里,可以

65、說得是苦多于甜,但是可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨(dú)立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自

66、己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,對單片機(jī)匯編語言掌握得不好,通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。</p><p><b>  參考文獻(xiàn)</b></p><p>  【1】:張迎新.單片微型計算機(jī)原理,應(yīng)用及接口技術(shù).北京:國防工業(yè)出版社</p><p>  【2】:郭天祥.新概念51單片機(jī)C語言

67、教程[M].北京:電子工業(yè)出版社。</p><p>  【4】:閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社。</p><p>  【5】:譚浩強(qiáng). C程序設(shè)計第四版. 清華大學(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>  //==============================延遲程序 延時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;//令第一列為低電平,檢測第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;//檢測第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;//檢測第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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論