《单片机与接口技术》课程设计报告
抢答系统设计
学生姓名: _ _____曾超________ 学 号:___2013582031____________ 班 级:___物联网____________ 指导老师:__刘艳军_____________ 日 期:__2015/06/28_____________
1 题目与要求 ................................................................................................................................... 3
1.1 问题提出 ............................................................................................................................ 3 1.2 本系统涉及的知识点 ........................................................................................................ 3 2系统硬件设计 ................................................................................................................................ 3
2.1 模块图 ................................................................................................................................ 3 2.2 部分模块电路图 ................................................................................................................ 4 ................................................................................................................................................ 6 3系统软件设计 ................................................................................................................................ 6 4 总结 ............................................................................................................................................ 20
4.1程序调试情况 ................................................................................................................... 20 4.2本人在程序设计中感想 ................................................................................................... 22 (四)参考文献(左对齐,宋体粗四号) ................................................................................. 22
1 题目与要求
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++){ ; } } }
主程序函数模块,代码:
#include 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; 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 0xf7: { P2=0xf7; P0=0x66; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x66; 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 0xef: { P2=0xef; P0=0x6d; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x6d; 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 0xdf: { P2=0xdf; P0=0x7d; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x7d; 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 0xbf: { P2=0xbf; P0=0x07; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x07; 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 0x7f: { P2=0x7f; P0=0x7f; mDelay(500); P0=0x00; mDelay(500); while(1){ P0=0x7f; 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; } } } P2=P2<<1|0x01; mDelay(150); 4 总结 (1)熟悉单片机的型号及各引脚功能。 (2)熟悉单片机硬件电路设计。 (3)熟练单片机C语言程序设计。 (4)用C语言实现软件系统,并在仿真环境下调试运行。 (5)根据硬件电路图和程序代码将产品制作出来并调试。 4.1程序调试情况 8路抢答器开始时,选手编号进行跑马。 抢答成功,8位数码管同时显示选手编号 4.2本人在程序设计中感想 在设计复位按键时,在case语句下循环语句用了两重while循环,导致我无法退出循环及switch分支,无法复位。在思考程序整体后,删除外重while语句,内层while用break跳出,在case语句下再加上一句break语句,跳出分支,实现复位按键的功能。 (四)参考文献 [1] 谭浩强,C程序设计(第二版),北京:清华大学出版社, 2001.1。 [2] 单片机,单片机原理及接口技术(第二版),北京:高等教育出版社,2009.1。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务