视力自动测试仪的制作方法

文档序号:6651383阅读:431来源:国知局
专利名称:视力自动测试仪的制作方法
技术领域
该仪器属于MCS-51单片机在卫生学视力测试中的应用。
背景技术
目前在视力测试中,对视力表中视标的显示是人工用手指示的,或者是用按键摇控指示的。被测试者用手指示视标开口方向,视力的多少由人工确定。

发明内容
视力自动测试仪仍然采用标准视力表,视标的选择、显示、视力的判断由该仪器自动完成。该仪器利用MCS-51单板机的8255输入输出端口去控制视标指示灯的熄灭,即仪器能够按照视力测试要求,通过点亮视标指示灯的方法,自动显示视标,被测试者通过按键指示视标开口方向,仪器自动判断视标方向正确与否,最后给出被测者视力的结果。


图1是视力自动测仪的硬件部分。
1.根据标准视力表视标的排列位置,将视标指示灯安放在其后。某一个视标指示灯亮,表示被测者应判断该视标的方向。
2.A0-A7、B0-B7、C0-C7信号线接MCS-51单片机8255的A、B、C三个端口,P1.1、P1.2、P1.7、P1.4、P1.0接8031CPU的P1口,作为译码器的片选信号。INT1为中断请求线。
3.在图2视标方向输入键盘原理图中,基本RS触发器作为视标方向选择开关的除抖动电路。
4.如视力表上的照度达不到500-1000Lux,可以提高指示灯的瓦数。
具体实施例方式
首先自检视力表中每个视标指示灯的好坏,自检结束后显示视力表1.0的视标,被测者如能通过,则依次显示1.2、1.5的视标,否则显示0.5的视标。被测者如能看清0.5的视力,则依次显示0.6、0.8的视标,否则依次显示0.4、0.3、0.25、0.2、0.15、0.12、0.1的视标。最后显示被测者视力的结果,然后又回到1.0进行下一个的测试。每个视标显示时间为4.6秒,超过时间作输入错误处理。
按照卫生学视力测试要求0.1-0.5每行每个视标都能看清;0.6-0.9每行视标可以错认一个;1.0-1.2每行视标可以错认二个,则可通过。视力在0.1以下或1.5以上该仪器不作测试。
MCS-51单片机程序如下ORG 4000HSTARTAJMP MAINORG 4013H;外部中断`1中断入口地址。
AJMP INT1ORG 401BH;定时器1溢出中断入口地址AJMP TF1INTORG 4030HMAINMOV DPTR,#0C003H;8255控制端口地址MOV A,#88H; 确定A组B组C组低半口输出、C组高半口输入工作方式MOVX @DPTR,ACLR IT1; 选择外部中断1为低电平触发方式SETB EX1; 允许外部中断1中断SETB EA; 开放全部中断CLR P1.1; 选择1号译码器芯片MOV R0,#00H;R0为随机数存贮器,以便随机点亮每行的视标指示灯S01MOV A,#00H;使0.1视力的视标指灯亮MOV DPTR,#0C000HMOVX @DPTR,ALCALL DLY 延时MOV R6,#02HMOV B,#00HMOV A,#00HINC R0 产生随机数S012MOV DPTR,#T012;使0.12视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000H 8255 A端口地址MOVX @DPTR,ALCALL DLYINC BMOV A,BINC R0DJNZ R6,S012MOV R6,#02HMOV A,#01HMOV B,#01HS015MOV DPTR,#T015 使0.15视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYDEC BMOV A,BINC R0
DJNZ R6,S015MOV R6,#03HMOV A,#00HMOV B,#00HS02MOV DPTR,#T02使0.2视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYINC BMOV A,BINC R0DJNZ R6,S02MOV R6,#03HMOV A,#02HMOV B,#02HS025MOV DPTR,#T025 使0.25视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYDEC BMOV A,BINC R0DJNZ R6,S025MOV R6,#04HMOV A,#00HMOV B,#00HS03MOV DPTR,#T03使0.3视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYINC BMOV A,BINC R0DJNZ R6,S03SETB P1.1MOV R6,#04HMOV A,#03H
MOV B,#03HCLR P1.2S04MOV DPTR,#T04使0.4视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYDEC BMOV A,BINC R0DJNZ R6,S04MOV R6,#05HMOV A,#00HMOV B,#00HS05MOV DPTR,#T05使0.5视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYINC BMOV A,BINC R0DJNZ R6,S05MOV R6,#06HMOV A,#05HMOV B,#05HS06MOV DPTR,#T06使0.6视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ALCALL DLYDEC BMOV A,BINC R0DJNZ R6,S06SETB P1.2MOV R6,#07HMOV A,#00HMOV B,#00HCLR P1.7
S08MOV DPTR,#T08使0.8视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C001H;8255 A端口地址MOVX@DPTR,ALCALL DLYINC BMOV A,BINC R0DJNZ R6,S08MOV R6,#08HMOV A,#07HMOV B,#07HS10MOV DPTR,#T10使1.0视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C001HMOVX @DPTR,ALCALL DLYDEC BMOV A,BINC R0DJNZ R6,S10SETB P1.7MOV R6,#08HMOV A,#00HMOV B,#00HCLR P1.4S12MOV DPTR,#T12使1.2视力的视标指灯亮MOVC A,@A+DPTRMOV DPTR,#0C001HMOVX @DPTR,ALCALL DLYINC BMOV A,BINC R0DJNZ R6,S12MOV R6,#08HMOV A,#07HMOV B,#07HS15MOV DPTR,#T15使1.5视力的视标指灯亮MOVC A,@A+DPTR
MOV DPTR,#0C001HMOVX @DPTR,ALCALL DLYDEC BMOV A,BINC R0DJNZ R6,S15SETB P1.4MOV R6,#0DHMOV A,#00HMOV B,#00HCLR P1.0C00MOV DPTR,#CCC使视力的结果指灯亮MOVC A,@A+DPTRMOV DPTR,#0C002H 8255 A端口地址MOVX @DPTR,ALCALL DLYINC BMOV A,BDJNZ R6,C00SETB P1.0S10MOV P1,#0FFH关闭所有译码器MOV TMOD,#10H; 选择定时器T1为工作方式1MOV TH1,#0BCH; 产生延时50毫秒的时间常数,MOV TL1,#0B0HMOV R7,#5CH; 96*50毫秒=4.6秒CLR P1.7; 选择3#译码器MOV R4,#02H; 1.0允许错误数MOV R5,#08H 视力1.0行的视标总数存入R5,作为循环次数MOV 03H,#08H视力1.0行的视标总数存入03H单元,作为模数LCALL SG 随机点亮1.0的视标指示灯SETB ET1 允许定时器1溢出中断SETB TR1 启动定时器1工作SS10MOV DPTR,#T10MOV A,R0ADD A,#08HMOVC A,@A+DPTRMOV 09H,A将1.0正确地的视标值存入09H单元MOV A,R0MOVC A,@A+DPTR
MOV DPTR,#0C001H 8255 B端口地址MOVX @DPTR,A 点亮1.0行的某一视标指示灯CJNE R4,#00H,K10 如果错误数不超过2个,则继续SETB P1.7 关闭3#译码器CLR P1.2选择2#译码器MOV R4,#1HMOV R5,#05HMOV 03H,#05HLCALL SGAJMP SS05 如果错误数超过2个,则转入0.5的视力进行测试K10CJNE R5,#00H,SS10 如果1.0的视标未测试完则继续,否则,SETB P1.7关闭3#译码器CLR P1.4选择4#译码器MOV R4,#02HMOV R5,#08HMOV 03H,#08HMOV R0,#4HSS12MOV DPTR,#T12MOV A,R0ADD A,#08HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C001HMOVX @DPTR,ACJNE R4,#00H,K12MOV A,#0AHSETB P1.4关闭4#译码器LCALL X2LCALL DLYAJMP S10K12CJNE R5,#00H,SS12MOV R4,#02HMOV R5,#08HMOV 03H,#08HSS15MOV DPTR,#T15MOV A,R0ADD A,#08HMOVC A,@A+DPTR
MOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C001HMOVX @DPTR,ACJNE R4,#00H,K15SETB P1.4 关闭4#译码器MOV A,#0BHLCALL X2LCALL DLYAJMP S10K15CJNE R5,#00H,SS15SETB P1.4 关闭4#译码器MOV A,#0CHLCALL X2LCALL DLYAJMP S10SS05MOV DPTR,#T05MOV A,R0ADD A,#05HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K05MOV R4,#01HMOV R5,#04HMOV 03H,#04HLCALL SGAJMP SS04K05CJNE R5,#00H,SS05MOV R4,#02HMOV R5,#06HMOV 03H,#06HSS06MOV DPTR,#T06MOV A,R0ADD A,#06HMOVC A,@A+DPTR
MOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K06SETB P1.2MOV A,#07HLCALL X2LCALL DLYAJMP S10K06CJNE R5,#00H,SS06SETB P1.2CLR P1.7 选择3#译码器MOV R4,#02HMOV R5,#07HMOV 03H,#07HSS08MOV DPTR,#T08MOV A,R0ADD A,#07HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C001HMOVX @DPTR,ACJNE R4,#00H,K08SETB P1.7 关闭3#译码器MOV A,#08HLCALL X2LCALL DLYAJMP S10K08CJNE R5,#00H,SS08SETB P1.7 关闭3#译码器MOV A,#09HLCALL X2LCALL DLYAJMP S10SS04MOV DPTR,#T04MOV A,R0
ADD A,#04HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K04SETB P1.2 关闭2#译码器CLR P1.1 选择1#译码器MOV R4,#01HMOV R5,#03HMOV 03H,#03HLCALL SGAJMP SS03K04CJNE R5,#00H,SS04SETB P1.2MOV A,#06HLCALL X2LCALL DLYAJMP S10SS03MOV DPTR,#T03MOV A,R0ADD A,#04HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K03MOV R4,#01HMOV R5,#03HMOV 03H,#03HLCALL SGAJMP SS025K03CJNE R5,#00H,SS03SETB P1.1关闭1#译码器MOV A,#05HLCALL X2
LCALL DLYAJMP S10SS025MOV DPTR,#T025MOV A,R0ADD A,#03HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K025MOV R4,#01HMOV R5,#03HMOV 03H,#03HLCALL SGAJMP SS02K025CJNE R5,#00H,SS025SETB P1.1 关闭1#译码器MOV A,#04HLCALL X2LCALL DLYAJMP S10SS02MOV DPTR,#T02MOV A,R0ADD A,#03HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K02MOV R4,#01HMOV R5,#02HMOV 03H,#02HLCALL SGAJMP SS015K02CJNE R5,#00H,SS02SETB P1.1
MOV A,#03HLCALL X2LCALL DLYAJMP S10SS015MOV DPTR,#T015MOV A,R0ADD A,#02HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K015MOV R4,#01HMOV R5,#02HMOV 03H,#02HLCALL SGAJMP SS012K015CJNE R5,#00H,SS015SETB P1.1 关闭3#译码器MOV A,#02HLCALL X2LCALL DLYAJMP S10SS012MOV DPTR,#T012MOV A,R0ADD A,#02HMOVC A,@A+DPTRMOV 09H,AMOV A,R0MOVC A,@A+DPTRMOV DPTR,#0C000HMOVX @DPTR,ACJNE R4,#00H,K012MOV R4,#01HMOV R5,#01HAJMP SS01K012CJNE R5,#00H,SS012SETB P1.1关闭3#译码器
MOV A,#01HLCALL X2LCALL DLYAJMP S10SS01MOV A,#0DFHMOV 09H,AMOV A,#0FHMOV DPTR,#0C000H; 8255 A端口地址MOVX @DPTR,ACJNE R4,#00H,K01SETB P1.1 关闭1#译码器LCALL DLYAJMP S10K01CJNE R5,#00H,SS01SETB P1.1 关闭1#译码器CJNE R4,#00H,KK01LCALL DLY 如果视力低于0.1则不作任何显示,需另行测试AJMP S10KK01MOV A,#00HLCALL X2LCALL DLYAJMP S10INT1PUSH DPH键盘输入外中断1服务程序PUSH DPLCLR TR1 定时器T1停止工作CLR ET1CLR EX1MOV DPTR,#0C002H 读入8255 C端口高四位的输入数据MOVX A,@DPTRORL A,#0FHCJNE A,09H,E0 输入数据与该行正确地视标值进行比较AJMP E2E0DEC R4输入数据与正确值不相等,错误允许数减1E2CJNE R5,#00H,E3AJMP E4E3DEC R5 只要有输入,该行视标总数减1E4MOV R7,#5CH 重新输入延时常数MOV TH1,#0BCHMOV TL1,#0B0HLCALL SG 产生新的视标指示灯
SETB TR1重新启动定时器T1SETB ET1SETB EX1POP DPLPOP DPHRETITF1INTPUSH DPH定时器T1产生50毫秒定时时间到中断服务程序PUSH DPLCLR EX1 禁止外中断1中断DJNZ R7,T2CJNE R4,#00H,T1 延时4.6秒时间到,允许错误数减1AJMP T3T1DEC R4T3CJNE R5,#00H,T4AJMP T5T4DEC R5 延时4.6秒时间到,该行的视标总数减1INC R0T5LCALL SG 重新产生新视标MOV R7,#5CH 重新输入时间常数T2MOV TH1,#0BCHMOV TL1,#0B0HSETB EX1 允许外中断1中断POP DPLPOP DPHRETISGINC R0 子程序功能是R0的数除以模数,其余数指示某视标行第几个视标灯亮.
MOV A,R0MOV B,03HDIV ABMOV R0,BMOV A,BRETX1MOVC A,@A+DPTR 取视标方向数据MOV 09H,A 将视标方向数据的正确值存入09H单元MOV A,R0 将随机数送入AMOVC A,@A+DPTR 将点亮某个指示灯的数据送入ARETX2CLR P1.0该子程序的功能是使结果指示灯亮MOV DPTR,#0C002H 8255 C端口地址MOVX @DPTR,A
RETT01DB 0FH,0DFH;前面一半是点亮视力0.1行指示灯的数据,后一半是视标方向数据T012DB 1FH,2FH,7FH,0BFH 以下类似T015DB 3FH,4FH,0DFH,0EFHT02DB 5FH,6FH,7FH,7FH,0BFH,0DFHT025DB 8FH,9FH,0AFH,0DFH,0EFH,7FHT03DB 0BFH,0CFH,0DFH,0EFH,0EFH,0DFH,0BFH,0DFHT04DB 0BH,0CH,0DH,0EH,0DFH,0BFH,7FH,0EFHT05DB 6H,7H,8H,9H,0AH,0EFH,0DFH,0EFH,0BFH,0DFHT06DB 0H,01H,02H,03H,04H,05H,7FH,0BFH,0DFH,7FH,0EFH,7FHT08DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0EFH,0DFH,7FH,0BFH,7FH,0EFH,0BFHT10DB 00H,01H,02H,03H,04H,05H,06H,07H,0BFH,07FH,0EFH,0DFH,0EFH,0BFH,0DFH,0EFHT12DB 8FH,9FH,0AFH,0BFH,0CFH,0DFH,0EFH,0FFH,0DFH,0BFH,7FH,0EFH,0BFH,0DFH,7FH,0BFHT15DB 0FH,1FH,2FH,3FH,4FH,5FH,6FH,7FH,0EFH,7FH,0DFH,0BFH,7FH,0BFH,0EFH,0DFHCCCDB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH;视力结果指示灯数据DLYMOV 00H,#01HI1MOV 01H,#0FFHI2MOV 02H,#0FFHI3DJNZ 02H,I3DJNZ 01H,I2DJNZ 00H,I1RETEND
权利要求
该仪器属于8031单片机在卫生学视力测试中的应用。目前在视力测试中,对视力表中视标的显示是人工用手指示的,或者是用按键摇控指示的。被测试者用手指示视标开口方向,视力的多少由人工确定。视力自动测试仪仍然采用标准视力表,视标的选择、显示、视力的判断由该仪器自动完成。该仪器利用MCS-51单板机的8255输入输出端口去控制视标指示灯的熄灭,即仪器能够按照视力测试要求,通过点亮视标指示灯的方法,自动显示视标,被测试者通过按键指示视标开口方向,仪器自动判断输入视标方向正确与否,最后给出被测者视力的结果。视力自动测试仪主要用于学生中视力的普查以及对视力要求严格的测试。使用该仪器可以减轻医务工作者的劳动强度,提高测试的准确性和科学性。本人请求在视力测试中1、自动选择、指示视标。2、被测者使用键盘输入视标方向。3、自动判断被测者输入的视标方向正确与否。4、自动判断被测者视力结果。
全文摘要
该仪器属于MCS-51单片机在卫生学视力测试中的应用。目前在视力测试中,对视力表中视标的显示是人工用手指示的,被测试者用手指示视标开口方向,视力的多少由人工确定。视力自动测试仪仍然采用标准视力表,视标的选择、显示、视力的判断由该仪器自动完成。该仪器利用MCS-51单板机的8255输入输出端口去控制视标指示灯的熄灭,被测试者通过按键指示视标开口方向,仪器自动判断被测者视力的结果。视力自动测试仪主要用于学生中视力的普查以及对视力要求严格的测试。
文档编号G06F19/00GK1977759SQ200510130910
公开日2007年6月13日 申请日期2005年12月8日 优先权日2005年12月8日
发明者刘鹏程 申请人:刘鹏程
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1