给大家提供一个单片机八路抢答器设计的超详细完整资料下载,含论文 仿真 原理图 源码 任务书及开题报告 焊接仿真教程和其他相关教程等等一应俱全 都有的都有了.
(1)、程序开始当主席台按下开始抢答按钮后,数码管显示抢答倒计时。在该时间内八路抢答按下有效,若超出抢答时间蜂鸣器发出抢答失败警报预示该次抢答失败。若有效时间内有人抢答则1位数码管显示抢答选手号,二位数码管显示答题倒计时。在答题有效时间内答题完成则抢答成功,若超过答题时间,蜂鸣器给出答题超时警报,答题失败。 (2)、在开始抢答的过程中主席台可按下结束抢答来中断此次抢答。直接结束抢答后数码管均显示0.等待下次抢答开始。 (3)、在开始抢答时,主席台可以不使用开始抢答按钮而按下随机抽击选手答题按钮来随机抽取一位选手答题。该按钮按下后1位数码管显示随机选手号,二位数码管显示答题倒计时,若时间超时,蜂鸣器给出警报。若有效时间内答题,则答题成功。 (4) 、在随机抽取选手答题中,可以按下结束随机抽取选手答题按钮来结束随机抽取答题。结束后数码管均显示0. 等待下次抢答开始。
3、下面焊接步骤可按图片进行 下面图片中画的黑线表示也需要连线,在这里由于拍照时还未焊接,后来焊接的!在此特别提出!下面最后几张图片中可以看到该画黑线处的连线! 很多同志需要自己焊接reset功能的找不到RST脚,可以上网查查的!上面图单片机焊接两排下面一排右边开始数,第9个脚为RST脚!
仿真图:
文件列表:
C51学习视频没有\
KEIL 软件安装视频没有\
keil_project\
keil_project2\
Keil_Project3\
Protel 99 软件安装包\
Protel 99画图软件学习视频\
proteus7.5仿真\
proteus8.0仿真\
PROTEUS仿真软件的安装方法\
proteus软件安装包\
仿真学习案例\
仿真指导\
单片机程序下载软件\
参考论文及设计文档\
开题报告及任务书\
没有单片机初学者视频教程\
焊接指导\
电路图\
程序\
Keil-Project说明.txt
proteus7.5仿真.rar
proteus仿真.rar
八路抢答器设计功能说明.docx
抢答器仿真指导.docx
抢答器元器件清单.docx
毕设答辩技巧.rar
下面分享下基于单片机的八路抢答器设计任务书及开题报告.doc(51hei提供的附件内有完整的论文下载word格式 可编辑):
XXXX学校
任务书
学生姓名: XX 学号: XXXXXX 系 别: 电子工程系 专 业: 电子技术 毕业综合实践题目:基于单片机的八路抢答器设计
指导教师: XX讲师 (姓名、专业技术职务)
材 料 目 录 年月
XX学校
毕 业 综 合 实 践 任 务 书
学年 系专业
学生姓名: | | | | | | 毕业综合实践题目: | | | 起迄日期: | | 实践地点: | | 指导教师: | | 顾问教师: |
| 教研组(室)负责人: | | 发任务书日期: XXXX年 XX月XX日 |
|
|
|
|
|
|
|
一、选题背景: 在这个瞬息万变、竞争激烈的时代,选择一个优越的工具往往能提升企业在这个市场上的竞争力。进入21世纪,随着科学技术的发展,生活中的竞赛越来越多,为了在比赛中能准确、公正、直观的判断出第一抢答者,设计的抢答器通常有数码显示、灯光、音响等多种手段指示出第一抢答者。设计一种易于使用和区分度高的抢答器成了非常迫切的任务,抢答器主要用于选手做抢答题时,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则,因此我们设计了一种采用数字电路制作的多功能数显抢答器,除了有抢答功能外,还具有定时报警功能和数显功能。 | 二、设计(研究)内容: 1.对本课题的总结介绍:“八路抢答器”设计采用STC89C51自身接口实现数码管动态显示和蜂鸣报警系统。当主席台按下开始强大按钮时,数码管显示抢答倒计时,在该时间内抢答有效如无人抢答时间到后将进行蜂鸣器报警。若有人抢答数码管显示答题倒计时,有限时间内答题则抢答成功,若有限时间内无法答题,蜂鸣器进行答题超时报警。 2.工作内容:首先要对该设计进行分析,用protel99SE将该电路的原理图给绘出,然后用编写出程序并画出流程图。编译编写的程序生成可执行HEX文件,再用proteus软件进行设计仿真。再将程序下载到单片机中,最后将焊接电路,并进行硬件调试。 3.能力要求及目标 (1)学习能力强、工作态度认真,能及时完成任务。 (2)理论联系实际,能综合运用所学的理论知识和技能解决实际问题。具有较强的分析能力和解决问题的能力。 (3)毕业综合实践成果对实际应用有一定的现实意义且能体现较强的动手能力。 (4)在工作中有创新意识,在某些方面有独到的见解和创新。 (5)在毕业综合实践中能较快的适应岗位的需要,有较强的职业道德修养,较强的沟通能力。 目标:通过该项目的设计,增强了自身的设计能力,并且也提高了专业水平。同时分析和解决问题的能力也涿渐提高。 | 三、课题任务具体要求及预期成果: 此设计方案是利用对数字电路知识的稳固掌握来进行课程设计的,要求做到熟悉各集成芯片的功能,进行正确的引脚连接,从而完成抢答器的功能实现和软件仿真。 课题要求完成的方案及成果: 1. 设计出基于单片机的八路抢答器设计的原理图设计、proteus仿真设计、源程序的编写及调试、硬件的焊接及调试。 2. 编写相应的设计相关文档。 3.完成毕业综合实践报告。 | 四、时间安排与要求: : 选择并确定课题,并收集好一些相关的资料。 : 下发任务书。 : 完成开题报告。 : 完成初步设计,包括电路图、参数设置。 : 进行有关的仿真实验、分析调试,并达到预期的效果。 : 完成论文的初稿,进行中期的检查。 : 修改论文,最终完成毕业设计,上交材料。 | 五、完成课题需具备的条件: 实践者应具备扎实的电路分析、电子技术应用、电子测量、等基础知识,能熟练应用proteus、Protel等软件对电路进行仿真分析、对电路进行检测和排故。有一定的电路设计、分析问题和解决问题能力。同时需要一定的编程能力熟练KEIL下C51编程。 所需设备:装有KEIL软件、Protel软件及Keil软件的电脑。 参考资料: 【1】殷庆纵 李福勤 编著 电子线路CAD 北京:北京大学出版社,2009.8 【2】刘训非 编著 EDA技术(二)校本教材 【3】陈其纯 编著 电子线路(第二版)北京:高等教育出版社,2006.6 【4】陈尚松 郭庆 雷加 编著 电子测量与仪器 北京:电子工业出版社,2009.1 【5】张毅刚 修林成 编著 MCS-51单片机应用设计 北京:哈尔滨工业大学出版,社 2009.2 【6】何立民 主编 单片机应用技术选编 北京: 北京航空航天大学出版社,1991.9
| 六、其他需要说明的的事项:
|
单片机源程序:
- #include <reg51.h>
- #include <intrins.h>
- #include <stdlib.h>
- sbit DG1 = P0^0; //二位数码管第一位选择脚
- sbit DG2 = P0^1; //二位数码管第二位选择脚
- sbit DG3 = P0^3;
- //P2端口 数码管段选
- //P1端口 八位选手抢答
- sbit start_qd_pin = P3^7;//开始抢答按钮连接管脚
- sbit end_qd_pin = P3^5; //结束抢答按钮连接管脚
- sbit start_srand_qd_pin = P3^4;//开始随机抽取选手按钮连接管脚
- sbit end_srand_qd_pin = P3^6;//结束随机抽取选手按钮连接管脚
- sbit beep=P3^3;//蜂鸣器连接管脚
- unsigned char weixuan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管段码:0123456789
- unsigned char qd_num=0; //抢答选手号
- unsigned char qd_time=0; //抢答倒计时间
- unsigned char timeout_num=0; //定时器产生中断次数
- unsigned char work_status = 0; //工作状态,下面几个为工作状态定义的宏
- #define START_QD_STATUS 0
- #define WAIT_QD_STATUS 1
- #define ACK_QD_STATUS 2
- #define ACK_SRAND_QD_STATUS 3
- /*------延时2ms函数------*/
- void delay2ms(void) //误差 0us
- {
- unsigned char a,b;
- for(b=4;b>0;b--)
- for(a=248;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- }
- /*------延时50ms函数,参数num为延时多少个50ms------*/
- void delay50ms(unsigned int num) //误差 0us
- {
- unsigned char a,b;
- unsigned char i=0;
- for(i=0; i<num; i++)
- {
- for(b=173;b>0;b--)
- for(a=143;a>0;a--);
- }
- }
- /*---初始化定时器0---*/
- void InitTimer0(void)//50ms
- {
- TMOD = 0x01;//定时器工作模式1
- TH0 = 0x3C; //定时器装值高8位
- TL0 = 0x0B0;//定时器装值低8位
- EA = 1; //使能总中断
- ET0 = 1; //使能定时器0中断
- TR0 = 1; //启动定时器
- }
- /*------关闭定时器0------*/
- void end_Timer0(void)
- {
- ET0 = 0;//关闭定时器0中断
- TR0 = 0;//停止定时器0
- }
- /*----初始化函数-----*/
- void init(void)
- {
- DG1 = 0;
- DG2 = 0;
- DG3 = 0;
-
- beep = 0;//上电时由于该脚为高,而为高时蜂鸣器会叫,故初始化为低
- }
- /*----------等待开始抢答状态
- 该状态下一直等待主席台按下开始抢答按钮或随机抢答按钮,再进入相应的工作状态!
- 这种状态机的编程方式是当前单片机开发者的主流思想。
- ---------*/
- void start_qd_status(void)
- {
- if(start_qd_pin == 0)//检测到开始抢答按钮按下
- {
- work_status = WAIT_QD_STATUS;//工作状态设置为等待答题状态
- qd_num = 0; //回答选手号为0,等待选手按下
- qd_time = 20; //20s抢答时间
- timeout_num=0; //中断次数清0
- InitTimer0(); //开启定时器0
- }
- if(start_srand_qd_pin == 0)//检测到随机抽取选手答题按钮按下
- {
- work_status = ACK_SRAND_QD_STATUS;//工作状态设置为随机选手回答状态
- srand(TL0%100); //产生随机数种子,srand和rand函数有兴趣可以百度一下单片机产生随机数方法!
- qd_num = (rand()%9);//0-8, 产生随机数
- if(qd_num == 0) //防止产生随机数0
- qd_num = (rand()%9); //再次产生随机数
- qd_time = 30; //30s答题时间
- timeout_num=0; //中断次数清0
- InitTimer0(); //开始定时器0
- }
- }
- /*-------开始按钮按下后,等待选手抢答状态函数------*/
- void wait_qd_status(void)
- {
- unsigned char i = 0;
- if(qd_time == 0)//无人抢答,抢答时间已到
- {
- end_Timer0();//停止定时器0
- //蜂鸣器给出无人抢答警报
- beep = 1; //蜂鸣器响
- delay50ms(40);
- beep = 0;
- work_status = START_QD_STATUS;//无人抢答后恢复原始状态,设置工作状态为开始抢答状态
- }
- if(end_qd_pin == 0)//检测到结束按键
- {
- end_Timer0();//停止定时器0
- qd_num = 0;//回答选手号为0
- qd_time = 0;//抢答时间清0
- work_status = START_QD_STATUS;//工作状态置开始抢答状态
- }
- switch(P1)//检测哪位选手按下抢答按钮
- {
- case 0xfe://1号
- qd_num = 1;//回答选手号为1
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0xfd://2号
- qd_num = 2;//回答选手号为2
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0xfb://3号
- qd_num = 3;//回答选手号为3
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0xf7://4号
- qd_num = 4;//回答选手号为4
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0xef://5号
- qd_num = 5;//回答选手号为5
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0xdf://6号
- qd_num = 6;//回答选手号为6
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0xbf://7号
- qd_num = 7;//回答选手号为7
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- case 0x7f://8号
- qd_num = 8;//回答选手号为8
- qd_time = 30;
- timeout_num=0;
- InitTimer0();
- work_status = ACK_QD_STATUS;
- break;
- default:
- break;
- }
- }
- /*------选手回答问题状态------*/
- void ack_qd_status()
- {
- unsigned char i = 0;
- if(qd_time == 0)//答题超时
- {
- end_Timer0();//结束定时器0
- qd_num = 0;
- qd_time = 0;
- for(i=0;i<3;i++)//选手回答问题超时警报
- {
- beep = 1;
- delay50ms(5);
- beep = 0;
- delay50ms(5);
- }
- work_status = START_QD_STATUS;//设置工作状态为开始抢答状态
- }
- if(end_qd_pin == 0)//结束按键按下
- {
- end_Timer0();//结束定时器0
- qd_num = 0;
- qd_time = 0;
- work_status = START_QD_STATUS;//设置工作状态为开始抢答状态
- }
- }
- /*-------随机选手回答状态-------*/
- void ack_srand_status()
- {
- unsigned char i = 0;
- if(qd_time == 0)//答题超时
- {
- end_Timer0();//结束定时器0
- qd_num = 0;
- qd_time = 0;
- for(i=0;i<3;i++)//随机选手回答问题超时警报
- {
- beep = 1;
- delay50ms(5);
- beep = 0;
- delay50ms(5);
- }
- work_status = START_QD_STATUS;
- }
- if(end_srand_qd_pin == 0)//结束按键
- {
- end_Timer0();//结束定时器0
- qd_num = 0; //选手号清0
- qd_time = 0;//时间清0
- work_status = START_QD_STATUS;//设置工作状态为开始抢答状态
- }
- }
- /*-----数码管显示函数
- 二位数码管显示倒计时时间
- 一位数码管显示抢答选手号------*/
- void display(unsigned char qd_time, unsigned char qd_num)
- {
- P2 = weixuan[qd_time/10];//显示时间十位
- DG1 = 1; //打开第一位数码管位选
- delay2ms();
- DG1 = 0;
- P2 = weixuan[qd_time%10];//显示时间个位
- DG2 = 1; //打开第二位数码管位选
- delay2ms();
- DG2 = 0;
- P2 = weixuan[qd_num%10];//显示选手号
- DG3 = 1; //打开第三位数码管位选
- delay2ms();
- DG3 = 0;
- }
- /*-------主函数-----*/
- void main()
- {
- init();//初始化
- while(1)
- {
- switch(work_status)//工作状态判断
- {
- case START_QD_STATUS://开始抢答状态
- start_qd_status();
- break;
- case WAIT_QD_STATUS://等待选手抢答状态
- wait_qd_status();
- break;
- …………限于本文篇幅 余下代码请从51黑帖子末尾下载附件…………
复制代码
八路抢答器全部资料打包下载(完整资料,含论文 仿真 原理图 源码 教程等等一应俱全 都有的都有了):
八路抢答器.zip
(6.76 MB, 下载次数: 416)
|