有一个《单片机八人抢答器程序设计》的题目。设计要求:利用 KEIL 软件编制控制程序。利用 PROTEUS 仿真软件,绘制单片机控制系统:P1 口接 8 个按钮,编号为1、2、3、...7、8;P3.7 接主持人“开始/复位”按钮;P0 口接一个数码管(共阳极);P2 口接 8 个LED灯,用于对应8个小组抢答指示。(1)当主持人没有按下“开始”按钮时,数码管显示0;(2)当主持人按下“开始”按钮并松开后,数码管显示P,允许各小组抢答;(3)若有某一个小组按钮按下,点亮抢答小组的指示灯,并将抢答小组号显示在数码管上。(4)当主持人按下“复位”按钮并松开后,重新进入(1)。源程序 汇编 和 C51 都可以!做而论道的设计程序如下:;简易抢答器;------------------------------------------ KAI BIT P3.7 ;开始键;------------------------------------------ ORG 0000H JMP STARTSTART:;----------------------;下面是清零(复位) MOV P0, #0C0H ;显示0 MOV P2, #255 ;熄灯 MOV R4, #0;----------------------;下面等待按下"开始"键KAISHI: JB KAI, KAISHI ;没有按"开始",就循环 CALL DELAY ;延时 JB KAI, KAISHI ;消抖 JNB KAI, $ ;等待释放;---------------------- MOV P0, #0CH ;显示PWAIT: ;等待抢答 MOV A, P1 CPL A JZ WAIT ;继续等待;----------------------XS: ;查找选手按键的位置 CPL A MOV P2, A JNB ACC.0, J0 JNB ACC.1, J1 JNB ACC.2, J2 JNB ACC.3, J3 JNB ACC.4, J4 JNB ACC.5, J5 JNB ACC.6, J6; JMP J7J7: INC R4J6: INC R4J5: INC R4J4: INC R4J3: INC R4J2: INC R4J1: INC R4J0: INC R4 MOV A, R4 MOV DPTR, #D_TAB MOVC A, @A + DPTR MOV P0, A;----------------------;下面等待按下复位键W_FW: JB KAI, W_FW ;没有按,则转 CALL DELAY ;延时 JB KAI, W_FW ;消抖 JNB KAI, $ ;等待释放 JMP START;------------------------D_TAB: DB 0C0H,0F9H,0A4H,0B0H, 99H ;共阳极0-9 DB 92H, 82H,0F8H, 80H, 90H,0BFH ;-;------------------------------------------DELAY: ;延时约10ms MOV R6, #20 DJNZ R7, $ DJNZ R6, $ - 2 RET;========================================== END程序运行后,主持人按下开始按键时显示的画面如下:有人抢答后,显示的画面如下:单片机的控制,有时序先后的区别。程序中,每次都是先检查 P1.0 处的按键,最后检查 P1.7 的按键。如果, P1.7 按键先按下,P1.3 后按下,但是,开始查询的时候,还查不到 P1.7,而是先查到了 P1.3,那么,单片机将把后按下的,认定为成功抢答。甚至, P1.7 比 P1.3 先按下 10 微秒,单片机都会错误的认定 P1.3 是先按下的。为了避免出现这种不公平现象,应该在《抢答控制》部分,使用纯电子器件的电路,以取得高速处理的效果。而单片机仅仅适用于数码显示等的低速处理。
时间:2018-11-23