手寫筆設計報告 【實驗目的】 - 實現基本點哪哪亮的基本功能。
- 具有圖像清除,回放,存儲等功能。
- 掌握8255的用法。
- 掌握ADC0809的用法。
【實驗原理】 1.自制手寫筆,利用光敏電阻,在接收到不同光照后用電阻的阻值會發生變化,利用其分壓的電壓電平檢測其光照的變化。下圖為電路圖和電阻的光敏特性。 【實驗框圖】 核心:要做到實時顯示,就必須要記錄點亮LED的位置,這時要逐個點亮LED燈,在點亮前讀取電平值,在點亮后讀取電平值,若兩次差值大于某一值(經過示波器測定),則認為該位置應該被點亮,相應的標志位置1,否則不進行處理。
【實驗內容】 - 按照程序框圖書寫出實驗代碼。
- 制作好手寫筆。
- 連接實驗箱上的電路,并進行調試。
【實驗結果】 - 基本實現其基本功能,已于2016.12.7日下午14:05分請老師驗收。
- 缺陷在于筆的靈敏度不是特別高,偶爾會受到外光源的影響。
- 自制手寫筆的與實驗箱接口裸露,容易引發電路故障。
【實驗反思】 - 首先想的是利用ADC0809讀取手寫筆的絕對電平,這就導致其掃描的LED燈亮度必須大于其已經點亮的LED燈,這就導致背景色很亮,產生的視覺干擾很大,效果不是特別理想,后采用其他同學的思想,讀取電壓差,比以往的效果好。這樣也給我一個啟示:以后要讀取變化值都可采用差值讀數法。
- 由于8086處理器的主頻不是很高,要是圖像穩定,就得掃描速度快,就得使間隔少,要保證代碼精簡。
- 每次掃描前后,都要進行消影,確保不會產生干擾。
- 按鍵都必須進行軟件消抖。
【實驗代碼】 - ;-------------------------------------------------------
- ;程序功能:綜合設計實驗——手寫筆
- ;入口參數:無
- ;出口參數:無
- ;注意事項:
- ;硬件連接:
- ;/10/26 CJP
- ;-------------------------------------------------------
- DATAS SEGMENT
- ADC0809_ADD EQU 0F000H
- PA_ADD EQU 0E000H
- PB_ADD EQU 0E001H
- PC_ADD EQU 0E002H
- COM_ADD EQU 0E003H
- DELAY_DATA DB 000H,000H,000H,000H,000H,000H,000H,000H
- COPY_DATA DB 10 DUP(?)
- DATAS ENDS
- STACKS SEGMENT stack 'stack'
- STA DW 255 DUP(?)
- STACKS ENDS
- CODES SEGMENT
- ASSUME CS:CODES,DS:DATAS,SS:STACKS
- START:
- MOV AX,DATAS
- MOV DS,AX
- CALL INFO_8255
- RE:
- CALL XIAOYIN
- CALL LED_PANDUAN
- CALL XIAOYIN
- CALL LED_SCAN
- CALL XIAOYIN
- CALL KEY_CLEAR
- CALL XIAOYIN
- CALL KEY_BAOCUN
- CALL XIAOYIN
- CALL KEY_HUIFANG
- CALL XIAOYIN
- JMP RE
- MOV AH,4CH
- INT 21H
- ;-------------------------------------------------------
- ;程序功能:程序消影
- ;入口參數:
- ;出口參數:無
- ;注意事項:
- ;2016/9/26 CJP
- ;-------------------------------------------------------
- XIAOYIN PROC NEAR
- PUSH AX
- PUSH DX
- MOV AL,000H
- MOV DX,PA_ADD
- OUT DX,AL
- MOV AL,0FFH
- MOV DX,PB_ADD
- OUT DX,AL
- CALL DELAY
- POP DX
- POP AX
- RET
- XIAOYIN ENDP
- ;-------------------------------------------------------
- ;程序功能:延時函數
- ;入口參數:無
- ;出口參數:無
- ;注意事項:無
- ;2016/1026 CJP
- ;-------------------------------------------------------
- DELAY PROC NEAR
- PUSH AX
- PUSH CX
- MOV CX,8
- LOOP $
- POP CX
- POP AX
- RET
- DELAY ENDP
- ;-------------------------------------------------------
- ;程序功能:延時函數()毫秒
- ;入口參數:DX,將延時時間賦給DX,單位為毫秒
- ;出口參數:無
- ;注意事項:延時時間不可改變
- ;2016/9/26 CJP
- ;-------------------------------------------------------
- DELAY_ms PROC NEAR
- PUSH AX
- PUSH CX
- MOV CX,DX
- LOOP [ DISCUZ_CODE_1 ]nbsp;
- POP CX
- POP AX
- RET
- DELAY_ms ENDP
- ;-------------------------------------------------------
- ;程序功能:初始化8255
- ;入口參數:無
- ;出口參數:無
- ;注意事項:無
- ;2016/9/26 CJP
- ;-------------------------------------------------------
- INFO_8255 PROC NEAR
- PUSH DX
- PUSH AX
- MOV AL,10001001B ;設置PA,PB為普通輸出,方式0,PC為輸入
- MOV DX,COM_ADD
- OUT DX,AL
- POP AX
- POP DX
- RET
- INFO_8255 ENDP
- ;-------------------------------------------------------
- ;程序功能:讀取手寫筆所在的位置
- ;入口參數:
- ;出口參數:無
- ;注意事項:無
- ;2016/12/1 CJP
- ;-------------------------------------------------------
- LED_PANDUAN PROC NEAR
- PUSH DX
- PUSH DI
- PUSH CX
- PUSH BX
- PUSH AX
-
- MOV DI,OFFSET DELAY_DATA
- MOV BL,07FH
- AGAIN0:
- MOV DX,PB_ADD
- MOV AL,BL
- OUT DX,AL
- MOV BH,080H
- MOV CX,8
- AGAIN1:
- CALL DATA_READ1
- MOV AL,BH
- MOV DX,PA_ADD
- OUT DX,AL
- NOP
- NOP
- NOP
- NOP
- MOV AL,000H
- MOV DX,PA_ADD
- OUT DX,AL
-
- CALL DATA_READ
- CALL DELAY
- CALL DELAY
- MOV DX,PB_ADD
- MOV AL,BL
- OUT DX,AL
-
- ROR BH,1
- LOOP AGAIN1
-
- ROR BL,1
- INC DI
- CMP BL,07FH
- JNZ AGAIN0
-
- MOV AL,000H
- MOV DX,PA_ADD
- OUT DX,AL
-
- MOV AL,0FFH
- MOV DX,PB_ADD
- OUT DX,AL
-
- POP AX
- POP BX
- POP CX
- POP DI
- POP DX
- RET
- LED_PANDUAN ENDP
- ;------------------------------------------------------------
- ;程序功能:點亮之前,從ADC0809讀取數據
- ;入口參數:
- ;出口參數:無
- ;注意事項:注意DI的值
- ;2016/10/26 CJP
- ;------------------------------------------------------------
- DATA_READ1 PROC NEAR
- MOV DX,ADC0809_ADD
- OUT DX,AL
- MOV DX,PC_ADD
- WAIT11:
- IN AL,DX
- AND AL,001H
- CMP AL,001H
- JZ READ_OK
- JMP WAIT11
- READ_OK:
- MOV DX,ADC0809_ADD
- IN AL,DX
- MOV AH,AL
- RET
- DATA_READ1 ENDP
- ;------------------------------------------------------------
- ;程序功能:點亮之前,從ADC0809讀取數據
- ;入口參數:
- ;出口參數:無
- ;注意事項:注意DI的值
- ;2016/10/26 CJP
- ;------------------------------------------------------------
- DATA_READ PROC NEAR
- PUSH DX
- MOV DX,ADC0809_ADD
- OUT DX,AL
- MOV DX,PC_ADD
- WAIT111:
- IN AL,DX
- AND AL,001H
- CMP AL,001H
- JZ READ_OK1
- JMP WAIT111
- READ_OK1:
- MOV DX,ADC0809_ADD
- IN AL,DX
-
- SUB AH,5
- CMP AH,AL
- JA NEXTT
-
- POP DX
- RET
- NEXTT:
- MOV AL,[DI]
- OR AL,BH
- MOV [DI],AL
- POP DX
- RET
- DATA_READ ENDP
- ;-------------------------------------------------------
- ;程序功能:刷新,穩定位置
- ;入口參數:
- ;出口參數:無
- ;注意事項:無
- ;2016/9/26 CJP
- ;-------------------------------------------------------
- LED_SCAN PROC NEAR
- PUSH DX
- PUSH DI
- PUSH CX
- PUSH BX
- PUSH AX
- MOV DI,OFFSET DELAY_DATA
- MOV BL,07FH
- MOV CX,8
- AGAIN000:
- MOV DX,PB_ADD
- MOV AL,BL
- OUT DX,AL
- MOV AL,[DI]
- MOV DX,PA_ADD
- OUT DX,AL
- CALL DELAY
- CALL XIAOYIN
- INC DI
- ROR BL,1
- LOOP AGAIN000
-
- CALL XIAOYIN
-
- POP AX
- POP BX
- POP CX
- POP DI
- POP DX
- RET
- LED_SCAN ENDP
- ;---------------------------------------------------------------------
- ;程序功能:判斷PC5是否按下,按下時,保存數據
- ;入口參數:無
- ;出口參數:無
- ;注意事項:無
- ;2016/10/10 CJP
- ;---------------------------------------------------------------------
- KEY_BAOCUN PROC NEAR
- PUSH DI
- PUSH DX
- PUSH SI
- PUSH BX
- PUSH AX
-
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,020H
- CMP AL,020H
- JNZ BAOCUN_END
-
- CALL DELAY
-
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,020H
- CMP AL,020H
- JNZ BAOCUN_END
- BAOCUN_WAIT:
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,020H
- CMP AL,020H
- JZ BAOCUN_WAIT
- MOV CX,8
- MOV DI,OFFSET DELAY_DATA
- MOV SI,OFFSET COPY_DATA
- COPY:
- MOV AL,[DI]
- MOV [SI],AL
- INC SI
- INC DI
- LOOP COPY
- BAOCUN_END:
- POP AX
- POP BX
- POP SI
- POP DX
- POP DI
- RET
- KEY_BAOCUN ENDP
- ;------------------------------------------------------------------
- ;程序功能:判斷PC2是否按下,按下時,清除數據
- ;入口參數:無
- ;出口參數:無
- ;注意事項:無
- ;2016/10/10 CJP
- ;--------------------------------------------------------------------
- KEY_CLEAR PROC NEAR
- PUSH DX
- PUSH SI
- PUSH DI
- PUSH CX
- PUSH AX
-
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,040H
- CMP AL,040H
- JNZ CLEAR_END
-
- MOV DX,1
- CALL DELAY ;此處延時1ms
-
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,040H
- CMP AL,040H
- JNZ CLEAR_END
- CLEAR_WAIT:
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,040H
- CMP AL,040H
- JZ CLEAR_WAIT
- MOV CX,8
- MOV DI,OFFSET DELAY_DATA
- CLEAR:
- MOV AL,000H
- MOV [DI],AL
- INC DI
- LOOP CLEAR
- CLEAR_END:
- POP AX
- POP CX
- POP DI
- POP SI
- POP DX
- RET
- KEY_CLEAR ENDP
- ;--------------------------------------------------------------------
- ;程序功能:判斷PC8是否按下,按下時,回放圖像
- ;入口參數:無
- ;出口參數:無
- ;注意事項:無
- ;2016/10/10 CJP
- ;--------------------------------------------------------------------
- KEY_HUIFANG PROC NEAR
- PUSH DX
- PUSH SI
- PUSH CX
- PUSH BX
- PUSH AX
-
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,080H
- CMP AL,080H
- JNZ HUIFANG_END
-
- MOV DX,1
- CALL DELAY ;此處延時2ms
-
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,080H
- CMP AL,080H
- JNZ HUIFANG_END
- HUIFANG_WAIT:
- MOV DX,PC_ADD
- IN AL,DX
- AND AL,080H
- CMP AL,080H
- JZ HUIFANG
- JMP HUIFANG_END
- HUIFANG:
- CALL LED_COPY_SCAN
- JMP HUIFANG_WAIT
- HUIFANG_END:
- POP AX
- POP BX
- POP CX
- POP SI
- POP DX
- RET
- KEY_HUIFANG ENDP
- ;-------------------------------------------------------
- ;程序功能:顯示保存的圖像
- ;入口參數:
- ;出口參數:無
- ;注意事項:無
- ;2016/9/26 CJP
- ;-------------------------------------------------------
- LED_COPY_SCAN PROC NEAR
- PUSH DX
- PUSH DI
- PUSH CX
- PUSH BX
- PUSH AX
- MOV DI,OFFSET COPY_DATA
- MOV BL,07FH
- MOV CX,8
- AGAIN000O:
- MOV DX,PB_ADD
- MOV AL,BL
- OUT DX,AL
- MOV AL,[DI]
- MOV DX,PA_ADD
- OUT DX,AL
- CALL DELAY
- CALL XIAOYIN
- INC DI
- ROR BL,1
- LOOP AGAIN000O
- CALL XIAOYIN
- POP AX
- POP BX
- POP CX
- POP DI
- …………
- …………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整的Word格式文檔51黑下載地址(共24頁):
手寫筆綜合設計實驗(微機實驗報告).doc
(83.69 KB, 下載次數: 19)
2017-12-27 14:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|