<del id="dhfrq"></del>

    1. <tr id="dhfrq"></tr>
      成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
      現在位置:范文先生網>理工論文>電子通信論文>80C196單片機鼠標接口程序設計實例

      80C196單片機鼠標接口程序設計實例

      時間:2023-02-21 00:15:51 電子通信論文 我要投稿
      • 相關推薦

      80C196單片機鼠標接口程序設計實例

        摘要:通過對鼠標底層通信原理及協議的深入分析,探討了鼠標在80C196單片機系統中的應用價值與可行性,并介紹了鼠標接口軟件設計的原理及方法,給出了80C196單片機與Microsoft鼠標的具體接口程序。
        關鍵詞:鼠標接口技術軟件設計接口程序
        
        80C196單片機由于低格低、處理能力強,在信號分析、數據采集等很多領域得到了廣泛應用,在目標系統中使用各種規格的液晶或CRT顯示器也越來越多。因此在這樣的單片機系統中引入鼠標,將會方便操作,提高工作效率。鼠標內核本質上是一個二維的角度或位移信號檢測裝置,耗電極少、可靠性高、價格低廉,可能在許多場合發揮作用。鼠標與主機之間通過RS-232標準串行接口進行通信,信息傳送是單方向、無條件、無應答連續進行的。此外80C196的UART不直接支持鼠標的接口協議,在程序設計中必須予以注意。本文主要探討80C196單片機與Microsoft兼容鼠標接口程序的設計實現。
        
        1鼠標信號發送協議與過程
        
        鼠標是一個功能高度集中的小型機電一體化系統。它首先將直線移轉換成角度位移,再轉變成數字量,然后與按鈕狀態統一編碼,通過RS-232串口發出。鼠標工作所需功率從RS-232串行接口的控制線上竊。≒S/2、USB接口鼠標除外)。當鼠標被拖動超過一個最小距離或某一按鈕被按下時,它按照規定的協議將移動距離和按鈕狀態通過一次或幾次信息發送到機;主機上的鼠標驅動程序將信息變換成鼠標位置和按鈕狀態供其它程序模塊調用。每發生一次移動或按鈕狀態變化,鼠標向上發送一次信息。通常一般鼠標的分辨率為400DPI。理論上即沿著某一方向每拖動一英寸(一般速度),會產生400次信息發送過程。,如果拖動較快,則信息發送次數送減少,但所反映的總的移動距離仍然是400步。
        
        各種串行接口鼠標在物理層普遍采用標準的串行通信協議,波特率為1200bps。幀格式為7個數據位、2個停止位,無奇偶校驗位。上層協議則在此基礎上以十六進制數形式直接發更新鼠標信息,包括:初始化報告:移動方向、距離、按鈕狀態。其一般形式如表1所示。
        
        表1鼠標信息發送格式
        
        序號名稱字串形式長度意義說明1初始化報告4DH('M')1字節聲明初始化結束加電時發送一次2移動、按鈕P1、P2、P33字節反映按鈕狀態、移動方向和距離移動或按鈕操作時發送
        上述P1、P2、P3三個參數說明:
        
        P1_D7D6固定值01;D1D0=11本次鼠標移動包含左右移動分量;D3D2=11本次鼠標移動包含上下移動分量;D4=1目前鼠標右鍵呈按下狀態;D5=1目前鼠標左鍵呈按下狀態(D4D5=00則鍵呈釋放狀態)。
        
        P2_D7D6固定值00;其余六位表示一個有符號二進制數,反映左右移動量,大于0為向右移動,小于0為向左移動。
        
        P3_D7D6固定值00;其余六位表示一個有符號二進制數,反映上下移動量,大于0為向下移動,小于0為向上移動。
        
        例如:[6CH02H3AH](P1=6CH,P2=02H,P3=3AH)反饋出鼠標向右移動了2個單位,向上移動了6個單位,目前左鍵按下。
        
        
        2鼠標接口程序設計
        
        80C196系列單片機內設RS-232收發器,但需要配置接口芯片實現電平轉換?紤]到鼠標從串口竊取功率,接口芯片必須具有一定的驅動能力,而不能要用簡單的準RS-232電平轉換器。這里采用MAX232E作為接口芯片。
        
        圖1中左側為80C196單片機,P2.0(TXD)、P2.1(RXD)通過MAX232E形成滿足鼠標要求的串行接口,包括生成標準RS-232C電平和提供電源供應。圖1中最右邊為9針或24針標準串行接插件。由于鼠標的電源供應采用功率竊取方案,由DTR/RTS提供,這里為DTR加限流電阻防止對鼠標造成傷害。RTS由MAX232E垢信號發送端提供,通過80C196的P2.0控制MAX232E的10腳(對應的輸出腳為7腳)電平高低以改變7腳電位,使鼠標可以接收來自RTS的控制命令,以實現鼠標安裝與否的檢測。MAX232E的11腳(對應的輸入腳為14腳)設備高電平以保證14腳電位為負RS-232電位,滿足鼠標發送信號時的電平要求。
        
        從鏈路層看,80C196串行接口的四種工作方式均不滿足鼠標的幀格式要求;但其工作方式1(1位起始位、8位數據位、1位停止位)的總傳送位數與鼠標(1位起始位、7個數據位、2個停止位)相同,均為10位。接收過程中80C196收到7個數據位后,將2個停止位中的第一個作為數據位裝入接收緩沖器的最高位,由于停止位在物理層是高電平,作為數據被接收后相當于邏輯“0”;剩下的第二個停止位給好為80C196提供了有效的停止位。利用80C196的工作方式1完全可以保證正確接收鼠標信息。
        
        單片機起動后,通過鼠標驅動模塊對鼠標進行初始化,即通過P2.0使RTS電平翻轉一次而令鼠標發送初始化報告,以確認鼠標是否安裝。之后,鼠標即可隨著拖動或按鈕操作向單片機發送動作信息,經接口模塊釋放即可反應鼠標位置和按鈕狀態。
        
        鼠標接口模塊主要包括按鈕狀態識別和位置識別兩個部分。80C196將根據接收到的鼠標信息不斷刷新鼠標信息緩沖區。由于鼠標事件間隔不確定,采用掃描方式但會浪費CPU時間,還可能因來不及處理而丟失信息。有效的處理方法是采用中斷方式接收,應用模塊通過軟件接口獲得鼠標信息。完整的鼠標接口程序流程圖如圖2所示。在初始化階段,首先檢查鼠標是否存在,根據結果設置標志位,以備以后取鼠標信息時判斷用;根據需要設定鼠標初始化位置、按鈕原始狀態;最后設置串行接口參數(幀格式等)并開放鼠標中斷。鼠標發送信息時,第三個字節為一個完整的信息報告。但80C196每接收到一個字節,就產生一次中斷,然后根據當前字節是否大于40H確定其性質。若是信息報告的首字節,則還要進一步通過有效性檢驗后保存;若不是首字節,則必須經過一系列檢驗后保存起來。收到三個字節后立即進行命令分析和執行。具體處理過程可參看源程序。用戶模塊通過特定接口模塊(圖2(b))獲得鼠標當前位置和按鈕狀,并可通過進位標志C=0/1判斷鼠標是否安裝。
        
        下面是圖2、3程序流程圖如圖對應的程序清單。該程序要求80C196單片機的工作頻率為12MHz;如果采有其它工作頻率,通過修改串行口的波特率設置參數以及延時程序的時間常數即可。
        
        ;
        
       。8098特殊功能寄存器預定義
        
        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
        
        ;
        
       。煌ㄓ眉拇嫫黝A定義
        
        RSEGATICH
        
        AX:DSW1
        
        DX:DSW1
        
        ALEQUAX:BYTE
        
        AHEQU(AX+1):BYTE
        
        DLEQUDX:BYTE
        
        DHEQU(DX+1):BYTE
        
        SCRNWEQU640;顯示屏寬度
        
        SCRNHEQU480;顯示屏高度
        
       ;
        
       ;變量區
        
        RSEGAT20H
        
        M_X:DSW1;光標X值
        
        M_Y:DSW1:光標Y值
        
        M_BUF:DSB4;接收緩沖區
        
        M_P:DSW1;接收指針
        
        BX:DSW1
        
        LRB_OK:DSB1;鼠標狀態
        
       ;Bit7:存在,Bit5,左鍵,Bit4:右鍵
        
        ;
        
        CSEGAT2000H
        
        DCWINIT
        
        CSEGAT200CH
        
        DCWSIOINT
        
        DCWINIT
        
        DCW0
        
        DCB0,0,0,0,0,0
        
        DCB08DH
        
        DCB000H
        
        DCB027H,0FEH
        
        ;
        
        CSEGAT2080H
        
        INIT:LDSP,#0100H;設堆棧指針
        
        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;設串口模式
        
        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
        
       。弧
        
        ;
        
        ;清單二:取鼠標消息,
        
        AL=鼠標及按鈕狀態,BX=X,DX=YGET_M:ANDBINT_MASK,#0BFH
        
        LDBAL,LRB_OK;取鼠標信息
        
        LDBX,M_X
        
        LDDX,M_Y
        
        ORBINT_MASK,#40H
        
        RET
        
       。
        
        ;清單三:串口中斷服務程序
        
        SIOINT:PUSHF;中斷服務
        
        PUSHAX
        
        LDBAL,SBUF
        
        LDBAH,SP_STAT
        
        JBSAL,6,ISB0;第一個字節
        
        CMPM_P,#M_BUF
        
        JNESIO_1
        
        SJMPC99;緩沖區空,出錯
        
        SIO_1:CMPM_P,#M_BUF+2
        
        JHC98;緩沖區滿,出錯
        
        STBAL,[M_P]+;存儲收到字節
        
        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方向位數
        
        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;確認鼠標正常
        
        C97:ANDBAL,M_BUF,#30H
        
        ANDBLRB_OK,#80H
        
        ORBLRB_OK,AL;更新左右鍵狀態
        
        LDM_P,#M_BUF+1
        
        SJMPC99
        
        C98:LDM_P,#0000H
        
        C99:POPAX
        
        POPF
        
        RET
        
       ;
        
        END
        
        
        
        
        
        

      【80C196單片機鼠標接口程序設計實例】相關文章:

      MultiMediacard及其與單片機接口08-06

      嵌入式設備鼠標接口的設計與實現08-06

      基于單片機的MicroDrive接口設計08-06

      串行DataFlash存儲器及其與單片機的接口08-06

      一種簡單串行鼠標控制的單片機實現08-06

      TI 54xxDSP與51單片機的接口技術08-06

      用CPLD實現單片機與ISA總線接口的并行通信08-06

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

      鼠標08-16

      主站蜘蛛池模板: 粉嫩在线一区二区三区视频| 国产无遮挡裸体免费久久| 国产中文99视频在线观看| 日本在线a一区视频高清视频| 三级网站视频在在线播放| 女人张开腿让男人桶爽| 亚洲高潮喷水无码AV电影| 免费人成网站免费看视频| 久久亚洲综合精品成人网| 一区二区三区四区精品黄| 亚洲和欧洲一码二码三码| 国产漂亮白嫩美女在线观看 | 亚洲一区二区三区十八禁| 粉嫩在线一区二区三区视频| 61精品人妻一区二区三区| 三级4级全黄60分钟| 欧美色丁香| 国产亚洲精品综合99久久| 国产亚洲精品在av| 美女一区二区三区亚洲麻豆| 亚洲欧美成人久久综合中文网| 99RE6在线视频精品免费下载| 人妻少妇邻居少妇好多水在线| 人妻少妇偷人无码视频| 国产精品无码a∨麻豆| 久久久久久综合网天天| 成人拍拍拍无遮挡免费视频| 国产精品无码av不卡| 久久精品国产清自在天天线| 亚洲国产成人精品女人久| 九九热在线免费观看视频| 午夜福利院一区二区三区| 精品乱人码一区二区二区| 亚洲一区二区三区人妻天堂| 国产综合视频精品一区二区| 国产黄色精品一区二区三区| 国产剧情福利一区二区麻豆| 精品久久精品久久精品九九| 亚洲一区二区中文av| 国产成人精品一区二区三| 国产偷国产偷亚洲高清人|