《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc

上传人:哈尼dd 文档编号:5092234 上传时间:2020-02-01 格式:DOC 页数:19 大小:491KB
返回 下载 相关 举报
《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc_第1页
第1页 / 共19页
《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc_第2页
第2页 / 共19页
《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc_第3页
第3页 / 共19页
《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc_第4页
第4页 / 共19页
《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc》由会员分享,可在线阅读,更多相关《《能力拓展训练》课程设计说明书 -智能抢答器设计 .doc(19页珍藏版)》请在三一文库上搜索。

1、武汉理工大学能力拓展训练课程设计说明书 目录1 设计任务及要求分析11.1 设计任务11.2 任务分析12 方案比较及认证说明22.1 方案比较22.2 认证说明23 系统设计33.1 设计方案结构图33.2 系统原理43.2.1 按键部分43.2.2 单片机控制部分43.2.3 数码显示部分53.3 系统总体接线图64 软件设计74.1 系统总体流程图74.2 系统软件设计85 系统仿真95.1 抢答仿真95.2 无人抢答仿真105.3 结果分析116 总结12参考文献13附录 程序清单141 设计任务及要求分析1.1 设计任务 初始条件:计算机、单片机、EDA实验箱。要求:设计智能抢答器,

2、使用8位按键,分别模拟抢答者位数。当在提问时所有的按键均是被封锁的,即按下无响应。在要求回答时,所有按键同时开放,当某按键最先按下时,立即保持该按键信号封锁其它所有按键,用BCD码形式显示该按键。记录抢答过程的时间(毫秒)并显示。1.2 任务分析 分析设计题目可知应采用51单片机进行系统总体控制。其中,我们可选择单片机的P0、P1、P2口输入、输出信号,将10个控制键信号输入单片机,经处理后,再将51单片机的控制信号输出来驱动数码管显示部分。在设计任务中,最关键的问题是对输入信号的取入及处理。我们可以采用键盘扫描函数取入主持人按键信息及抢答按键信息,复位按键信息则可直接输入,然后我们可以利用5

3、1单片机分别完成:对抢答器的开启控制,启动后显示抢答时间,以及对最先按下按键的抢答者进行号码锁存以及最终显示抢答者号码和抢答时间。按照这样的思路来进行设计,就可以完成设计要求。 2 方案比较及认证说明2.1 方案比较 方案一:在按键信号检测方面,将8位抢答者的按键状态分别输入到P0.0-P0.7八位P0口中,然后单独对每个按键进行检测并定义,使1-8八个按键按下后,能对应产生1-8八个数字。再将数字返回到数码管显示子程序中,显示抢答者号码。在数码管显示时,采用4位和1位的静态显示方式。 方案二:在按键信号检测方面,将8位抢答者的按键状态分别输入到P0.0-P0.7八位P0口中,然后对8个按键进

4、行集中检测,将8个按键的状态组成一个8位的二进制数,设计一个键盘扫描程序,使1-8八个按键中某一个按下后能对应产生1-8八个数字。再将数字返回到数码管显示子程序中,显示抢答者号码。在数码管显示时,采用4位和1位的动态扫描方式。 2.2 认证说明 方案一中单独对8个按键进行检测,而不对8个按键整体检测,这样需要对P0.0-P0.7八位P0口分别检测然后对应产生1-8八个数字,这样会使单片机程序显得冗长。方案一中数码管采用静态显示,由于使用的数码管较多,占用的输出口较多,使电路的硬件设计变得麻烦;方案二中对8个按键组成的整体进行检测,这样程序简洁,而且确保在第一个抢答者按下按键后,数码管能准确显示

5、抢答者的号码。方案二中采用动态扫描方式进行数字显示,这样数码管占用的输出口只有7个,节省了电路的硬件开销。故采用方案二。3 系统设计3.1 设计方案结构图 系统设计方案结构图如图3.1所示。 时间显示 抢答按键 51 单 片 机 控 制复位 开启按键 号码显示 图3.1 系统总原理图3.2 系统原理3.2.1 按键部分本系统设计有10个按键,其中代表8位抢答者的按键接单片机的P1口,主持人按键接单片机的控制口P2.5来对抢答进行开启控制,复位键的输出信号接单片机的RST位来对抢答器进行复位控制。按键部分接线图如图3.2.1所示。图3.2.1 按键部分接线图3.2.2 单片机控制部分本设计中单片

6、机从P1口接收来自代表8位抢答者的按键的信号,P2.5接收开启控制信号,RST位接收复位信号。通过调用单片机程序,单片机P0口接上拉电阻后将控制数码管的段选,P2.0则将进行显示优先抢答者号码的数码管的位选控制,P2.1-2.4进行显示时间的数码管的位选,从而实现单片机对抢答器系统的控制。 单片机控制部分接线图如图3.2.2所示。图3.2.2 单片机控制部分接线图3.2.3 数码显示部分 显示优先抢答者号码的数码管和显示时间的数码管的七位段选是共用的,位选则分别由P2.0和P2.1-2.4控制,采用动态显示。 数码显示部分接线图如图3.2.3所示。图3.2.3 数码显示部分接线图3.3 系统总

7、体接线图 完成系统各部分功能设计以后,则可将系统各部分组合起来,得到系统总体硬件接线图。 系统总体接线图如图3.3所示。图3.3 系统总体接线图4 软件设计4.1 系统总体流程图 系统设计方案结构图如图4.1所示。 开始开始键 按下?数码管显示0 N 抢答环节开始 开始计时 Y 显示 计时 结束 数码管 显示9999 到定时 时间? Y N N 数码管显示号码 有人抢 答? 数码管显示时间 抢答环节结束 关闭计时 Y图4.1 系统总体流程图4.2 系统软件设计 系统设计的代表8位抢答者的按键,将信号输入到单片机的P1.0-P1.7口后,键盘扫描程序取入P1口的输入值,通过使用switch语句,

8、将按键信息变为优先抢答者的号码送入数码管显示。在键盘扫描程序中,加入了延迟程序进行消抖,使按键检测更可靠。系统的开启按键则可在输入P2.5口后,可直接在主程序中加入if语句进行控制。在数码管时间显示部分,数码管采用动态扫描方式,并使用了T0定时器计数。T0定时器的单次计时时间为1ms,每记一次时,数码管时间显示数值加一,实现了数码管毫秒计时的功能。 具体程序见附录。5 系统仿真5.1 抢答仿真 当计时时间未到9999,有人按下抢答按键时,系统可显示优先抢答者的号码以及计时时间。抢答仿真结果如图5.1所示。图5.1 抢答仿真结果图5.2 无人抢答仿真 当计时时间到9999,仍未有人按下抢答按键时

9、,系统显示优先抢答者的号码为0,计时时间为9999。无人抢答仿真结果如图5.2所示。图5.2 无人抢答仿真结果图5.3 结果分析 通过仿真可以看出,系统的工作过程为:在开启按键按下之前,数码管显示优先抢答者的号码为0,计时时间为0,直到开启按键按下时,抢答器才开始计时,如果计时到9999之前,有抢答者按下按键进行抢答,则数码管显示优先抢答者的号码以及计时时间。若计时到9999,则系统显示优先抢答者的号码为0,计时时间为9999,表示无人抢答。从抢答器的工作过程可以看出,系统设计符合预期要求,而且可以准确、可靠工作。6 总结经过多次艰难的尝试,我终于完成了能力拓展训练任务。在刚刚看到课程设计任务

10、书时,由于对单片机的编程及综合使用不是很熟悉,我都感觉有点无从下手。带着一个个的疑问我认真地去图书馆查阅了相关资料、上网去了解单片机编程、仿真相关的内容,同时也和其他同学沟通、交流,互相学习,渐渐的感觉有了些头绪。虽然我的课程设计不是很成熟,仍然还有很多不足之处,但我仍然感觉自己还是有所收获,因为在完成课程设计的过程中让我不仅学到了很多课本上没有的东西,还让我学会了如何利用各种资源去学习自己不熟悉的知识。这次课程设计真是让我获益匪浅。参考文献1 张义和.王敏男等编著.例说51单片机.北京:人民邮电出版社.20082 张靖武.周灵彬编著.单片机系统的PROTEUS设计与仿真. 北京:电子工业出版

11、社,2007.3顶明亮.唐前辉编著.51单片机应用设计与仿真:基于keil与proteus.北京:北京航空航天大学出版社,20094苏卫斌.8050系列单片机应用手册M.北京:科学出版社,1997.5徐仁贵.微型计算机接口技术及应用M.北京:机械工业出版社,1996.6高锋.单片机应用系统设计及实用技术M.北京:机械工业出版社,2004.附录 程序清单#includesbit seg_1 = P20; /显示选手的数码管 sbit seg_2 = P21; /显示计时的千位sbit seg_3 = P22; /显示计时的百位sbit seg_4 = P23; /显示计时的十位sbit seg_

12、5 = P24; /显示计时的个位 sbit key_1 = P25; /开始按键 #define dat P0 #define Key_port P1 /设置八组抢答按键,P1.0P1.7分别对应组号18 unsigned int T0count=0; /计数器计数 long int Time= 0; /计时时间 bit flag1 = 0; /当开始按下按键时,标志位置1bit flag2 = 0; /当有选手按下按键时,标志位置1const unsigned char code seg_dat= /时间的数码管的显示,对应数字0f0xc0,0xf9,0xa4,0xb0,0x99,0x92

13、,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff, ; unsigned char key_scan(void); /键盘扫描函数,返回值为按下的键的序号 void dis_1(unsigned char num1); /数码管的显示函数 显示的是哪一位选手按下了 void dis_4(long int num4); /数码管的显示函数 显示的是计时时间 void delayms(unsigned int i); /延时大约imsvoid delayus(unsigned int i); /延时大约ius unsigned char

14、 key_scan(void) /键盘扫描函数 ,返回值为按下的键的序号unsigned char get_port = 0; /清零 Key_port = 0xff; /每次扫描前,先将接键盘的引脚口拉高 key_1 = 1; /开始按键,每次扫描前先拉高 get_port = Key_port; /从端口采回值 if(get_port != 0xff) /如果检测到有键按下 delayms(10); /延时10ms,进行消抖操作。 get_port = Key_port; /再次采回端口值 if(get_port != 0xff) get_port = Key_port;switch (K

15、ey_port) /标志位置位 并返回相应的值 case 0xfe:flag2 = 1;return 1;case 0xfd:flag2 = 1;return 2;case 0xfb:flag2 = 1;return 3;case 0xf7:flag2 = 1;return 4; case 0xef:flag2 = 1;return 5; case 0xdf:flag2 = 1;return 6;case 0xbf:flag2 = 1;return 7;case 0x7f:flag2 = 1;return 8;while(!Key_port); /松手检测 if(key_1 = 0) /如果开

16、始键按下 delayms(10); /延时10ms if(key_1 = 0) /再次判断是否确实按下按键 flag1 = 1; /标志位置1 return 9; /返回值为9 while(!key_1); /松手检测 return 0;void dis_1(unsigned char num1) /1位LED数码管的显示函数 seg_1 = 1; /开数码管的显示 seg_2 = 0;seg_3 = 0;seg_4 = 0;seg_5 = 0;dat = seg_datnum1; /让数码管显示对应的数值 delayms(5); /短暂的延时可以增加亮度 dat = seg_dat16; /

17、关闭显示,避免对下一次的值造成干扰。 void dis_4(long int num4) /四位LED数码管的显示函数 unsigned char shi,ge,bai,qian;qian = num4/1000; /提取出每位的值bai = num4%1000/100;shi = num4%100/10; ge = num4%10; seg_1 = 0; seg_2 = 0;seg_3 = 0; seg_4 = 0;seg_5 = 1; /开数码管的显示dat = seg_datge; /让数码管显示个位的数值 delayms(5); /短暂的延时可以增加亮度 dat = seg_dat16

18、; /关闭显示,避免对下一次的值造成干扰。 seg_1 = 0; seg_2 = 0; seg_3 = 0;seg_4 = 1; /开数码管的显示seg_5 = 0;dat = seg_datshi; /让数码管显示十位的数值 delayms(5); /短暂的延时增加亮度 dat = seg_dat16; /关闭显示,避免对下一次的值造成干扰。 seg_1 = 0; seg_2 = 0;seg_3 = 1; /开数码管的显示seg_4 = 0;seg_5 = 0; dat = seg_datbai; /让数码管显示百位的数值 delayms(5); /短暂的延时可以增加亮度 dat = seg

19、_dat16; /关闭显示,避免对下一次的值造成干扰。seg_1 = 0; seg_2 = 1; /开数码管的显示seg_3 = 0;seg_4 = 0;seg_5 = 0;dat = seg_datqian; /让数码管显示千位的数值 delayms(5); /短暂的延时增加亮度 dat = seg_dat16; /关闭显示,避免对下一次的值造成干扰。 void delayms(unsigned int i) /延时大约imsunsigned int x,y;for(x = 0;xi;x+)for(y = 0;y100;y+);void delayus(unsigned int i) /延时大约ius unsigned int x;for(x = 0;x= 1 ) /当TOcount=1时,表示计时1msT0count = 0; /清零 Time+; while (Time= 9999) /当计时为9999时 dis_4(9999); /数码管显示9999dis_1(0); /数码管显示0TR0 = 0; /关闭定时器 18

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 绩效管理


经营许可证编号:宁ICP备18001539号-1