專利名稱:視力自動測試儀的制作方法
技術領域:
該儀器屬于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日
發明者劉鵬程 申請人:劉鵬程