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

下載本文檔

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

文檔簡介

1、<p><b>  單</b></p><p><b>  片</b></p><p><b>  機</b></p><p><b>  課</b></p><p><b>  程</b></p><p

2、><b>  設</b></p><p><b>  計</b></p><p><b>  報</b></p><p><b>  告</b></p><p>  課題名稱:基于單片機的電子密碼鎖</p><p><b

3、>  學 校:</b></p><p>  系 別:機械電子工程系</p><p>  專 業(yè):應用電子技術</p><p><b>  姓 名:</b></p><p><b>  學 號:</b></p><p><b

4、>  指導教師:</b></p><p><b>  目錄</b></p><p>  一 設計總說明- 3 -</p><p>  二 電子密碼鎖的系統(tǒng)設計- 4 -</p><p>  2.1設計方案論證與比較- 4 -</p><p>  2.2電子密碼鎖總體設計-

5、 4 -</p><p>  三 硬件電路設計- 5 -</p><p>  3.1單片機AT89C51簡介- 5 -</p><p>  3.2 4×4矩陣鍵盤- 5 -</p><p>  3.3 震蕩電路- 6 -</p><p>  3.4 外部存儲器電路- 6 -</p>&

6、lt;p>  3.5 1602LCD液晶顯示- 7 -</p><p>  3.6 LED及蜂鳴器- 7 -</p><p>  3.7完整電路圖及元器件清單- 8 -</p><p>  四 軟件程序設計- 9 -</p><p>  4.1程序設計流程圖- 9 -</p><p>  4.2 電子密

7、碼鎖源程序- 10 -</p><p>  五 仿真調(diào)試- 15 -</p><p>  5.1 使用Keil生成hex文件- 15 -</p><p>  5.2 使用Proteus仿真過程- 16 -</p><p>  六 總結與體會- 19 -</p><p>  七 參考文獻及PCB封裝圖- 19

8、 -</p><p>  7.1 參考文獻- 19 -</p><p>  7.2 PCB封裝圖- 20 -</p><p><b>  一 設計總說明</b></p><p>  在日常的生活和工作中, 住宅與部門的安全防范、單位的文件檔案、財務報表以及一些個人資料的保存多以加鎖的辦法來解決。若使用傳統(tǒng)的機械式鑰匙

9、開鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。隨著科學技術的不斷發(fā)展,人們對日常生活中的安全保險器件的要求越來越高。為滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應運而生。密碼鎖具有安全性高、成本低、功耗低、易操作等優(yōu)點。</p><p>  在安全技術防范領域,具有防盜報警功能的電子密碼鎖逐漸代替?zhèn)鹘y(tǒng)的機械式密碼鎖,克服了機械式密碼鎖密碼量少、安全性能差的缺點,使密

10、碼鎖無論在技術上還是在性能上都大大提高一步。隨著大規(guī)模集成電路技術的發(fā)展,特別是單片機的問世,出現(xiàn)了帶微處理器的智能密碼鎖,它除具有電子密碼鎖的功能外,還引入了智能化管理、專家分析系統(tǒng)等功能,從而使密碼鎖具有很高的安全性、可靠性,應用日益廣泛。</p><p>  基于以上思路,本次設計使用ATMEL公司的AT89C51實現(xiàn)一基于單片機的電子密碼鎖的設計,其主要具有如下功能:</p><p&g

11、t;  設置6位密碼,密碼通過鍵盤輸入,按鍵確實按下,發(fā)出提示音。若密碼正確,則將鎖打開。</p><p>  密碼可以由用戶自己修改設定(只支持6位密碼),鎖打開后才能修改密碼。</p><p><b>  斷電后密碼可保存。</b></p><p>  電子密碼鎖的設計主要由三部分組成:4×4矩陣鍵盤接口電路、密碼鎖的控制電路、密

12、碼存儲電路、輸出顯示電路。另外系統(tǒng)還有LED提示燈,蜂鳴器等。</p><p>  密碼鎖設計的關鍵問題是實現(xiàn)密碼的輸入、清除、更改、開鎖等功能:</p><p>  密碼輸入功能:按下一個數(shù)字鍵,依次輸入密碼。</p><p>  密碼清除功能:當按下清除鍵時,清除前面輸入的所有值,并清除所有顯示。</p><p>  密碼更改功能:將輸入

13、的值作為新的密碼并保存。</p><p>  開鎖功能:當按下開鎖鍵,系統(tǒng)將輸入與密碼進行檢查核對,如果正確鎖打開,否則不打開。</p><p>  主要的設計實施過程:首先,選用ATMEL公司的單片機AT89C51,以及選購其他電子元器件。第二步,使用Proteus Pro7.7設計硬件電路原理圖,并設計PCB圖完成布線。第三步,使用Keil uVision3軟件編寫單片機的C語言程序、

14、仿真、軟件調(diào)試。第四部,使用PROTEUS軟件進行模擬軟、硬件調(diào)試,完成本次課程設計。</p><p>  摘要(關鍵詞):電子密碼鎖 AT89C51 4×4矩陣鍵盤 密碼輸入與修改</p><p>  二 電子密碼鎖的系統(tǒng)設計</p><p>  2.1設計方案論證與比較</p><p>  方案一:卡片式電子密碼鎖??ㄆ?/p>

15、電子密碼鎖,它利用光電耦合的方式,將密碼信息從打孔的形式做在卡片上 ,只要將卡片插入鎖內(nèi),就能將鎖打開。如果卡片上密碼信息不對,密碼鎖發(fā)出報警聲。這種方法是需要卡片做為鑰匙,容易被盜和被仿制,安全性不高。</p><p>  方案二:磁卡式電子密碼鎖,具有功能強、故障率低、可靠性高和工作壽命長等優(yōu)點,但這種方法的缺點是磁卡容易消磁,對用戶造成不必要的麻煩。</p><p>  方案三:用A

16、T89C51設計的多功能密碼鎖。以單片機作為微控制器,可以實現(xiàn)基于以上優(yōu)點,本系統(tǒng)選用該方案作為設計方案。按鍵有效指示、輸入錯誤、控制開鎖、錯誤報警、密碼修改等功能,工作穩(wěn)定可靠,保密性高,實用性強。</p><p>  2.2電子密碼鎖總體設計</p><p><b>  三 硬件電路設計</b></p><p>  3.1單片機AT89C5

17、1簡介</p><p>  AT89C51是美國ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機,片內(nèi)含4K bytes的可反復擦寫的只讀程序存儲器(EPROM)和128bytes的隨機存取數(shù)據(jù)序存器(RAM),器件采用ATMEL公司的高密度/非易失性存儲技術生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲單元,AT89C51單片機為許多嵌入式控制系統(tǒng)提供了一種靈活行高

18、且價廉的方案。</p><p><b>  主要特性:</b></p><p>  · 與MCS-51 兼容· 4K字節(jié)可編程FLASH存儲器(壽命:1000寫/</p><p><b>  擦循環(huán))</b></p><p>  · 全靜態(tài)工作:0Hz-24KHz&

19、#183; 三級程序存儲器保密鎖定· 128*8位內(nèi)部RAM· 32條可編程I/O線· 兩個16位定時器/計數(shù)器· 5個中斷源· 可編程串行通道· 低功耗的閑置和掉電模式· 片內(nèi)振蕩器和時鐘電路</p><p>  圖3-1 AT89C51引腳圖</p><p>  3.2 4×4矩陣鍵

20、盤</p><p>  如圖3-2所示,本系統(tǒng)采用4×4矩陣鍵盤,16個按鍵分為輸入數(shù)字鍵:0、1、2、3、4、5、6、7、8、9;功能鍵確定、上鎖、修改密碼、保存密碼、CLR。 </p><p><b>  圖</b></p><p><b>  圖圖3-2</b></p><p> 

21、 4×4 矩陣鍵盤</p><p><b>  3.3 震蕩電路</b></p><p>  圖 3-3 振蕩電路</p><p>  本設計晶振選擇頻率為12MHZ,電容選擇30pF如圖3-3。</p><p>  經(jīng)計算得單片機工作機器周期為:</p><p>  12×

22、;(1÷12M)=1us。</p><p>  3.4 外部存儲器電路</p><p>  為了保證用戶密碼在系統(tǒng)掉電時不會丟失,本系統(tǒng)采用AT24C04的EEPROM存儲器來存儲用戶密碼。電擦除可編程只讀存儲器EEPROM(Electrically Erasable PROM)是近年來開始被廣泛使用的一種只讀存儲器,它能在應用系統(tǒng)中進行在線改寫,并能在掉電的情況下保存數(shù)據(jù)而不需

23、保證電源,因而完全符合系統(tǒng)的設計要求。雖然EEPROM的擦除時間較長,但這不影響整個系統(tǒng)的功能。在本系統(tǒng),用戶設定的密碼就存于EEPROM AT24C04中。AT24C04與單片機之間采用I2C總線通訊方式。</p><p>  圖3-4 24C04A外部存儲器</p><p>  3.5 1602LCD液晶顯示</p><p>  圖3-5 LCD液晶顯示<

24、/p><p><b>  主要技術參數(shù)</b></p><p>  3.6 LED及蜂鳴器</p><p>  圖3-6 LED開鎖提示</p><p>  如圖,LED模擬鎖的開關狀態(tài)。若LED亮,表示密碼正確,開鎖。</p><p><b>  圖 3-7 蜂鳴器</b>&l

25、t;/p><p>  按鍵按下,密碼鎖打開等動作實現(xiàn)時發(fā)出提示音。</p><p>  3.7完整電路圖及元器件清單</p><p>  圖3-8 仿真電路圖</p><p><b>  表3-9 元件清單</b></p><p><b>  四 軟件程序設計</b></p

26、><p>  程序主要完成:開始時LCD顯示“Your Password”提示輸入密碼,輸入密碼后按下確認鍵,系統(tǒng)會將所輸入與系統(tǒng)密碼進行比對。若輸入密碼正確則顯示“Unlock OK”開鎖,然后可以選擇上鎖或者修改密碼,如果密碼錯誤則顯示“ERROR”。開鎖后,按下上鎖鍵,系統(tǒng)上鎖并返回,選擇修改密碼則可以對系統(tǒng)進行修改密碼操作。</p><p>  4.1程序設計流程圖</p>

27、<p>  圖4-1 程序設計流程圖 </p><p>  4.2 電子密碼鎖源程序</p><p>  //-------------------------------Main.c----------------------------------------</p><p>  //名稱:電子密碼鎖</p><p>  

28、//-----------------------------------------------------------------------------</p><p><b>  //</b></p><p>  // 當輸入0-9中的數(shù)字時可以輸入密碼,不超過6位,輸入完成后按下A</p><p>  // 鍵

29、開鎖,密碼正確時LED點亮,液晶屏顯示開鎖成功。</p><p>  // 其他鍵功能是:B上鎖 C重新輸入密碼 D保存新密碼 E清除。</p><p>  // 重設密碼時要求先輸入正確的密碼成功開鎖。</p><p>  //---------------------------------------------------------

30、--------------------</p><p>  #include <reg51.h></p><p>  #include <string.h></p><p>  #include <intrins.h></p><p>  #define uchar unsigned char</p

31、><p>  #define uint unsigned int</p><p>  #define Delay4us();</p><p>  //上次按鍵和當前按鍵序號,該矩陣中序號范圍為0-15,16表示無按鍵</p><p>  uchar Pre_KeyNo = 16, KeyNo = 16;</p><p> 

32、 uchar code Title_Text[] = "Your Password...";//標題字符串</p><p>  uchar DSY_BUFFER[10] = " ";//顯示緩沖</p><p>  uchar UserPassword[10] = " ";//用戶輸入的密碼</p>

33、<p>  void LCD_Init();//液晶初始化</p><p>  void Display_String(uchar * str, uchar LineNo);//在液晶指定行顯示字符串</p><p>  void IIC_24C04_Init();//IIC初始化</p><p>  void Beep();

34、//蜂鳴器</p><p>  uchar RecString (uchar Slave,uchar Subaddr,uchar *Buffer,uchar N);//從IIC讀取數(shù)據(jù)</p><p>  uchar SendString (uchar Slave,uchar Subaddr,uchar *Buffer,uchar N);//向IIC寫入數(shù)據(jù)</p>

35、<p>  uchar Keys_Scan();//鍵盤掃描,返回鍵盤號0-15</p><p>  sbit LED_OPEN =P2^7;//開鎖亮燈</p><p>  sbit BEEP =P3^7;//蜂鳴器</p><p>  //-----------------------------------------

36、------------------------------------</p><p><b>  // 延時</b></p><p>  //-----------------------------------------------------------------------------</p><p>  void DelayMS

37、(uint x)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while (x--) for (i = 0;i < 120; i++);</p><p><b>  }</b></p>&

38、lt;p>  //-----------------------------------------------------------------------------</p><p><b>  // 蜂鳴器子程序</b></p><p>  //-------------------------------------------------------

39、----------------------</p><p>  void Beep()</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for (i = 0;i < 100; i++)</p><p>

40、<b>  {</b></p><p>  DelayMS(1); BEEP = ~BEEP;</p><p><b>  }</b></p><p><b>  BEEP=0;</b></p><p><b>  }</b></p><

41、;p>  //-----------------------------------------------------------------------------</p><p><b>  // 清除密碼</b></p><p>  //-----------------------------------------------------------

42、------------------</p><p>  void Clear_Password()</p><p><b>  {</b></p><p>  UserPassword[0] = '\0';</p><p>  DSY_BUFFER[0] = '\0';</p>

43、;<p><b>  }</b></p><p>  //-----------------------------------------------------------------------------</p><p><b>  // 主程序</b></p><p>  //-----------

44、------------------------------------------------------------------</p><p>  void main()</p><p><b>  {</b></p><p>  uchar i = 0;</p><p>  uchar IIC_Password[

45、10];</p><p>  uchar IS_Valid_User = 0;</p><p>  P0 = 0xFF; </p><p>  P1 = 0xFF;</p><p>  P2 = 0xFF; </p><p>  TMOD = 0x02; //T0設置為

46、8位自動重裝模式</p><p>  TH0 = 175; </p><p>  TL0 = 175;</p><p>  TR0 = 1; //啟動T0</p><p>  DelayMS(10); </p><

47、;p>  LCD_Init(); //初始化LCD </p><p>  IIC_24C04_Init(); //初始化24C04 </p><p>  Display_String(Title_Text,0x00); //在第1行顯示標題</p><p>  RecString(0x

48、a0, 0 , IIC_Password, 6); </p><p>  IIC_Password[6] = '\0';</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  P1 = 0xF0;</p>

49、<p>  if(P1 != 0xF0) KeyNo = Keys_Scan(); //掃描鍵盤獲取鍵序號KeyNo</p><p>  switch ( KeyNo )</p><p><b>  {</b></p><p>  case 0: case 1: case 2: case 3: case 4: </p>

50、;<p>  case 5: case 6: case 7: case 8: case 9:</p><p>  if ( i<= 5 ) //密碼限制在6位以內(nèi)</p><p><b>  {</b></p><p>  //如果i為0則執(zhí)行一次清屏</p><p>  i

51、f (i ==0) Display_String(" ",0x40);</p><p>  UserPassword[i] = KeyNo + '0';</p><p>  UserPassword[i+1] = '\0';</p><p>  DSY_BUFFER[i] = '

52、;*';</p><p>  DSY_BUFFER[i+1] = '\0';</p><p>  Display_String(DSY_BUFFER,0x40);</p><p><b>  i++;</b></p><p><b>  }</b></p>&l

53、t;p><b>  break;</b></p><p>  case 10: //按A鍵開鎖</p><p>  if (strcmp(UserPassword,IIC_Password) == 0) </p><p><b>  {</b></p><p>  LED_OPEN = 0;

54、 //點亮LED</p><p>  Clear_Password();</p><p>  Display_String("Unlock OK! ",0x40);</p><p>  IS_Valid_User = 1;</p><p><b>  }</b></p><

55、;p><b>  else </b></p><p><b>  {</b></p><p>  LED_OPEN =1; //關閉LED</p><p>  Clear_Password();</p><p>  Display_String("ERROR !

56、",0x40);</p><p>  IS_Valid_User = 0;</p><p><b>  }</b></p><p><b>  i = 0;</b></p><p><b>  break;</b></p><p>  case

57、 11: //按B鍵上鎖</p><p>  LED_OPEN =1; </p><p>  Clear_Password();</p><p>  Display_String(Title_Text,0x00);</p><p>  Display_String(" ",0x40);&l

58、t;/p><p>  i = 0; </p><p>  IS_Valid_User = 0; </p><p><b>  break;</b></p><p>  case 12: //按C鍵設置新密碼</p><p> 

59、 //如果是合法用戶則提示輸入新密碼</p><p>  if ( !IS_Valid_User ) Display_String("No rights !",0x40);</p><p><b>  else </b></p><p><b>  {</b></p><p>&

60、lt;b>  i = 0;</b></p><p>  Display_String("New Password: ",0x00);</p><p>  Display_String(" ",0x40);</p><p><b>  }</b></

61、p><p>  break; </p><p>  case 13: //按D鍵保存新密碼</p><p>  if ( !IS_Valid_User ) Display_String("No rights !",0x40);</p><p><b>  else <

62、;/b></p><p><b>  {</b></p><p>  SendString(0xa0, 0 , UserPassword, 6);</p><p>  //重新讀入剛寫的密碼</p><p>  RecString(0xa0, 0 , IIC_Password, 6); </p>

63、<p>  IIC_Password[6] = '\0'; </p><p><b>  i = 0;</b></p><p>  Display_String(Title_Text,0x00);</p><p>  Display_String("Pass

64、word Saved! ",0x40);</p><p>  } </p><p>  break; </p><p>  case 14: //按E鍵消除所有輸入</p><p><b>  i = 0;</b></p>

65、<p>  Clear_Password();</p><p>  Display_String(" ",0x40); </p><p><b>  }</b></p><p>  Beep(); </p><p>  D

66、elayMS(100);</p><p><b>  P1= 0xF0;</b></p><p>  while (P1 != 0xF0); //如果有鍵未釋放則等待</p><p>  while (P1 == 0xF0); //如果沒有再次按下按鍵則等待</p><p><b>  }</

67、b></p><p><b>  }</b></p><p>  //--------------------------------- 24C04.c -----------------------------------</p><p>  // 24C04 IIC 讀/寫程序</p><p>  //----

68、-------------------------------------------------------------------------</p><p>  sbit SCL = P3^2;//串行時鐘</p><p>  sbit SDA = P3^3;//串行數(shù)據(jù)</p><p>  //----------------------------

69、-------------------------------------------------</p><p><b>  // 起始位</b></p><p>  //-----------------------------------------------------------------------------</p><p>

70、  void Start()</p><p><b>  {</b></p><p><b>  SDA = 1; </b></p><p><b>  SCL = 1; </b></p><p>  Delay4us();</p><p><b&

71、gt;  SDA = 0; </b></p><p>  Delay4us(); </p><p><b>  SCL = 0;</b></p><p><b>  }</b></p><p>  //-------------------------------------------

72、----------------------------------</p><p><b>  // 停止位</b></p><p>  //-----------------------------------------------------------------------------</p><p>  void Stop()&l

73、t;/p><p><b>  {</b></p><p><b>  SDA = 0; </b></p><p><b>  SCL = 1; </b></p><p>  Delay4us(); </p><p><b>  SDA = 1;&l

74、t;/b></p><p>  Delay4us(); </p><p><b>  SCL = 0;</b></p><p><b>  }</b></p><p>  //-----------------------------------------------------------

75、------------------</p><p>  // IIC總線初始化</p><p>  //-----------------------------------------------------------------------------</p><p>  void ACK()</p><p><b>  {

76、</b></p><p><b>  SDA = 0; </b></p><p><b>  SCL = 1; </b></p><p>  Delay4us(); </p><p><b>  SCL = 0; </b></p><p>&

77、lt;b>  SDA =1;</b></p><p><b>  }</b></p><p>  //-----------------------------------------------------------------------------</p><p>  // 發(fā)送非應答信號</p><

78、;p>  //-----------------------------------------------------------------------------</p><p>  void NO_ACK()</p><p><b>  {</b></p><p><b>  SDA = 1;</b><

79、/p><p><b>  SCL =1;</b></p><p>  Delay4us(); </p><p><b>  SCL = 0; </b></p><p><b>  SDA = 0;</b></p><p><b>  }</b

80、></p><p>  //-----------------------------------------------------------------------------</p><p>  // 從芯片讀取1字節(jié)</p><p>  //-------------------------------------------------------

81、----------------------</p><p>  uchar RecByte()</p><p><b>  {</b></p><p>  uchar i,rd;</p><p>  rd = 0x00;</p><p>  SDA = 1;//置數(shù)據(jù)線為輸入方式</p

82、><p>  for(i = 0;i < 8; i++)</p><p><b>  {</b></p><p>  SCL = 1; rd <<= 1; rd|=SDA;</p><p>  Delay4us();SCL = 0; Delay4us();</p><p><b

83、>  }</b></p><p><b>  SCL = 0;</b></p><p>  Delay4us();</p><p>  return rd;</p><p><b>  }</b></p><p>  //------------------

84、-----------------------------------------------------------</p><p>  // 向芯片發(fā)送1字節(jié)</p><p>  //-----------------------------------------------------------------------------</p><p>  uc

85、har SendByte(uchar wd)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  bit ack0;</b></p><p>  for(i = 0;i < 8;i++)//循環(huán)移入8

86、位</p><p><b>  {</b></p><p>  SDA = (bit)(wd & 0x80);</p><p>  _nop_(); _nop_(); SCL = 1; Delay4us(); </p><p>  SCL = 0 ;wd <<= 1;</p><p

87、><b>  }</b></p><p>  Delay4us();</p><p>  SDA = 1;//釋放總線并準備讀取應答</p><p><b>  SCL = 1;</b></p><p>  Delay4us();</p><p>  ack0 =

88、!SDA;//0表示無應答</p><p><b>  SCL = 0;</b></p><p>  Delay4us();</p><p>  return ack0;//返回應答</p><p><b>  }</b></p><p>  //----------

89、-------------------------------------------------------------------</p><p>  // 發(fā)送多字節(jié)數(shù)據(jù)函數(shù)</p><p>  //-----------------------------------------------------------------------------</p><

90、p>  uchar SendString(uchar Slave,uchar Subaddr,uchar *Buffer,uchar N)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p><b>  Start();</b></

91、p><p>  if (!SendByte(Slave))return 0;//器件地址</p><p>  if (!SendByte(Subaddr)) return 0;//器件子地址</p><p><b>  Start();</b></p><p>  if (!SendByte(Slave + 1)) r

92、eturn 0;//器件地址,讀操作</p><p>  for (i = 0; i < N-1; i++)</p><p><b>  {</b></p><p>  Buffer[i] = RecByte();//接收數(shù)據(jù)</p><p>  ACK();//發(fā)送應答位</p>&l

93、t;p><b>  }</b></p><p>  Buffer[N-1] = RecByte();//接收最后一位</p><p>  NO_ACK();//發(fā)送非應答</p><p><b>  Stop();</b></p><p><b>  return 1;&

94、lt;/b></p><p><b>  }</b></p><p>  //----------------------------- KeyPAD.c --------------------------------------</p><p>  void DelayMS(uint x);</p><p> 

95、 //-----------------------------------------------------------------------------</p><p>  // 鍵盤矩陣掃描子程序</p><p>  //-----------------------------------------------------------------------------<

96、;/p><p>  uchar Keys_scan()</p><p><b>  {</b></p><p>  uchar Tmp, KeyNo = 0;</p><p>  //高四位置0,放入四行</p><p>  P1 = 0x0F;</p><p>  Delay

97、MS(1);</p><p>  //按鍵后00001111將變成0000xxxx,x中1個為0,3個仍為1</p><p>  //下面的表達式會將高四位移至低四位,并將其中唯一的0變?yōu)?,其余為0</p><p>  Tmp = P1 >> 4 ^ 0x0F;</p><p>  //對 0-3行分別附加起始值 0,4,8,1

98、2</p><p>  switch (Tmp)</p><p><b>  {</b></p><p>  case 1: KeyNo += 0; break;</p><p>  case 2: KeyNo += 4; break;</p><p>  case 4: KeyNo += 8;

99、break;</p><p>  case 8: KeyNo += 12;</p><p><b>  }</b></p><p>  return KeyNo;</p><p><b>  } </b></p><p><b>  五 仿真調(diào)試</b>

100、</p><p>  5.1 使用Keil生成hex文件</p><p>  將上述代碼經(jīng)Keil生成hex文件以便Proteus仿真。Keil界面如下圖:</p><p>  圖 5-1 Keil的使用</p><p>  5.2 使用Proteus仿真過程</p><p>  使用Proteus繪制原理圖,然后將上

101、一步Keil生成的hex程序文件載入到單片機中,點擊運行,過程大致如下:</p><p>  1.初始界面:LCD顯示“Your Password...”,提示輸入密碼,如下圖:</p><p>  圖 5-2 初始界面</p><p><b>  2.密碼輸入:</b></p><p>  輸入密碼,按確定鍵,如果正確

102、,顯示“Unlock OK!”并解鎖。</p><p>  圖 5-3 密碼正確</p><p>  圖 5-4 燈亮開鎖</p><p>  輸入密碼,按確定鍵,如果錯誤,則顯示“Error!”,不解鎖。</p><p>  圖 5-5 密碼錯誤</p><p><b>  圖 5-6 鎖未開</b&

103、gt;</p><p>  3.密碼修改及保存:</p><p>  在密碼輸入正確,鎖打開的情況下,按“修改密碼”鍵,進入密碼修改界面:</p><p>  圖 5-7 輸入新密碼</p><p>  輸入新密碼后,按“保存密碼”鍵,保存新密碼:</p><p>  圖 5-8 保存密碼</p><

104、;p><b>  六 總結與體會</b></p><p>  通過這次課程設計,讓我復習了很多學過的舊知識,同時鍛煉了自己的動手能力和查閱資料。尤其是解決在實際中解決排查問題的能力。</p><p>  通過這次的設計,我熟悉了使用Proteus的技巧,熟悉并了解了一些電子元件。</p><p>  在設計中,我學到了如何使用C語言對單片

105、機進行編寫程序,熟悉了使用KEIL軟件,并且加深了對單片機的編程技巧。</p><p>  在做這個設計的過程中,我遇到了不少的問題。這鍛煉了我篩選、查閱資料,并將理論結合到自己的設計中的能力。一步一步的排除故障原因,找到故障的原因并解決故障。</p><p>  這次的設計使我對模擬電子、數(shù)字電子知識加深了了解,尤其是在對電路進行調(diào)試的時候,出現(xiàn)了很多這些方面的問題,通過對以往知識的復習

106、鞏固,將問題解決。</p><p>  這次的設計有很多的不足,和現(xiàn)實的產(chǎn)品有很大的的差距,例如沒有更好的加密方法,電動鎖的部分在實物中使用一個LED代替等,還可以做得更好。</p><p>  最后,要感謝在這次課程設計過程中幫助我的老師同學們。</p><p>  七 參考文獻及PCB封裝圖</p><p><b>  7.1

107、參考文獻</b></p><p>  [1] 侯玉寶 陳忠平等.基于Proteus的51系列單片機設計與仿真[M].電子工業(yè)出版社,2008年</p><p>  [2] 劉坤.51單片機C語言應用開發(fā)技術大全[M].人民郵電出版社,2008年</p><p>  [3] 王守忠.51單片機應用開發(fā)速查手冊[M].人民郵電出版社,2009年</p&

108、gt;<p>  [4] 胡漢才.單片機原理及其接口技術[M].清華大學出版社,1996年</p><p>  [5] 趙新民.智能儀器設計基礎[M].哈爾濱工業(yè)大學出版社,1999年</p><p>  [6] 李鐘實.實用電子報警器精選百例[M].北京:科技技術文獻出版社,2002年</p><p>  [7] 候振鵬.嵌入式C語言程序設計[M].

109、人民郵電出版社,2006年</p><p>  [8] 王東峰等.單片機C語言應用100例[M].電子工業(yè)出版社,2009年</p><p>  [9]陳海宴.51單片機原理及應用[M].北京航空航天大學出版社,2010</p><p>  [10] Brian W. Kernighan.The C Programming Language. Prentice

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論