手写笔设计报告 【实验目的】 - 实现基本点哪哪亮的基本功能。
- 具有图像清除,回放,存储等功能。
- 掌握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)
|