| 
  |||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe  | 
  
4乘3鍵盤匯編源程序請教 | 
  
| 作者:笨鳥急飛 欄目:技術(shù)交流 | 
我在《8051單片機實踐與應(yīng)用》(清華大學(xué)出版社出版)一書中看到有關(guān)4乘3鍵盤的匯編程序,有些地方不明白,請高手指教。原理圖的接法是:p1.0-p1.3接4個橫列,p1.5-p1.7接3個豎列。本書給的部分源程序是這樣寫的: org 00h start:mov r4,$06h ;清除30H-35H的地址 mov r0,#30h clear:mov @r0,#00h inc r0 djnz r4,clear l1: mov r3,#0f7h ;掃描初值,p1.3=0 mov r1,#00h ;取碼指針 l2: mov a,r3 ;開始掃描 mov p1,a ;將掃描值送p1 mov a,p1 ;讀入p1值,判斷是否有鍵按下 mov r4,a ;存入r4,以判斷是否放開 setb c mov r5,#03h ;掃描p1.5-p1.7 l3: rlc a ;將按鍵值左移一位 jnc keyin ;判斷c=0?有鍵按下則c=0,跳至keyin inc r1 ;c=1則表示沒按,將取碼指針值加1 djnz r5,l3 ;3列掃描完畢了嗎? 我的問題是將¥0f7h=111110111b送給累加器,為什么左移,為什么利用判斷c 是否等于0就能判斷是否有按鍵按下。謝謝。  | 
  
| 2樓: | >>參與討論 | 
| 作者: coldra 于 2006/2/16 23:06:00 發(fā)布:
         這樣的 org 00h start:mov r4,$06h ;清除30H-35H的地址 mov r0,#30h clear:mov @r0,#00h inc r0 djnz r4,clear l1: mov r3,#0f7h ;掃描初值,p1.3=0 mov r1,#00h ;取碼指針 l2: mov a,r3 ;開始掃描 mov p1,a ;將掃描值送p1 mov a,p1 ;讀入p1值,判斷是否有鍵按下 mov r4,a ;存入r4,以判斷是否放開 ;以上把P1.3置低電平,我想這些IO口都應(yīng)該加有上拉 setb c mov r5,#03h ;掃描p1.5-p1.7 l3: rlc a ;將按鍵值左移一位 jnc keyin ;判斷c=0?有鍵按下則c=0,跳至keyin inc r1 ;c=1則表示沒按,將取碼指針值加1 djnz r5,l3 ;3列掃描完畢了嗎? 以上表示將a左移,依次判斷p1.7-p1.5是否按上,如果p1.7在與p1.3線交叉點的鍵按下,p1.7讀為0,則a左移后c為0,可確定該鍵了,跳到keyin,如果沒有,則再左移,看p1.6與p1.3的鍵按下否,同理,直到p1.5。 覺得這個程序并不完整,應(yīng)該還要改變掃描初值0f7h,為0fb,0fd,0fe,來判斷p1.2,p1.1,p1.0p這些線,還要繼續(xù)加循環(huán)才是  | 
  |
| 3樓: | >>參與討論 | 
| 作者: hui7744 于 2006/2/17 8:23:00 發(fā)布:
         mov r4,$06h start:mov r4,$06h ;清除30H-35H的地址 這條指令是不是應(yīng)該改成:MOV R4,#06H  | 
  |
| 4樓: | >>參與討論 | 
| 作者: 笨鳥急飛 于 2006/2/17 19:45:00 發(fā)布:
         感謝樓上兩位,特別是2樓的。  | 
  |
  | 
    
 
  | 
  
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 | 
Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號  |