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

下載本文檔

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

文檔簡介

1、<p>  新型單片機(jī)開發(fā)與應(yīng)用</p><p><b>  課程設(shè)計報告</b></p><p>  課題名稱:簡易六位密碼鎖</p><p>  學(xué) 院:電子與通信工程學(xué)院 </p><p>  班 級:11微電子1班</p><p>

2、  姓 名:</p><p>  學(xué) 號:</p><p>  指導(dǎo)老師:</p><p>  2013年6月24日</p><p><b>  摘要</b></p><p>  隨著科學(xué)技術(shù)的不斷發(fā)展,人們對日常生活中的安全保險器件的要求越來越

3、高。為滿足人們對鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖具有安全性高、成本低、功耗低、易操作、記住密碼即可開鎖等優(yōu)點(diǎn)。</p><p>  本系統(tǒng)由ATmega16單片機(jī)系統(tǒng)(主要是ATmega16單片機(jī)最小系統(tǒng))、4×4矩陣鍵盤、LCD1602顯示組成,具有驗(yàn)證、修改六位用戶密碼的功能。</p><p>  關(guān)鍵詞密碼鎖ATmega16LCD1

4、6024×4矩陣鍵盤</p><p><b>  目錄</b></p><p><b>  緒論1</b></p><p><b>  一、設(shè)計方案2</b></p><p>  1.1.功能簡介2</p><p>  1.2.

5、開發(fā)測試環(huán)境選擇2</p><p>  二、密碼鎖硬件設(shè)計2</p><p>  2.1ATmega16單片機(jī)最小系統(tǒng)2</p><p>  2.2矩陣按鍵模塊3</p><p>  2.3LCD1602顯示模塊4</p><p>  2.4密碼鎖電路圖設(shè)計5</p><p&g

6、t;  三、密碼鎖軟件設(shè)計6</p><p>  3.1密碼鎖程序流程圖6</p><p>  3.2程序模塊設(shè)計6</p><p>  3.2.1密碼驗(yàn)證模塊7</p><p>  3.2.2密碼修改模塊8</p><p><b>  小結(jié)9</b></p>

7、<p><b>  參考文獻(xiàn)資料9</b></p><p><b>  附錄110</b></p><p><b>  緒論</b></p><p>  20世紀(jì)80年代后,隨著電子鎖專用集成電路的出現(xiàn),電子鎖的體積縮小,可靠性提高,成本較高,是適合使用在安全性要求較高的場合,且需要有電

8、源提供能量,使用還局限在一定范圍,難以普及,所以對它的研究一直沒有明顯進(jìn)展。目前,在西方發(fā)達(dá)國家,電子密碼鎖技術(shù)相對先進(jìn),種類齊全,電子密碼鎖已被廣泛應(yīng)用于智能門禁系統(tǒng)中,通過多種更加安全,更加可靠的技術(shù)實(shí)現(xiàn)大門的管理。在我國電子鎖整體水平尚處于國際上70年代左右,電子密碼鎖的成本還很高,市場上仍以按鍵電子鎖為主,按鍵式和卡片鑰匙式電子鎖已引進(jìn)國際先進(jìn)水平,現(xiàn)國內(nèi)有幾個廠生產(chǎn)供應(yīng)市場。但國內(nèi)自行研制開發(fā)的電子鎖,其市場結(jié)構(gòu)尚未形成,應(yīng)用

9、還不廣泛。國內(nèi)的不少企業(yè)也引進(jìn)了世界上先進(jìn)的技術(shù),發(fā)展前景非常可觀。希望通過不斷的努力,使電子密碼鎖在我國也能得到廣泛應(yīng)用。</p><p><b>  設(shè)計方案</b></p><p><b>  功能簡介</b></p><p>  本次設(shè)計的簡易6位密碼鎖主要包含兩個功能:密碼驗(yàn)證功能和修改密碼功能。密碼驗(yàn)證功能初始

10、密碼為6個“0”,輸入6位密碼并按“確定”后比對密碼,正確提示“correct”,錯誤提示“PW error”并要求再次輸入密碼;設(shè)置密碼時要求先輸入原密碼匹配后才能修改密碼,密碼修改完成功成后會提示“success”。</p><p><b>  開發(fā)測試環(huán)境選擇</b></p><p>  開發(fā)軟件選擇了HP Info Tech的CodeVisionAVR V2.

11、05,仿真軟件選擇了英國Labcenter electronics公司的proteus7 professional,測試硬件選擇了AVR開發(fā)箱。首先在CodeVisionAVR V2.05下進(jìn)行程序設(shè)計,編譯通過后用proteus7 professional進(jìn)行仿真并嘗試下載到開發(fā)箱中進(jìn)行操作,最后下載到開發(fā)箱中進(jìn)行操作演示。</p><p><b>  密碼鎖硬件設(shè)計</b></p&

12、gt;<p>  本次設(shè)計主要采用的硬件可以分為以下3個模塊:ATmega16單片機(jī)最小系統(tǒng),矩陣按鍵模塊和LCD1602顯示模塊。</p><p>  ATmega16單片機(jī)最小系統(tǒng)</p><p>  美國ATMEL公司生產(chǎn)的ATmega16是基于增強(qiáng)的AVR RISC結(jié)構(gòu)的低功耗8 位CMOS微控制器。由于其先進(jìn)的指令集以及單時鐘周期指令執(zhí)行時間,ATmega16 的數(shù)

13、據(jù)吞吐率高達(dá)1 MIPS/MHz,從而可以減緩系統(tǒng)在功耗和處理速度之間的矛盾。本芯片是以Atmel 高密度非易失性存儲器技術(shù)生產(chǎn)的,通過將8 位RISC CPU 與系統(tǒng)內(nèi)可編程的Flash 集成在一個芯片內(nèi), ATmega16 成為一個功能強(qiáng)大的單片機(jī),為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。</p><p>  ATmega16的最小系統(tǒng)包含了復(fù)位以及晶振電路,如圖2.1所示。</p>

14、<p>  圖2.1 ATmega16最小系統(tǒng)</p><p>  如上圖所示,復(fù)位電路工作原理是當(dāng)系統(tǒng)上電是C1電容充電使得MCU的復(fù)位端處在低電平(ATmega16為低電平復(fù)位),電容充滿電后回路斷開復(fù)位端處在高電平MCU正常工作。在晶振電路中為了使晶振穩(wěn)定工作一般將晶振兩端通過兩個22Pf~33pF的電容接地。</p><p><b>  矩陣按鍵模塊</

15、b></p><p>  本設(shè)計采用4*4行列式鍵盤,同時也能減少鍵盤與單片機(jī)接口時所占用的I/O口的數(shù)目,在按鍵比較多的時候,通常采用這樣方法。按鍵模塊如圖2.2所示。</p><p>  圖2.2 4*4矩陣按鍵模塊</p><p>  如上圖所示,把每個鍵都分成水平和垂直的兩端接入,比如說掃描碼是從垂直的入,那就代表那一行所接收到的掃描碼是同一個bit

16、,而讀入掃描碼的則是水平,掃描的動作是先輸入掃描碼,再去讀取輸入的值,經(jīng)過比對之后就可知道是哪個鍵被按下。本設(shè)計使用單片機(jī)的PA口對按鍵進(jìn)行操作。</p><p>  由于是機(jī)械式按鍵,我們必須在偵測到有按鍵被按下后延時一定的時間,等待按鍵穩(wěn)定再去判讀所按下的鍵。且在使用時為了避免連按或多按也需要采取用while()函數(shù)等來進(jìn)行按鍵釋放的判斷。</p><p>  LCD1602顯示模塊&

17、lt;/p><p>  顯示設(shè)計采用字符型液晶屏設(shè)計,由單片機(jī)的PB口控制字符液晶顯示。在包含頭文件(lcd.h)前聲明PB口與LCD模塊通訊。方法如下:</p><p>  /* 使用PORTB 連接LCD模塊 */</p><p><b>  #asm</b></p><p>  .equ __lcd_port=0x18

18、;</p><p><b>  #endasm</b></p><p>  LCD模塊與單片機(jī)口線連接方式如下:</p><p>  [LCD] RS(pin4) RD(pin 5) EN(pin 6) DB4(pin 11) DB5(pin 12) DB6(pin 13) DB7(pin 14) </p><p>  

19、[AVR Port] -bit 0 bit 1 bit 2 bit 4 bit 5 bit6 bit7 </p><p>  連接示意圖如圖2.3所示。</p><p>  圖2.3 LCD顯示模塊連接示意圖</p><p><b>  密碼鎖電路圖設(shè)計</b></p><p

20、>  Proteus軟件是Labcenter Electronics公司的一款電路設(shè)計與仿真軟件,它包括ISIS、ARES等軟件模塊,ARES模塊主要用來完成PCB的設(shè)計,而ISIS模塊用來完成電路原理圖的布圖與仿真。Proteus的軟件仿真基于VSM技術(shù),它與其他軟件最大的不同也是最大的優(yōu)勢就在于它能仿真大量的單片機(jī)芯片,比如MCS-51系列、PIC系列等等,以及單片機(jī)外圍電路,比如鍵盤、LED、LCD等等。通過Proteus軟

21、件的使用我們能夠輕易地獲得一個功能齊全、實(shí)用方便的單片機(jī)實(shí)驗(yàn)室。 </p><p>  本密碼鎖采用proteus進(jìn)行電路圖設(shè)計,硬件采用AVR開發(fā)箱。密碼鎖電路圖如圖2.4所示。</p><p>  圖2.4 密碼鎖電路圖</p><p><b>  密碼鎖軟件設(shè)計</b></p><p>  開發(fā)軟件選擇了HP In

22、fo Tech的CodeVisionAVR V2.05,開發(fā)語言為C語言,語法較為簡單易懂。</p><p>  軟件的設(shè)計首先要根據(jù)功能和工作流程設(shè)計出對應(yīng)的流程圖,并根據(jù)流程圖編寫響應(yīng)部分的代碼,最后再進(jìn)行調(diào)試。完整源代碼見附錄1。</p><p><b>  密碼鎖程序流程圖</b></p><p>  根據(jù)要求可作出主程序流程圖,如圖3

23、.1所示。</p><p>  圖3.1 主程序流程圖</p><p><b>  程序模塊設(shè)計</b></p><p>  根據(jù)流程圖寫出響應(yīng)的子程序最后在主程序中調(diào)用即可。主程序代碼如下(初始化部分忽略):</p><p><b>  while (1)</b></p><p

24、><b>  {</b></p><p>  key=keyscan();</p><p>  if(key!=0xff)</p><p><b>  {</b></p><p>  delay_ms(10);</p><p>  if(key==13)//按下設(shè)

25、置鍵進(jìn)入設(shè)置狀態(tài)</p><p><b>  {</b></p><p><b>  set_pw();</b></p><p>  set_flag=1;</p><p><b>  }</b></p><p>  else //按下任意鍵進(jìn)

26、入密碼驗(yàn)證狀態(tài)</p><p><b>  {</b></p><p>  lcd_clear();</p><p>  check_pw();</p><p><b>  }</b></p><p><b>  }</b></p><

27、;p>  else //無按鍵按下時液晶顯示</p><p><b>  {</b></p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Welcome");</p><p>  lcd_gotoxy(0,1);</p><p&

28、gt;  lcd_putsf("Press any key");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  密碼驗(yàn)證模塊</b></p><p>  由主程序可知,當(dāng)任意鍵按下后及進(jìn)入密碼驗(yàn)證

29、模塊。進(jìn)入該模塊后程序開始識別按鍵進(jìn)行密碼輸入,密碼驗(yàn)證是先讀取用戶輸入的密碼存到臨時緩存中,待用戶輸入完畢并確認(rèn)后進(jìn)行密碼比對,比對完成后給出相應(yīng)的提示和響應(yīng)動作,仿真結(jié)果如圖3.2.1所示。</p><p>  圖3.2.1 密碼輸入以及提示</p><p>  為方便演示,故輸入密碼時顯示對應(yīng)輸入的密碼。實(shí)際應(yīng)用時為保護(hù)密碼,輸入密碼是應(yīng)顯示對應(yīng)的“*”。</p>&l

30、t;p><b>  密碼修改模塊</b></p><p>  密碼修改模塊是基于密碼驗(yàn)證模塊設(shè)計,用戶進(jìn)入密碼修改模式后先使用密碼驗(yàn)證的方法進(jìn)行舊密碼的驗(yàn)證,驗(yàn)證通過后才能進(jìn)密碼設(shè)置。密碼設(shè)置同樣需要輸入兩次且完全匹配才能完成密碼修改。密碼修改完成后會給出提示。仿真結(jié)果如圖3.2.2所示。</p><p>  圖3.2.2 密碼修改及提示</p>

31、<p><b>  小結(jié)</b></p><p>  本次設(shè)計采用的是液晶顯示以及矩陣按鍵,液晶顯示屬于靜態(tài)顯示處理起來比較簡單,但矩陣按鍵采取的是掃描的方式,在處理按鍵時需要不停地掃描,處理不當(dāng)就會造成按鍵無響應(yīng)或者是死循環(huán)。在密碼驗(yàn)證以及密碼設(shè)置的代碼編寫時要十分注意其邏輯順序,邏輯順序不正確就會導(dǎo)致程序進(jìn)入死循環(huán)。</p><p>  通過本次設(shè)計,

32、我們進(jìn)一步了解了ATmega16單片機(jī)的外圍電路、矩陣按鍵和LCD1602的工作原理和使用方法。在代碼的編寫方面也積累了經(jīng)驗(yàn),同時也鍛煉了自身對程序設(shè)計的能力和理解。</p><p><b>  參考文獻(xiàn)資料</b></p><p>  單片機(jī)應(yīng)用技術(shù):C語言版/王靜霞主編.——北京:電子工業(yè)出版社,2009.5</p><p>  單片機(jī)原理

33、及應(yīng)用/彭同明等編著.——2版.——北京:中國電力出版社,2009</p><p><b>  百度文庫資料。</b></p><p><b>  附錄1</b></p><p>  簡易六位密碼鎖源代碼</p><p>  #include <mega16.h></p>

34、<p>  #include <delay.h></p><p><b>  #asm</b></p><p>  .equ __lcd_port=0x18 ;PORTB</p><p><b>  #endasm</b></p><p>  #include <lcd.

35、h></p><p>  #define uchar unsigned char</p><p>  uchar keyscan(void);</p><p>  void set_pw(void);</p><p>  void reset(uchar mark);</p><p>  void check_p

36、w(void);</p><p>  uchar pw[6]={0,0,0,0,0,0},pw_temp[6]={0,0,0,0,0,0};</p><p>  bit set_flag=0;</p><p>  void main(void)</p><p><b>  { </b></p><p&

37、gt;  uchar key;</p><p>  PORTA=0x00;</p><p>  DDRA=0xf0; </p><p>  PORTB=0x00;</p><p>  DDRB=0x00;</p><p>  PORTC=0x00;</p><p>  DDRC=0x00; &l

38、t;/p><p>  PORTD=0x00;</p><p>  DDRD=0x00;</p><p>  lcd_init(16);</p><p>  lcd_clear();</p><p><b>  while (1)</b></p><p><b>  {

39、</b></p><p>  key=keyscan();</p><p>  if(key!=0xff)</p><p><b>  {</b></p><p>  delay_ms(10);</p><p>  if(key==13)</p><p><

40、;b>  {</b></p><p><b>  set_pw();</b></p><p>  set_flag=1;</p><p><b>  }</b></p><p><b>  else </b></p><p><b

41、>  {</b></p><p>  lcd_clear();</p><p>  check_pw();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else </b>&

42、lt;/p><p><b>  {</b></p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Welcome");</p><p>  lcd_gotoxy(0,1);</p><p>  lcd_putsf("Press a

43、ny key");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void check_pw(void)//密碼比對</p><p><b&g

44、t;  {</b></p><p>  uchar key=0xFF,count=0,pw_temp2[6];</p><p>  bit q_flag=0;</p><p>  while(q_flag==0)</p><p><b>  {</b></p><p>  lcd_cl

45、ear(); </p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Present PW:"); //顯示字符串"Present PW:"</p><p>  lcd_gotoxy(0,1); </p><p>  while

46、(1)//密碼驗(yàn)證</p><p><b>  {</b></p><p>  key=keyscan();</p><p>  if(key!=0xff) </p><p><b>  {</b></p><p>  if(key>=0 &&

47、amp; key<10 && count<6)</p><p><b>  {</b></p><p>  lcd_putchar(key+48); </p><p>  pw_temp[count]=key; </p><p>  count++;

48、 </p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key==15 && count==6) //確定按鍵</p><

49、;p><b>  {</b></p><p>  for(count=0;count<6;count++)</p><p><b>  {</b></p><p>  if(pw[count]!=pw_temp[count]) //輸入密碼與原密碼比對</p><p><b>

50、;  {</b></p><p>  lcd_clear(); </p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("PW Error -_-!");</p><p><b>  count=0;</b></p><p>

51、  delay_ms(5000);</p><p>  lcd_clear();</p><p>  lcd_putsf("try again");</p><p>  lcd_gotoxy(0,1);</p><p><b>  break;</b></p><p><

52、b>  }</b></p><p>  if(count==5)</p><p><b>  {</b></p><p>  lcd_clear(); </p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Correct Y^

53、_^");</p><p><b>  count=0;</b></p><p>  delay_ms(5000);</p><p>  reset('w');</p><p><b>  break;</b></p><p><b>  

54、}</b></p><p><b>  }</b></p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p><p>  if(key==12) //清除</p><p><b>  {&

55、lt;/b></p><p><b>  count=0;</b></p><p>  reset('p');</p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p><p>  if(key=

56、=14) //取消</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  reset('w');</p><p>  while(keyscan()!=0xff);</p><p><

57、b>  q_flag=1;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p

58、><b>  }</b></p><p>  void set_pw(void) //設(shè)置密碼</p><p><b>  {</b></p><p>  uchar key=0xFF,count=0,pw_temp2[6];</p><p>  bit match=0;</

59、p><p>  while(set_flag==1)</p><p><b>  {</b></p><p>  lcd_clear(); </p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Present PW:"); //顯

60、示字符串"Present PW:"</p><p>  lcd_gotoxy(0,1); </p><p>  while(match==0)//密碼驗(yàn)證</p><p><b>  {</b></p><p>  key=keyscan();</p>

61、<p>  if(key!=0xff) </p><p><b>  {</b></p><p>  if(key>=0 && key<10 && count<6)</p><p><b>  {</b></p><p>  lc

62、d_putchar(key+48); </p><p>  pw_temp[count]=key; </p><p>  count++; </p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p&g

63、t;<p><b>  }</b></p><p>  if(key==15 && count==6) //確定按鍵</p><p><b>  {</b></p><p>  for(count=0;count<6;count++)</p><p>&l

64、t;b>  {</b></p><p>  if(pw[count]!=pw_temp[count]) //輸入密碼與原密碼比對</p><p><b>  {</b></p><p>  lcd_clear(); </p><p>  lcd_gotoxy(0,0);</p><

65、p>  lcd_putsf("PW Error -_-!");</p><p>  delay_ms(3000);</p><p>  reset('w');</p><p><b>  match=0;</b></p><p><b>  break;</b&g

66、t;</p><p><b>  }</b></p><p>  if(count==5)</p><p><b>  {</b></p><p>  lcd_clear(); </p><p>  lcd_gotoxy(0,0);</p><p> 

67、 lcd_putsf("Input new PW");</p><p>  lcd_gotoxy(0,1);</p><p><b>  count=0;</b></p><p><b>  match=1;</b></p><p><b>  break;</b

68、></p><p><b>  }</b></p><p><b>  }</b></p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p><p>  if(key==12) //

69、清除</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  reset('p');</p><p>  while(keyscan()!=0xff);</p><p><b>  }<

70、/b></p><p>  if(key==14) //取消</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  reset('w');</p><p>  set_flag=0;<

71、;/p><p>  while(keyscan()!=0xff);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  while(match==1)

72、//密碼修改</p><p><b>  {</b></p><p>  key=keyscan();</p><p>  if(key!=0xff) </p><p><b>  {</b></p><p>  if(key>=0 && key

73、<10 && count<6)</p><p><b>  {</b></p><p>  lcd_putchar(key+48); </p><p>  pw_temp[count]=key; </p><p>  count++;

74、</p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p><p>  if(key==15 && count==6) //確定按鍵</p><p><b>  {</b></p><p>  

75、for(count=0;count<6;count++)</p><p><b>  {</b></p><p>  pw[count]=pw_temp[count];</p><p><b>  }</b></p><p>  if(count==6)</p><p>

76、;<b>  {</b></p><p>  lcd_clear(); </p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Success!");</p><p>  set_flag=0;</p><p>  delay_ms(5

77、000);</p><p>  reset('w');</p><p><b>  count=0;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(key

78、scan()!=0xff); </p><p><b>  } </b></p><p>  if(key==12) //清除</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  re

79、set('p');</p><p>  while(keyscan()!=0xff);</p><p><b>  }</b></p><p>  if(key==14)</p><p><b>  {</b></p><p><b>  count

80、=0;</b></p><p>  reset('w');</p><p>  while(keyscan()!=0xff);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b&g

81、t;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void reset(char mark)</p><p><b>  

82、{</b></p><p>  lcd_clear();</p><p>  if(mark=='a')</p><p><b>  {</b></p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Again PW:

83、");</p><p>  lcd_gotoxy(0,1);</p><p><b>  }</b></p><p>  else if(mark=='i')</p><p><b>  {</b></p><p>  lcd_gotoxy(0,0)

84、;</p><p>  lcd_putsf("Input PW:");</p><p>  lcd_gotoxy(0,1);</p><p><b>  }</b></p><p>  else if(mark=='p')</p><p><b>  

85、{</b></p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Present PW:");</p><p>  lcd_gotoxy(0,1);</p><p><b>  }</b></p><p>  else if

86、(mark=='w')</p><p><b>  {</b></p><p>  lcd_gotoxy(0,0);</p><p>  lcd_putsf("Welcome Y^_^");</p><p>  lcd_gotoxy(0,1);</p><p>

87、  lcd_gotoxy(0,1);</p><p>  lcd_putsf("Press any key");</p><p><b>  }</b></p><p><b>  }</b></p><p>  uchar keyscan(void)

88、//按鍵讀取函數(shù)</p><p><b>  { </b></p><p>  uchar col[4]={0xef,0xdf,0xbf,0x7f}; //列</p><p>  uchar row[4]={0x07,0x0b,0x0d,0x0e}; //行</p><p>  uchar i,j,getSta

89、,keyVal;</p><p>  for(i=0;i<4;i++) </p><p><b>  { </b></p><p>  PORTA=col[i]; //逐列設(shè)置為0,判斷某列是否有鍵按下</p><p>  delay_us(10); </p>

90、<p>  if(PINA!=col[i]) //條件成立,表示有鍵按下,i中表示第幾列</p><p><b>  { </b></p><p>  getSta=PINA&0x0F; //讀入4個行值PA0-PA3</p><p>  for(j=0;j<4;j++) </p>

91、<p>  if(getSta==row[j]) //通過比較行值得到第j行有鍵按下 </p><p>  { keyVal=i*4+j;</p><p>  return keyVal; </p><p><b>  }</b></p><p><b>  }</b>&l

溫馨提示

  • 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

提交評論