单片机课设:六路智能抢答器

设计目的

利用所学单片机的理论知识进行软硬件整体设计,锻炼学生理论联系实际、综合应用的能力。

设计内容:

设计基于单片机的6人抢答器,并编程实现其功能.

设备和器材:

单片机最小开发系统,中断控制器8259A一片(自选),并行接口8255A一片或8155(用单片机开发板),发光二极管12只(红,黄各6只),LED数码管若干只,按钮或按键10个,其他器件任选。

设计要求:

1、设计硬件接口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图。

2、 编写下列控制程序

① 1—6号手中先按下按钮者,LED数码管显示其选手号码(后按下无效)。

② 由裁判掌握,若回答正确,该选手对应黄灯亮,否则红灯亮。

③ 回答正确时,记分牌加10分,不正确减10分(初始分100分)

Code:

ORG 0000H

LJMP PREPARE

ORG 0030H

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共阴极数码管显示代码表 0~9

/——————————初始化模块————————-/

PREPARE: MOV SP,#70h

LEDSEL0      BIT  P2.0                      ;LED选择位

LEDSEL1     BIT  P2.1

LEDSEL2     BIT  P2.2

LEDSEL3     BIT  P2.3

JUDGMENT0   BIT  P2.4                       ;裁判裁决错误

JUDGMENT1   BIT  P2.5                       ;裁判裁决正确

SELECT0     BIT  P2.6                       ;位选信号0

SELECT1     BIT  P2.7                       ;位选信号1

 RST         BIT  P3.6

                                           ;记录各选手成绩

MOV 31H,#01H                                               ;一号选手百位分数         

MOV 32H,#00H                           ;一号选手十位分数

MOV 33H,#00H ;一号选手个位分数

MOV 34H,#01H                           ;二号选手分数

MOV 35H,#00H    

MOV 36H,#00H

                                   ;三号选手分数

MOV 37H,#01H

MOV 38H,#00H    

MOV 39H,#00H

                                  ;四号选手分数

MOV 3AH,#01H                            

MOV 3BH,#00H    

MOV 3CH,#00H

                                  ;五号选手分数

MOV 3DH,#01H

MOV 3EH,#00H    

MOV 3FH,#00H

                                 ;六号选手分数

MOV 40H,#01H

MOV 41H,#00H    

MOV 42H,#00H

MOV 60H,#00H                        ;记分牌抢答选手编号

MOV 61H,#00H                            ;记分牌百位数据

MOV 62H,#00H                        ;记分牌十位数据

MOV 63H,#00H                        ;记分牌个位数据

BEGIN: MOV P2,#0FFH ;P2,P3 口置高电平,准备接受裁判信号、抢答信号

MOV P3,#0FFH

MOV P1,#3FH

MOV R4,#00H

MOV R0,#00H

MOV R1,#00H

CLR C

SETB SELECT0

SETB SELECT1

                                             /*-----------------------------检测抢答模块-------------------------*/

CHECK: JNB RST,BEGIN

MOV A,P3                                    ;接收P3口的抢答信号,按下时为0

CPL A

JZ  CHECK

FIND: RRC A ;有抢答信号时逐次移位判断是哪一为抢答者

INC R4

JNC    FIND

MOV  60H,R4

MOV  A,R4                                    ;获取抢答选手的计分地址

LCALL DECODE

DEC  A

MOV  B,#03H

MUL  AB

ADD  A,#31H                

MOV  R0,A                                       ;抢答选手百位分数地址,存R0

ADD  A,#01H

MOV  R1,A                                    ;抢答选手十位分数地址,存R1

                                             /*------------------------------裁判裁决和计分模块-------------------------*/

JUDGE: JNB JUDGMENT1,RIGHT ;裁判裁定回答正确,送低电平回答正确

JNB  JUDGMENT0,FALSE

JNB  RST,BEGIN                                ;复位键按下,重新初始化

SJMP JUDGE

FALSE: MOV A,#06H ;裁定错误则亮对应选手红灯,送低电平亮

ADD  A,R4

DEC     A

ORL  A,#0F0H

MOV     P2,A

MOV  A,@R1

JZ   BORROW

DEC     A

MOV  @R1,A

MOV  61H,@R0

MOV  62H,@R1

SJMP SHOW                

                                               ;十位向百位借位处理

BORROW:

MOV  A,@R0

JZ   ZERO

MOV  @R1,#09H

MOV  A,@R0

DEC  A

MOV  @R0,A    

MOV  61H,@R0

MOV  62H,@R1

SJMP SHOW

ZERO: MOV @R0,#00H ;分数扣为0,不再扣分

MOV  @R1,#00H

MOV  61H,@R0

MOV  62H,@R1        

SJMP SHOW

RIGHT: MOV A,#00H ;裁定正确则亮对应选手黄灯,送低电平亮

ADD  A,R4

DEC     A

ORL  A,#0F0H

MOV     P2,A        

MOV  A,@R1

CJNE A,#09H,NOTEQUAL

                                            ;十位向百位进位处理

CARRY: MOV @R1,#00H

MOV  A,@R0

INC  A

MOV  @R0,A

MOV  61H,@R0

MOV  62H,@R1

SJMP SHOW

NOTEQUAL: INC A

MOV  @R1,A

MOV  61H,@R0

MOV  62H,@R1

SJMP SHOW    

                                             /*------------------------------动态显示和延时模块-------------------------*/

SHOW: JNB RST,TOBEGIN ;复位键按下,重新初始化

MOV  A,60H                                     ;显示处理选手编号

SETB SELECT0                                 ;共阴极数码管送低电平有效

SETB SELECT1

LCALL DECODE

MOV  A,63H                                     ;显示处理选手得分的个位值

CLR  SELECT0

SETB SELECT1

LCALL DECODE

MOV  A,62H                                     ;显示处理选手得分的十位值

SETB SELECT0

CLR  SELECT1

LCALL DECODE                                                        

MOV  A,61H                                     ;显示处理选手得分的百位值

CLR SELECT0

CLR SELECT1

LCALL DECODE

SJMP SHOW                                                                                                     

DECODE: MOV R5,A ;保护A中值

            MOV DPTR,#TABLE                                ;查表译码送段码给P1口显示

            MOVC A,@A+DPTR

            MOV P1,A

            MOV A,R5

                                                          ;扫描延时

D1:            MOV R6,#2

D2:            MOV R7,#250

            DJNZ R7,$

            DJNZ R6,D2

            RET    

TOBEGIN: LJMP BEGIN

END

Proteus 仿真:

proteus 仿真图

代码下载 : 六路智能抢答器(代码+proteus仿真+课设报告)下载