丁香婷婷网,黄色av网站裸体无码www,亚洲午夜无码精品一级毛片,国产一区二区免费播放

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>80C196單片機(jī)鼠標(biāo)接口程序設(shè)計(jì)實(shí)例

80C196單片機(jī)鼠標(biāo)接口程序設(shè)計(jì)實(shí)例

時(shí)間:2023-02-21 00:15:51 電子通信論文 我要投稿
  • 相關(guān)推薦

80C196單片機(jī)鼠標(biāo)接口程序設(shè)計(jì)實(shí)例

  摘要:通過對鼠標(biāo)底層通信原理及協(xié)議的深入分析,探討了鼠標(biāo)在80C196單片機(jī)系統(tǒng)中的應(yīng)用價(jià)值與可行性,并介紹了鼠標(biāo)接口軟件設(shè)計(jì)的原理及方法,給出了80C196單片機(jī)與Microsoft鼠標(biāo)的具體接口程序。
  關(guān)鍵詞:鼠標(biāo)接口技術(shù)軟件設(shè)計(jì)接口程序
  
  80C196單片機(jī)由于低格低、處理能力強(qiáng),在信號(hào)分析、數(shù)據(jù)采集等很多領(lǐng)域得到了廣泛應(yīng)用,在目標(biāo)系統(tǒng)中使用各種規(guī)格的液晶或CRT顯示器也越來越多。因此在這樣的單片機(jī)系統(tǒng)中引入鼠標(biāo),將會(huì)方便操作,提高工作效率。鼠標(biāo)內(nèi)核本質(zhì)上是一個(gè)二維的角度或位移信號(hào)檢測裝置,耗電極少、可靠性高、價(jià)格低廉,可能在許多場合發(fā)揮作用。鼠標(biāo)與主機(jī)之間通過RS-232標(biāo)準(zhǔn)串行接口進(jìn)行通信,信息傳送是單方向、無條件、無應(yīng)答連續(xù)進(jìn)行的。此外80C196的UART不直接支持鼠標(biāo)的接口協(xié)議,在程序設(shè)計(jì)中必須予以注意。本文主要探討80C196單片機(jī)與Microsoft兼容鼠標(biāo)接口程序的設(shè)計(jì)實(shí)現(xiàn)。
  
  1鼠標(biāo)信號(hào)發(fā)送協(xié)議與過程
  
  鼠標(biāo)是一個(gè)功能高度集中的小型機(jī)電一體化系統(tǒng)。它首先將直線移轉(zhuǎn)換成角度位移,再轉(zhuǎn)變成數(shù)字量,然后與按鈕狀態(tài)統(tǒng)一編碼,通過RS-232串口發(fā)出。鼠標(biāo)工作所需功率從RS-232串行接口的控制線上竊。≒S/2、USB接口鼠標(biāo)除外)。當(dāng)鼠標(biāo)被拖動(dòng)超過一個(gè)最小距離或某一按鈕被按下時(shí),它按照規(guī)定的協(xié)議將移動(dòng)距離和按鈕狀態(tài)通過一次或幾次信息發(fā)送到機(jī);主機(jī)上的鼠標(biāo)驅(qū)動(dòng)程序?qū)⑿畔⒆儞Q成鼠標(biāo)位置和按鈕狀態(tài)供其它程序模塊調(diào)用。每發(fā)生一次移動(dòng)或按鈕狀態(tài)變化,鼠標(biāo)向上發(fā)送一次信息。通常一般鼠標(biāo)的分辨率為400DPI。理論上即沿著某一方向每拖動(dòng)一英寸(一般速度),會(huì)產(chǎn)生400次信息發(fā)送過程。,如果拖動(dòng)較快,則信息發(fā)送次數(shù)送減少,但所反映的總的移動(dòng)距離仍然是400步。
  
  各種串行接口鼠標(biāo)在物理層普遍采用標(biāo)準(zhǔn)的串行通信協(xié)議,波特率為1200bps。幀格式為7個(gè)數(shù)據(jù)位、2個(gè)停止位,無奇偶校驗(yàn)位。上層協(xié)議則在此基礎(chǔ)上以十六進(jìn)制數(shù)形式直接發(fā)更新鼠標(biāo)信息,包括:初始化報(bào)告:移動(dòng)方向、距離、按鈕狀態(tài)。其一般形式如表1所示。
  
  表1鼠標(biāo)信息發(fā)送格式
  
  序號(hào)名稱字串形式長度意義說明1初始化報(bào)告4DH('M')1字節(jié)聲明初始化結(jié)束加電時(shí)發(fā)送一次2移動(dòng)、按鈕P1、P2、P33字節(jié)反映按鈕狀態(tài)、移動(dòng)方向和距離移動(dòng)或按鈕操作時(shí)發(fā)送
  上述P1、P2、P3三個(gè)參數(shù)說明:
  
  P1_D7D6固定值01;D1D0=11本次鼠標(biāo)移動(dòng)包含左右移動(dòng)分量;D3D2=11本次鼠標(biāo)移動(dòng)包含上下移動(dòng)分量;D4=1目前鼠標(biāo)右鍵呈按下狀態(tài);D5=1目前鼠標(biāo)左鍵呈按下狀態(tài)(D4D5=00則鍵呈釋放狀態(tài))。
  
  P2_D7D6固定值00;其余六位表示一個(gè)有符號(hào)二進(jìn)制數(shù),反映左右移動(dòng)量,大于0為向右移動(dòng),小于0為向左移動(dòng)。
  
  P3_D7D6固定值00;其余六位表示一個(gè)有符號(hào)二進(jìn)制數(shù),反映上下移動(dòng)量,大于0為向下移動(dòng),小于0為向上移動(dòng)。
  
  例如:[6CH02H3AH](P1=6CH,P2=02H,P3=3AH)反饋出鼠標(biāo)向右移動(dòng)了2個(gè)單位,向上移動(dòng)了6個(gè)單位,目前左鍵按下。
  
  
  2鼠標(biāo)接口程序設(shè)計(jì)
  
  80C196系列單片機(jī)內(nèi)設(shè)RS-232收發(fā)器,但需要配置接口芯片實(shí)現(xiàn)電平轉(zhuǎn)換。考慮到鼠標(biāo)從串口竊取功率,接口芯片必須具有一定的驅(qū)動(dòng)能力,而不能要用簡單的準(zhǔn)RS-232電平轉(zhuǎn)換器。這里采用MAX232E作為接口芯片。
  
  圖1中左側(cè)為80C196單片機(jī),P2.0(TXD)、P2.1(RXD)通過MAX232E形成滿足鼠標(biāo)要求的串行接口,包括生成標(biāo)準(zhǔn)RS-232C電平和提供電源供應(yīng)。圖1中最右邊為9針或24針標(biāo)準(zhǔn)串行接插件。由于鼠標(biāo)的電源供應(yīng)采用功率竊取方案,由DTR/RTS提供,這里為DTR加限流電阻防止對鼠標(biāo)造成傷害。RTS由MAX232E垢信號(hào)發(fā)送端提供,通過80C196的P2.0控制MAX232E的10腳(對應(yīng)的輸出腳為7腳)電平高低以改變7腳電位,使鼠標(biāo)可以接收來自RTS的控制命令,以實(shí)現(xiàn)鼠標(biāo)安裝與否的檢測。MAX232E的11腳(對應(yīng)的輸入腳為14腳)設(shè)備高電平以保證14腳電位為負(fù)RS-232電位,滿足鼠標(biāo)發(fā)送信號(hào)時(shí)的電平要求。
  
  從鏈路層看,80C196串行接口的四種工作方式均不滿足鼠標(biāo)的幀格式要求;但其工作方式1(1位起始位、8位數(shù)據(jù)位、1位停止位)的總傳送位數(shù)與鼠標(biāo)(1位起始位、7個(gè)數(shù)據(jù)位、2個(gè)停止位)相同,均為10位。接收過程中80C196收到7個(gè)數(shù)據(jù)位后,將2個(gè)停止位中的第一個(gè)作為數(shù)據(jù)位裝入接收緩沖器的最高位,由于停止位在物理層是高電平,作為數(shù)據(jù)被接收后相當(dāng)于邏輯“0”;剩下的第二個(gè)停止位給好為80C196提供了有效的停止位。利用80C196的工作方式1完全可以保證正確接收鼠標(biāo)信息。
  
  單片機(jī)起動(dòng)后,通過鼠標(biāo)驅(qū)動(dòng)模塊對鼠標(biāo)進(jìn)行初始化,即通過P2.0使RTS電平翻轉(zhuǎn)一次而令鼠標(biāo)發(fā)送初始化報(bào)告,以確認(rèn)鼠標(biāo)是否安裝。之后,鼠標(biāo)即可隨著拖動(dòng)或按鈕操作向單片機(jī)發(fā)送動(dòng)作信息,經(jīng)接口模塊釋放即可反應(yīng)鼠標(biāo)位置和按鈕狀態(tài)。
  
  鼠標(biāo)接口模塊主要包括按鈕狀態(tài)識(shí)別和位置識(shí)別兩個(gè)部分。80C196將根據(jù)接收到的鼠標(biāo)信息不斷刷新鼠標(biāo)信息緩沖區(qū)。由于鼠標(biāo)事件間隔不確定,采用掃描方式但會(huì)浪費(fèi)CPU時(shí)間,還可能因來不及處理而丟失信息。有效的處理方法是采用中斷方式接收,應(yīng)用模塊通過軟件接口獲得鼠標(biāo)信息。完整的鼠標(biāo)接口程序流程圖如圖2所示。在初始化階段,首先檢查鼠標(biāo)是否存在,根據(jù)結(jié)果設(shè)置標(biāo)志位,以備以后取鼠標(biāo)信息時(shí)判斷用;根據(jù)需要設(shè)定鼠標(biāo)初始化位置、按鈕原始狀態(tài);最后設(shè)置串行接口參數(shù)(幀格式等)并開放鼠標(biāo)中斷。鼠標(biāo)發(fā)送信息時(shí),第三個(gè)字節(jié)為一個(gè)完整的信息報(bào)告。但80C196每接收到一個(gè)字節(jié),就產(chǎn)生一次中斷,然后根據(jù)當(dāng)前字節(jié)是否大于40H確定其性質(zhì)。若是信息報(bào)告的首字節(jié),則還要進(jìn)一步通過有效性檢驗(yàn)后保存;若不是首字節(jié),則必須經(jīng)過一系列檢驗(yàn)后保存起來。收到三個(gè)字節(jié)后立即進(jìn)行命令分析和執(zhí)行。具體處理過程可參看源程序。用戶模塊通過特定接口模塊(圖2(b))獲得鼠標(biāo)當(dāng)前位置和按鈕狀,并可通過進(jìn)位標(biāo)志C=0/1判斷鼠標(biāo)是否安裝。
  
  下面是圖2、3程序流程圖如圖對應(yīng)的程序清單。該程序要求80C196單片機(jī)的工作頻率為12MHz;如果采有其它工作頻率,通過修改串行口的波特率設(shè)置參數(shù)以及延時(shí)程序的時(shí)間常數(shù)即可。
  
 。
  
 ;8098特殊功能寄存器預(yù)定義
  
  R0EQU00H:Word
  
  SBUDEQU07H:Byte
  
  INT_MASKEQU08H:Byte
  
  INT_PENDEQU09H:Byte
  
  BAUD_RTEQU0EH:Byte
  
  IOP2EQU10H:Byte
  
  SP_CONEQU11H:Byte
  
  SP_STATEQU11H:Byte
  
  IOC1EQU16H:Byte
  
  SPEQU18H:Word
  
 ;
  
 ;通用寄存器預(yù)定義
  
  RSEGATICH
  
  AX:DSW1
  
  DX:DSW1
  
  ALEQUAX:BYTE
  
  AHEQU(AX+1):BYTE
  
  DLEQUDX:BYTE
  
  DHEQU(DX+1):BYTE
  
  SCRNWEQU640;顯示屏寬度
  
  SCRNHEQU480;顯示屏高度
  
 。
  
 。蛔兞繀^(qū)
  
  RSEGAT20H
  
  M_X:DSW1;光標(biāo)X值
  
  M_Y:DSW1:光標(biāo)Y值
  
  M_BUF:DSB4;接收緩沖區(qū)
  
  M_P:DSW1;接收指針
  
  BX:DSW1
  
  LRB_OK:DSB1;鼠標(biāo)狀態(tài)
  
  ;Bit7:存在,Bit5,左鍵,Bit4:右鍵
  
 ;
  
  CSEGAT2000H
  
  DCWINIT
  
  CSEGAT200CH
  
  DCWSIOINT
  
  DCWINIT
  
  DCW0
  
  DCB0,0,0,0,0,0
  
  DCB08DH
  
  DCB000H
  
  DCB027H,0FEH
  
 ;
  
  CSEGAT2080H
  
  INIT:LDSP,#0100H;設(shè)堆棧指針
  
  LDM_X,#SCRNW/2;初始化指針
  
  LDM_Y,#SCRNH/2
  
  ANDBLRB_OK,#7CH
  
  LDM_P,#M_BUF
  
  CLRBINT_PEND;清除中斷
  
  LDBINT_MASK,#40H;開串行中斷
  
  LDBAL,SP_STAT;清除RI/TI
  
  LDBSP_CON,#09H;設(shè)串口模式
  
  LDBBAUD_RT,#9BH;1200,12MHz
  
  LDBBAUD_RT,#80H
  
  EI
  
  ANDBIOP2,#0FEH;P2.2=0
  
  LDAX,#8000H;延遲200ms
  
  DLY0:DECAX
  
  JNEDLY0
  
  LDBAL,LRB_OK
  
  LBSAL,7,M_OK
  
  ANDBINT_MASK,#0BFH
  
  M_OK:NOP
  
 ;………
  
 。
  
  ;清單二:取鼠標(biāo)消息,
  
  AL=鼠標(biāo)及按鈕狀態(tài),BX=X,DX=YGET_M:ANDBINT_MASK,#0BFH
  
  LDBAL,LRB_OK;取鼠標(biāo)信息
  
  LDBX,M_X
  
  LDDX,M_Y
  
  ORBINT_MASK,#40H
  
  RET
  
 ;
  
 。磺鍐稳捍谥袛喾⻊(wù)程序
  
  SIOINT:PUSHF;中斷服務(wù)
  
  PUSHAX
  
  LDBAL,SBUF
  
  LDBAH,SP_STAT
  
  JBSAL,6,ISB0;第一個(gè)字節(jié)
  
  CMPM_P,#M_BUF
  
  JNESIO_1
  
  SJMPC99;緩沖區(qū)空,出錯(cuò)
  
  SIO_1:CMPM_P,#M_BUF+2
  
  JHC98;緩沖區(qū)滿,出錯(cuò)
  
  STBAL,[M_P]+;存儲(chǔ)收到字節(jié)
  
  CMPM_P,#M_BUF+3
  
  JNEC99
  
  LDM_P,#M_BUF;已收到完整命令
  
  GOLR:LDBAL,1[M_P];處理X方向位移
  
  SHLBAL,#2
  
  EXTBAL
  
  SHRAAX,#2
  
  ADDM_X,AX
  
  CKL:CMPM_X,#0
  
  JGECKR
  
  CLRM_X
  
  CKR:CMPM_X,#SCRNW
  
  JLTGOUD
  
  LDM_X,#SCRNW
  
  GOUD:LDBAL,2[M_P];處理Y方向位數(shù)
  
  SHLBAL,#2
  
  EXTBAL
  
  SHRAAX,#2
  
  ADDM_Y,AX
  
  CKU:CMPM_Y,#0
  
  JGECKD
  
  CLRM_Y
  
  CKD:CMPM_Y,#SCRNH
  
  JLTELRUD
  
  LDM_Y,#SCRNH
  
  ELRUD:SJMPC98
  
  ISB0:STBAL,M_BUF
  
  ANDBAL,#0FH
  
  CMPBAL,#03H
  
  JEC97;=X3H,
  
  CMPBAL,#0CH
  
  JEC97;=XCH
  
  CMPBAL,#0DH
  
  JNEC98;<>XDH
  
  ORBLRB_OK,#80H;確認(rèn)鼠標(biāo)正常
  
  C97:ANDBAL,M_BUF,#30H
  
  ANDBLRB_OK,#80H
  
  ORBLRB_OK,AL;更新左右鍵狀態(tài)
  
  LDM_P,#M_BUF+1
  
  SJMPC99
  
  C98:LDM_P,#0000H
  
  C99:POPAX
  
  POPF
  
  RET
  
 ;
  
  END
  
  
  
  
  
  

【80C196單片機(jī)鼠標(biāo)接口程序設(shè)計(jì)實(shí)例】相關(guān)文章:

MultiMediacard及其與單片機(jī)接口08-06

嵌入式設(shè)備鼠標(biāo)接口的設(shè)計(jì)與實(shí)現(xiàn)08-06

基于單片機(jī)的MicroDrive接口設(shè)計(jì)08-06

串行DataFlash存儲(chǔ)器及其與單片機(jī)的接口08-06

一種簡單串行鼠標(biāo)控制的單片機(jī)實(shí)現(xiàn)08-06

TI 54xxDSP與51單片機(jī)的接口技術(shù)08-06

用CPLD實(shí)現(xiàn)單片機(jī)與ISA總線接口的并行通信08-06

一種用于單片機(jī)的紅外串行通信接口08-06

鼠標(biāo)08-16