《单片机原理与应用》课程大作业
特定软硬件系统设计-竞赛抢答器的
设计报告
目录
- 概述……....................................................................................................................
- 系统总体设计方案……............................................................................................
- 硬件电路设计及描述……........................................................................................
- 软件设计流程及描述……........................................................................................
- 系统实验过程、测试结果与分析……......................................................................
- 项目设计体会……....................................................................................................
附录
- 概述
现阶段考虑为学校“一战到底抢答”比赛提供方便,设计一款选手抢答倒计时单片机系统,达到方便主持人操作,对选手公平的一款作品;系统包括主持人按键模块,选手按键模块,声音模块,倒计时模块,选手显示模块等,达到比赛的要求。
- 系统总体设计方案
系统整体方案:系统以at89c51单片机为结构,由主持人按键输入模块,选手按键输入模块,单片机自带复位模块和时钟模块组成输入模块;连接SOUNDER模块输出音量,连接Mx7219控制倒计时显示模块和选手显示模块。
- 硬件电路设计及描述
选手按键模块:八个开关(BUTTON)分别连接单片机(AT89C51)P1口的0~7个引脚,另一端接地。
主持人按键模块:两个按钮(BUTTON)连接单片机(AT89C51)P2口的0~1引脚,另一端接地。
SOUNDER模块:喇叭(SOUNDER)连接单片机P3口的7引脚。
MAX7219:多位LED显示驱动器(MAX7219)连接单片机(AT89C51)P3口的0~2引脚,ISET口连接电阻CAP与SOUNDER共用电源,DOUT接地。
倒计时显示模块:7SEG-MPX2-CC-BLUE的A、B、C、D、E、DP、1、2口连接芯片(MAX7219)的A、B、C、D、E、F、G、DP、DIG0、DIG1引脚
选手显示模块:7SEG-MPX2-CC的A、B、C、D、E、DP、1、2口连接芯片(MAX7219)的A、B、C、D、E、F、G、DP、DIG2、DIG3引脚。
- 软件设计流程及描述
总程序:程序开始,运行While(1)循环,进入抢答模块,等待Begin的触发,
初始化芯片、中断,开始中断,运行倒计时模块、选手抢答模块,等待计时模块结束或选手抢答模块的触发,结束中断,输出结果。
5、系统实验过程、测试结果与分析
过程:设计系统整体方案,设计主程序流程图,模块程序流程图,借鉴源码完成代码文件,完成仿真图,输出结果。
结果:按下BTN10,程序开始运行倒计时30s(7SEG-MPX2-CC-BLUE),按下按键BNT1-BNT8(BUTTON)其中任意一个,选手显示模块(7SEG-MPX2-CC)显示对应选手编号,程序停止,或时间结束,程序停止。
分析:
启动程序仿真
点击开始按钮
四号抢答,时间停止
四号回答错误,点击开始,继续答题,五号抢答
回答正确,点击修改时间,重置倒计时
无人抢答,倒计时归零
点击修改时间,进行加时
一号抢答,时间停止
加时时间最长59秒
6、项目设计体会
在程序设计中,首先了解MAX7219芯片的作用,查阅百度,明白了多位LED显示驱动的作用,根据操作手册来完成仿真图的规划,一开始7SEG-MPX2-CC-BLUE选用了7SEG-MPX2-CA-BLUE,导致倒计时出不来,课堂上询问老师后,确定代码没问题,元器件的问题,所以元器件的选取一定不能搞错。软件流程的设计需要分块处理,在模块化编程中,需要先整体在局部的思想,先设计出总体的框架流程,然后再细化每个模块的作用,让系统完整并调试运行,后期设想,能否在AT89C51上实现以上功能,并且放弃掉MAX7219芯片。(尝试中)
附录:系统主程序
void main()
{
while(1)
{
do{
holderscan();
}while(begin);//开始前进行设置,若未按下开始键
while(~begin);//防抖
max7219_init(); //芯片初始化
timer_init(); //中断初始化
TR0=1; //开始中断
do{
time_display(second);
scare_display(people);
people=keyscan();
}while((!people)&&(second));//运行直到抢答结束或之间运行结束
TR0=0;
}
}