单片机与接口技术?课程设计报告抢答系统设计学生姓名: _ _____曾超________学 号:___202158264031____________班 级:___物联网____________指导老师:__刘艳军_____________日 期:__2021/06/28_____________1 题目与要求 31.1 问题提出 31.2 本系统涉及的知识点 32系统硬件设计 32.1 模块图 32.2 局部模块电路图 4 63系统软件设计 64 总结 204.1程序调试情况 204.2本人在程序设计中感想 22〔四〕参考文献〔左对齐,宋体粗四号〕 221 题目与要求1.1 问题提出实现一个“抢答系统设计〞1〕制作一个8人抢答器,以开关中的某个开关的按下〔闭合〕作为抢答按键 2〕无人抢答时,8只数码管轮流循环显示1~8〔跑马〕,谁先抢答,数码管停止跑马,8个数码管同时亮谁的编号,并用蜂鸣器发提示音;其后再有人按键,系统不予响应,直到复位键按下,开始下一轮抢答3〕主持人端有一个复位键,可重新开始抢答;有一个答案正确的按键,和一个答案错误的按键,按下时有不同的提示音;要想实现8路抢答器,首先要清楚抢答器的功能。
需要设置多少个功能键?功能按键通过哪个I/O口控制?对于此系统,我们第一步应该做什么,先完成哪个局部?1.2 本系统涉及的知识点本系统涉及到的知识点有:1. 按键的处理2. 数码管的动态静态显示2系统硬件设计2.1 模块图2.2 局部模块电路图1. 4*3矩阵键盘,本系统中只用到3个功能键,故令P1^4=0控制列线,P1^1,P1^2,P^3分别为横线,不需要做扫描分别控制S1,S5,S9.2.8路独立按键,为本系统的8路抢答按键通过P3口输入控制 3. 蜂鸣器,接在P1^5.3系统软件设计延时函数模块代码如下:Void mDelay(unsigned int Delay){unsigned int i; for(;Delay>0;Delay--){ for(i=0;i<124;i++){ ; } }}主程序函数模块,代码:#includesbit P14=P1^4;sbit Right=P1^1;sbit False=P1^2;sbit P13=P1^3;sbit Beep = P1^5;unsigned char table[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};unsigned char wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};void main(){ int i,t; P14=0; //ap1: P3=0xff; while(1) { for(i=0;i<8;i++) { P2=wei[i]; //从这里开始修改选手编号跑马效果 P0=table[i]; mDelay(150); if(P3!=0xff) { //r8=P3; switch(P3){ case 0xfe: { //for(t=0;t<2;t++)//抢答后选手编号闪烁次数 //{ P2=0xfe;//按下哪一个按键,那么数码管位码送该位。
即3号抢答,调到3号数码管,4号抢答跳到4号数码管 P0=0x06; mDelay(500); P0=0x00; mDelay(500); //} while(1){ P0=0x06; P2=0x00; //此处写蜂鸣器提示音 if(Right==0){ for(t=0;t<3;t++)//抢答后选手编号闪烁次数 { P2=0xfe;//按下哪一个按键,那么数码管位码送该位即3号抢答,调到3号数码管,4号抢答跳到4号数码管 P0=0x06; mDelay(500); P0=0x00; mDelay(500); } Beep=0; mDelay(150); Beep=1; mDelay(150); Beep=0; mDelay(150); Beep=1; mDelay(150); Beep=0; mDelay(500); Beep=1; mDelay(500); } if(False==0){ for(t=0;t<3;t++)//抢答后选手编号闪烁次数 { P2=0xfe;//按下哪一个按键,那么数码管位码送该位。
即3号抢答,调到3号数码管,4号抢答跳到4号数码管 P0=0xff; mDelay(500); P0=0x00; mDelay(500); } Beep=0; mDelay(500); Beep=1; mDelay(500); Beep=0; mDelay(500); Beep=1; mDelay(500); Beep=0; mDelay(500); Beep=1; mDelay(500); } if(P13==0) break; } break; } case 0xfd: { P2=0xfd; P0=0x5b; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x5b; P2=0x00; if(Right==0){ for(t=0;t<3;t++)//抢答后选手编号闪烁次数 { P2=0xfe;//按下哪一个按键,那么数码管位码送该位。
即3号抢答,调到3号数码管,4号抢答跳到4号数码管 P0=0x06; mDelay(500); P0=0x00; mDelay(500); } Beep=0; mDelay(150); Beep=1; mDelay(150); Beep=0; mDelay(150); Beep=1; mDelay(150); Beep=0; mDelay(500); Beep=1; mDelay(500); } if(False==0){ for(t=0;t<3;t++)//抢答后选手编号闪烁次数 { P2=0xfe;//按下哪一个按键,那么数码管位码送该位。
即3号抢答,调到3号数码管,4号抢答跳到4号数码管 P0=0xff; mDelay(500); P0=0x00; mDelay(500); } Beep=0; mDelay(500); Beep=1; mDelay(500); Beep=0; mDelay(500); Beep=1; mDelay(500); Beep=0; mDelay(500); Beep=1; mDelay(500); } if(P13==0) break; } break;//退出switch } case 0xfb: { P2=0xfb; P0=0x4f; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x4f; P2=0x00; if(Right==0){ for(t=0;t<3;t++)//抢答后选手编号闪烁次数 { P2=0xfe;//按下哪一个按键,那么数码管位码送该位。
即3号抢答,调到3号数码管,4号抢答跳到4号数码管 P0=0x06; mDelay(500); P0=0x00; mDelay(500); } Beep=0; 。