微处理器原理与接口课程设计-八路抢答器
Posted wlei5206
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微处理器原理与接口课程设计-八路抢答器相关的知识,希望对你有一定的参考价值。
1.设计内容
①抢答开关电路分别设定选手抢答键8个、主持人开始抢答键和复位键。
②系统工作后,首先由主持人按下开始键,同时单片机进入10秒倒计时并显示。
③选手们开始抢答,如果在10秒内无人抢答,则红灯全部亮起,等待主持人按复位键,进入下一题。
④若有人抢答,选手对应的抢答指示灯点亮,LED显示器上同步显示抢答选手的编号,表示抢答成功。同时封锁输入电路,禁止其他选手抢答
⑤抢答成功后,单片机自动进入60秒回答问题倒计时
⑥若选手在60秒内回答完问题并回答正确,抢答成功,且显示有效。
⑦主持人按下复位键,系统返回到抢答状态,进行下一轮抢答。
2.实验程序
CON8279 EQU 0CFE9H DATA8279 EQU 0CFE8H ORG 0000H LJMP START ORG 4100H START: MOV DPTR,#DATA8279;8279命令口地址 CLR A ;清零 MOV PSW,#00H MOV SP,#60H MOVX @DPTR,A MOV DPTR,#CON8279 ;8279命令字 MOV A,#0D1H ;清显示命令字 MOVX @DPTR,A LOOP1: ;MOV P1,#0FFH ;清零红绿LED灯 MOVX A,@DPTR ;读状态字 ANL A,#0FH JZ LOOP1 ;是否有键按下?没有则循环等待,有则继续运行 MOV DPTR,#DATA8279 ;进入数据口 MOVX A,@DPTR ;读键值 MOV R0,A ANL A,#0FH ;取低四位 JZ DAOSHU10 ;按键为开始键,跳转DAOSHU10,进入10S JNZ FSQD ;按键为其他键,跳转到非法抢答 FSQD: MOV P1,#0AAH ;亮红灯 MOV DPTR,#CON8279 ;写显示RAM命令,命令口地址 MOV A,#81H ;选中LED2 MOVX @DPTR,A MOV A,R0 ;显示非法抢答序号 ANL A,#0FH MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口 MOVX @DPTR,A AJMP NDELAY DAOSHU10: MOV P1,#0FFH MOV R2,#10H ;走10S倒数 ;LED6 MOV DPTR,#CON8279 ;写显示RAM命令,命令口地址 MOV A,#85H ;选中LED6 MOVX @DPTR,A MOV A,R2 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口 MOVX @DPTR,A ;LED5 MOV DPTR,#CON8279 ;写显示RAM命令 MOV A,#84H ;选中LED5 MOVX @DPTR,A MOV A,R2 ANL A,#0F0H SWAP A ;取后半字节,高低字交换 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口将A写入 MOVX @DPTR,A MOV DPTR,#CON8279 ;回到命令口 MOV R2,#09H LJMP T10S T10S: MOV R5,#03 ;1S延迟 LJMP DE1 DE1: MOV R6,#200 DE2: MOV R7,#126 DE3: MOVX A,@DPTR ;读状态字 ANL A,#0FH JNZ LOOP2I ;有键按下?,有则跳入LOOP2I,判断按键,没有则继续 DJNZ R7,DE3 DJNZ R6,DE2 DJNZ R5,DE1 LJMP DAOSHU9 LOOP2I: MOV DPTR,#DATA8279 ;进入数据口 MOVX A,@DPTR ;读键值 ANL A,#0FH ;取低四位 MOV R1,A ;保存队员序号到R1 JZ DE3 ;按键为开始键,跳转DE3,返回 XRL A,#09H JZ DE3 ;按键为复位键,跳转DE3,返回 LJMP LOOP2 DAOSHU9: ;走9秒倒数 ;LED2 MOV DPTR,#CON8279 ;写显示RAM命令,命令口地址 MOV A,#85H ;选中LED2 MOVX @DPTR,A MOV A,R2 ;将高键位读出 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口 MOVX @DPTR,A ;LED1 MOV DPTR,#CON8279 ;写显示RAM命令 MOV A,#84H ;选中LED1 MOVX @DPTR,A MOV A,R2 ANL A,#0F0H SWAP A ;取后半字节,高低字交换 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口将A写入 MOVX @DPTR,A MOV DPTR,#CON8279 ;回到命令口 DEC R2 CJNE R2,#0FFH,T10S ;R2减1,不为零回到T10S延迟1S确认,然后继续扫描&显示倒数 LJMP DAOSHU60NN ;进入10S超时程序 LOOP2: MOV DPTR,#CON8279 ;8279命令字 MOV A,#0A0H ;显示消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A;显示队号低位 MOV DPTR,#CON8279 ;写显示RAM命令,命令口地址 MOV A,#81H ;选中LED6 MOVX @DPTR,A MOV A,R1 ;将高键位读出 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口 MOVX @DPTR,A;高位 MOV DPTR,#CON8279 ;写显示RAM命令 MOV A,#80H ;选中LED5 MOVX @DPTR,A MOV A,R1 ANL A,#0F0H SWAP A ;取后半字节,高低字交换 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口将A写入 MOVX @DPTR,A MOV DPTR,#CON8279 ;回到命令口 LCALL DE2S ;显示2秒 LJMP DAOSHU60S DAOSHU60S: ;准备60秒倒数 MOV DPTR,#DATA8279 ;数据口 MOV R2,#06H ;R2存入十位变量 MOV R3,#00H ;R3存入个位变量 MOV A,R2 SWAP A ;A变为60H,十位已经放入A ADD A,R3 ;个位R3加入 MOV R4,A ;得来的当前秒数放入R4 LJMP DAOSHU60 DAOSHU60: ;60秒倒数 ;LED6 MOV DPTR,#CON8279 ;写显示RAM命令,命令口地址 MOV A,#85H ;选中LED6 MOVX @DPTR,A MOV A,R4 ;将高键位读出 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口 MOVX @DPTR,A ;LED5 MOV DPTR,#CON8279 ;写显示RAM命令 MOV A,#84H ;选中LED5 MOVX @DPTR,A MOV A,R4 ANL A,#0F0H SWAP A ;取后半字节,高低字交换 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口将A写入 MOVX @DPTR,A MOV DPTR,#CON8279 ;回到命令口 MOV R3,#09H ;个位变为9 DEC R2 ;十位变为5 LJMP T10SA T10SA: MOV R5,#03H ;1S延迟 LJMP DE1B DE1B: MOV R6,#200 DE2B: MOV R7,#126 DE3B: MOV DPTR,#CON8279 ;回到命令口 MOVX A,@DPTR ;读状态字 ANL A,#0FH JNZ DAOSHU60YN ;有键按下?,有则跳入DAOSHU60YN,判断是否是抢答按键 DJNZ R7,DE3B DJNZ R6,DE2B DJNZ R5,DE1B LJMP DAOSHU601 DAOSHU60YN: MOV DPTR,#DATA8279 ;进入数据口 MOVX A,@DPTR ;读键值 ANL A,#0FH ;取低四位 XRL A,R1 ;判断是否为抢答按键,若是则清零A,不是则A非零 JZ DAOSHU602 ;按键为抢答按键,显示抢答成功,跳转DAOSHU602 JNZ DE3B ;按键为其他键,跳转回DE3B,继续倒计时 DAOSHU601: MOV A,R2 SWAP A ;A变为十位,十位已经放入A ADD A,R3 ;个位R3加入 MOV R4,A ;得来的当前秒数放入R4 ;LED2 MOV DPTR,#CON8279 ;写显示RAM命令,命令口地址 MOV A,#85H ;选中LED2 MOVX @DPTR,A MOV A,R4 ;将高键位读出 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口 MOVX @DPTR,A ;LED1 MOV DPTR,#CON8279 ;写显示RAM命令 MOV A,#84H ;选中LED1 MOVX @DPTR,A MOV A,R4 ANL A,#0F0H SWAP A ;取后半字节,高低字交换 MOV DPTR,#TAB1 MOVC A,@A+DPTR ;取段显码 MOV DPTR,#DATA8279 ;写显示RAM,数据口将A写入 MOVX @DPTR,A MOV DPTR,#CON8279 ;回到命令口 DEC R3 CJNE R3,#0FFH,T10SA ;个位减1,转移到1S延迟处 MOV R3,#09H ;个位变9,等待十位减少 DEC R2 CJNE R2,#0FFH,T10SA ;个位减为0,且变为9,十位减1,回到1S延迟处 LJMP DAOSHU60NN DAOSHU60NN: MOV P1,#0AAH ;红灯全部亮起 MOV DPTR,#CON8279 ;命令口 MOVX A,@DPTR ;读状态字 ANL A,#0FH JZ DAOSHU60NN ;有键按下?没有则循环等待 MOV DPTR,#DATA8279 ;进入数据口 MOVX A,@DPTR ;读键值 ANL A,#0FH ;取低四位 XRL A,#09H ;判断是否为按键9,若是则清零A,不是则A非零 JZ JUMP ;按键为按键9,跳转到中介,从而跳到START,回到初始位置 JNZ DAOSHU60NN ;按键为其他键,跳转DAOASHU60NN,再次等待 DAOSHU602: MOV P1,#55H ;抢答成功,显示有效,所有绿灯亮起 MOV DPTR,#CON8279 ;8279命令字 MOVX A,@DPTR ;读状态字 ANL A,#0FH JZ DAOSHU602 ;有键按下?没有则循环等待 MOV DPTR,#DATA8279 ;进入数据口 MOVX A,@DPTR ;读键值 ANL A,#0FH ;取低四位 XRL A,#09H ;判断是否为按键9,若是则清零A,不是则A非零 JZ JUMP ;按键为按键9,跳转到中介,从而跳到START,回到初始位置 JNZ DAOSHU602 ;按键为其他键,跳转DAOSHU602,再次等待 DE2S: MOV R5,#06 ;2s Delay LJMP DE1A DE1S: MOV R5,#03 ;1s Delay LJMP DE1A DE1A: MOV R6,#200 DE2A: MOV R7,#126 DE3A: DJNZ R7,DE3A DJNZ R6,DE2A DJNZ R5,DE1A RET NDELAY: MOV R2, #36H ;非法抢答延时 DEL: MOV R4, #06FH DEL1: MOV R6, #06FH DEL2: DJNZ R6, DEL2 DJNZ R4, DEL1 DJNZ R2, DEL AJMP START JUMP: MOV P1,#0FFH ;关所有LED LJMP START ;跳转到初始状态 TAB1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;段显码表 DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H END
3.硬件电路图
以上是关于微处理器原理与接口课程设计-八路抢答器的主要内容,如果未能解决你的问题,请参考以下文章
资料转发分享基于8086八路智能抢答器系统控制设计基于8086八路PT100热敏电阻温度采集基于8086步进电机定时启动设计-仿真设计资料
资料转发分享基于8086八路智能抢答器系统控制设计基于8086八路PT100热敏电阻温度采集基于8086步进电机定时启动设计-仿真设计资料
基于单片机节日彩灯控制器系统设计基于单片机脉搏检测和体温检测设计基于单片机可燃气体检测及报警系统基于单片机可调八路抢答器仿真设计-全套设计资料