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

下載本文檔

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

文檔簡介

1、<p>  單片機課程設計說明書</p><p>  2008 級 電子信息工程 專業(yè) 班級</p><p>  題 目 基于單片機的數(shù)字密碼鎖設計</p><p>  數(shù)字密碼鎖的基本原理</p><p>  1.1 設計要求及基本實現(xiàn)原理</p><p>  密碼鎖設計要求如下:&l

2、t;/p><p>  數(shù)字密碼鎖能夠設置4位數(shù)字密碼;</p><p>  輸入密碼正確顯示”O(jiān)N”,輸入錯誤顯示”O(jiān)FF”;</p><p>  密碼初始值為“8888”;</p><p>  輸入原密碼正確可以修改密碼。</p><p>  根據(jù)設計要求,在設計時采用89C52單片機作為核心器件,利用C語言作為開發(fā)源程

3、序。四位數(shù)字密碼在硬件上由4位LED數(shù)碼顯示器顯示,單片機采取動態(tài)顯示方式控制數(shù)碼顯示管,可同時顯示4位數(shù)字,用4個三極管驅動4位LED顯示器;由單片機內部程序可使得密碼鎖輸入密碼正確顯示”O(jiān)N”,輸入錯誤顯示”O(jiān)FF”;開辟4個存儲單元用于存儲4位密碼,通過2×4的矩陣式按鍵鍵盤和相關程序可實現(xiàn)密碼鎖密碼初始值為“8888”,并且輸入原密碼正確可以修改密碼的功能。</p><p>  1.2 系統(tǒng)構

4、成框圖</p><p>  按照系統(tǒng)設計的要求和功能,可以將系統(tǒng)分為主控模塊、按鍵掃描模塊、蜂鳴器及LED燈、電源電路、復位電路、晶振電路、驅動電路幾個模塊。如圖1.1所示,主控模塊采用89C52單片機。</p><p>  圖1.1 基于89C52單片機的密碼鎖組成模塊圖</p><p>  數(shù)字密碼鎖的硬件設計</p><p><b

5、>  2.1 電路原理圖</b></p><p>  系統(tǒng)硬件電路圖如圖2.1所示,P3口接密碼按鍵,提示音由P3.7輸出,晶振頻率為12MHz,Q1~Q4控制4位數(shù)碼顯示器。</p><p>  限于篇幅,電路原理圖中多出采用網(wǎng)絡標號表示元件之間的連接。</p><p>  圖2.1 數(shù)字密碼鎖原理圖</p><p>  

6、2.2 電子線路CAD軟件生成的PCB圖</p><p>  如圖2.2所示,考慮到打印的示圖效果,印制電路板未經(jīng)過覆銅處理。</p><p>  圖2.2 電路原理圖生成印制電路板圖</p><p><b>  2.3 元器件列表</b></p><p>  數(shù)字密碼鎖的軟件設計</p><p&g

7、t;  3.1 程序基本流程圖</p><p>  圖3.1 數(shù)字密碼鎖程序流程圖</p><p><b>  3.2 源程序</b></p><p>  /*原始密碼8888*/</p><p>  #include<reg52.h></p><p>  #include <

8、;intrins.h></p><p>  //void delay(void);//按鍵銷抖延時</p><p>  //void keyscan(void);//鍵盤掃描</p><p>  //bit pwcmp(void);//密碼比較</p><p><b>  /*數(shù)碼管表格*/</b></p&g

9、t;<p>  unsigned char code dis_code[14]={0xc0,0xf9,0xa4,0xb0,// 0, 1, 2, 3</p><p>  0x99,0x92,0x82,0xf8,0x80,0x90, 0xbf,0xc8,0x8e,0xff};// 4, 5, 6, 7, 8, 9,-, on ,off</p><p>  unsigned c

10、har data dis_index;</p><p>  unsigned char data dis_digit;//字位</p><p>  unsigned char data dis_buf[4];//字形碼緩沖區(qū)</p><p>  unsigned char data count; //密碼位計數(shù)</p><p>  un

11、signed char data pw[4]; //密碼存儲區(qū)</p><p>  unsigned char data pwin[4]; //輸入密碼存儲區(qū)</p><p>  bit showflag; //數(shù)碼管顯示</p><p>  bit updataflag; //更改密碼標志,updataflag=1時,輸入密碼存入pw[]</p

12、><p>  bit pwflag; //密碼正確</p><p>  void display(unsigned char i)</p><p><b>  {</b></p><p><b>  P2=0xfe;</b></p><p>  P0=dis_code[i]

13、;</p><p><b>  }</b></p><p>  /*功能:延時子程序*/</p><p>  void delay(void)</p><p><b>  {</b></p><p>  unsigned char i,j;</p><p&

14、gt;  for(i=0;i<200;i++)</p><p>  for(j=0;j<250;j++);</p><p><b>  }</b></p><p>  /*函數(shù)功能:密碼比較子程序*/</p><p>  void pwcmp(void)</p><p><b&g

15、t;  {</b></p><p>  unsigned char j;</p><p>  for (j=0;j<4;j++)</p><p><b>  {</b></p><p>  if (pw[j]==pwin[j])</p><p><b>  pwflag

16、=1;</b></p><p><b>  else</b></p><p>  {pwflag=0;j=4;}</p><p><b>  }</b></p><p>  if (count<4)//密碼小于4位,直接顯示OFF</p><p>  {pw

17、flag=0;count=4;}</p><p>  if (pwflag==1)</p><p>  {dis_buf[0]=dis_code[11];</p><p>  dis_buf[1]=dis_code[0];</p><p>  dis_buf[2]=dis_code[13];</p><p>  dis

18、_buf[3]=dis_code[13];</p><p><b>  }</b></p><p><b>  else</b></p><p>  {dis_buf[0]=dis_code[12];</p><p>  dis_buf[1]=dis_code[12]; </p

19、><p>  dis_buf[2]=dis_code[0]; </p><p>  dis_buf[3]=dis_code[13]; </p><p>  } </p><p>  } </

20、p><p>  /*函數(shù)功能:鍵盤掃描子程序*/ </p><p>  void keyscan(void) </p><p>  { </p><p>  unsigned char n,j; </

21、p><p>  //掃描第一行 </p><p>  P3=0xfe; </p><p>  n=P3; </p><p>  n&=0xf0; </p>

22、<p>  if(n!=0xf0) </p><p>  { </p><p>  delay(); </p><p>  P3=0xfe; </p><p> 

23、 n=P3; </p><p>  n&=0xf0; </p><p>  if(n!=0xf0) </p><p>  { </p><p>  switch(n)

24、 </p><p><b>  {</b></p><p>  case(0xb0):</p><p>  if (count<4)</p><p><b>  { </b></p><p>  dis_buf[count]=dis_code[8];</p&

25、gt;<p>  if (updataflag==1) //按下修改密碼鍵</p><p>  pw[count]=0; </p><p><b>  else</b></p><p>  pwin[count]=0;</p><p><b>  count++;</b&g

26、t;</p><p><b>  delay();</b></p><p><b>  }</b></p><p><b>  break;</b></p><p>  case(0x70):</p><p>  if (count<4)</

27、p><p><b>  {</b></p><p>  dis_buf[count]=dis_code[8];</p><p>  if (updataflag==1) //按下修改密碼鍵</p><p>  pw[count]=3; </p><p><b>  else

28、</b></p><p>  pwin[count]=3;</p><p><b>  count++;</b></p><p><b>  delay();</b></p><p><b>  }</b></p><p><b>

29、  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //掃描第二行</b></p><p><

30、;b>  P3=0xfd;</b></p><p><b>  n=P3;</b></p><p><b>  n&=0xf0;</b></p><p>  if(n!=0xf0)</p><p><b>  {</b></p><

31、p><b>  delay();</b></p><p><b>  P3=0xfd;</b></p><p><b>  n=P3;</b></p><p><b>  n&=0xf0;</b></p><p>  if(n!=0xf0)&

32、lt;/p><p><b>  {</b></p><p><b>  switch(n)</b></p><p><b>  {</b></p><p>  case(0xb0):</p><p><b>  {</b></p&

33、gt;<p>  updataflag=1;</p><p>  for (j=0;j<4;j++)</p><p>  dis_buf[j]=dis_code[10];</p><p><b>  count=0;</b></p><p>  pwin[0]=0;</p><p&

34、gt;  pwin[1]=0;</p><p>  pwin[2]=0;</p><p>  pwin[3]=0;</p><p><b>  delay();</b></p><p><b>  }</b></p><p><b>  break;</b&g

35、t;</p><p>  case(0x70):</p><p>  if (count<4)</p><p>  { dis_buf[count]=dis_code[8];</p><p>  if (updataflag==1)//按下修改密碼鍵</p><p>  pw[count]=2;

36、</p><p><b>  else</b></p><p>  pwin[count]=2;</p><p><b>  count++;</b></p><p><b>  delay();</b></p><p><b>  }<

37、/b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*函數(shù)功能:主程序*/&l

38、t;/p><p>  void main(void)</p><p><b>  {</b></p><p>  unsigned char j;</p><p><b>  P2=0x0;</b></p><p>  TMOD=0x11;</p><p&g

39、t;  TH0 = 0xFC;</p><p>  TL0 = 0x17;</p><p><b>  TR0=1;</b></p><p><b>  ET0=1;</b></p><p><b>  EA=1;</b></p><p>  count

40、=0; //初始沒有輸入密碼</p><p>  updataflag=0;</p><p><b>  pwflag=0;</b></p><p>  dis_digit = 0xfe;</p><p>  dis_index = 0;</p><p>  pw[0]=8; //初始密

41、碼8888</p><p><b>  pw[1]=8;</b></p><p><b>  pw[2]=8;</b></p><p><b>  pw[3]=8;</b></p><p>  showflag=1; //打開數(shù)碼管顯示</p><p&

42、gt;  for (j=0;j<4;j++)</p><p>  dis_buf[j]=dis_code[10];</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  keyscan();</p><p>&

43、lt;b>  } </b></p><p><b>  }</b></p><p>  void timer0() interrupt 1</p><p>  // 定時器0中斷服務程序, 用于數(shù)碼管的動態(tài)掃描</p><p>  // dis_index --- 顯示索引, 用于標識當前顯示的數(shù)碼管和

44、緩沖區(qū)的偏移量</p><p>  // dis_digit --- 位選通值, 傳送到P2口用于選通當前數(shù)碼管的數(shù)值, 如等于0xfe時,選通P2.0口數(shù)碼管</p><p>  // dis_buf --- 顯示緩沖區(qū)基地址</p><p><b>  {</b></p><p>  TH0 = -2000/25

45、6;</p><p>  TL0 = -2000%256;</p><p>  P2 = 0xff;// 先關閉所有數(shù)碼管</p><p>  P0 = dis_buf[dis_index];// 顯示代碼傳送到P0口</p><p>  P2 = dis_digit; </p><p>

46、  dis_digit = _crol_(dis_digit,1);//位選通值左移, 下次中斷時選通下一位數(shù)碼管</p><p>  dis_index++;</p><p>  dis_index &= 0x03;// 數(shù)碼管全部掃描一遍,回到第一個開始下次掃描</p><p>  if (dis_digit == 0xef)</p&

47、gt;<p>  { dis_digit = 0xfe;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  四. 課程設計總結</b></p><p><b>  指導教師評語</b>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論