单片机六人抢答器程序
- 格式:doc
- 大小:125.00 KB
- 文档页数:15
单片机六路抢答器课程设计
单片机六路抢答器是一种用于教育培训场景的设备,旨在提高学生的抢答能力和思维敏捷性。
在这个课程设计中,我们将使用单片机来实现一个具有六个按钮的抢答器系统。
首先,我们需要准备硬件部分的材料。
一个典型的单片机抢答器系统包括一个单片机主控板、六个按钮、一个显示器以及一些连接线材。
在这里,我们选择使用常见的Arduino Uno作为单片机主控板,并将六个按钮分别连接到主控板的不同IO口上。
接下来,我们需要编写相应的代码来实现抢答器的功能。
在Arduino 编程环境中,我们可以使用C/C++语言来编写代码。
首先,我们需要初始化IO口和显示器。
然后,我们可以设置一个定时器,用于限制每个学生的抢答时间。
当某个按钮被按下时,我们可以通过判断相应的IO口状态来确定哪个学生抢答成功。
最后,我们将抢答结果显示在显示器上。
除了基本的抢答功能,我们还可以进一步扩展课程设计。
例如,我们可以加入抢答器的计分功能,每次学生抢答成功后,可以在显示器上显示相应的分数。
此外,我们还可以设置难度级别,给不同的学生设置不同的抢答时间限制,以提高学生的竞争性和抢答能力。
在课程设计的过程中,我们可以引入一些有趣的抢答游戏,例如多人对战、团队比赛等,以增加学生的参与度和趣味性。
此外,我们还可以加入音效和灯光效果,使整个抢答过程更加生动有趣。
总之,单片机六路抢答器是一个很好的教育培训工具,可以帮助学生提高抢答能力和思维敏捷性。
通过合理设计课程内容和引入一些有趣的元素,我们可以创造一个富有活力和互动性的课堂氛围,激发学生的学习兴趣和积极性。
源程序代码#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define led_seg P0#define led_bit P2 //高四位位选#define JZ_KEY P2 //矩阵扫描Unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};//共阳段码,0-9unsigned char code rest[]={0xbf,0xbf,0xbf,0xbf};bit action = 0; //允许抢答标志bit key_flag=0;bit qianda_flag=0;bit Rest_flag=0;sbit K7=P1^6; //抢答指示灯sbit buzzer=P3^7; // 蜂鸣器uchar qianda_time=5,dati_time=30; //抢答、答题倒计时uchar qianda_time_m=5,dati_time_m=30;uchar timer0_count = 0;uchar player=0;uchar key=100;uchar GD_player=0;//成功者编号(存储用数组)void K_scan4x4(void);void alert();void show_QD();void show_DT();void dati();void DelayMs(uint Delay){uchar i;for(;Delay>0;Delay--)for(i=0;i<128;i++);}uchar FW_wait(){uchar i;Rest_flag=1;P1=~0xaa;do //等待按键{K_scan4x4();led_bit =~(0x10); led_seg = rest[0]; DelayMs(10);led_bit =~(0x20); led_seg = rest[1]; DelayMs(10);led_bit =~(0x40); led_seg = rest[2]; DelayMs(10);led_bit =~(0x80); led_seg = rest[3]; DelayMs(10);i++;if(i==6) {i=0;P1=~P1;} //闪烁延时DelayMs(30);if(key==0x0a) break;if(key==0x0b) break;if(key!=0x0c){if(action==0&&key_flag==1) {alert();}}}while(key!=0x0c);return (key);}uchar QD_wait(){P1=~(0x02);dati_time=dati_time_m;do //等待启动按键{K_scan4x4();led_bit =~(0x10); led_seg = table[GD_player];DelayMs(10); led_seg=0xff; //led_seg=0xff 消影led_bit =~(0x20); led_seg = rest[1];DelayMs(10); led_seg=0xff;led_bit =~(0x40); led_seg = table[(dati_time/10)];DelayMs(10); led_seg=0xff;led_bit =~(0x80); led_seg = table[(dati_time%10)];DelayMs(10); led_seg=0xff;if(key==0x0d) {key=1;return (key);}}while(key!=0x0c);key=0;return (key);}void show_QD(){qianda_time=qianda_time_m;led_bit =~(0x10); led_seg = rest[0];DelayMs(10); led_seg=0xff;led_bit =~(0x20); led_seg = rest[1];DelayMs(10); led_seg=0xff;led_bit =~(0x40); led_seg = table[(qianda_time/10)];DelayMs(10); led_seg=0xff;led_bit =~(0x80); led_seg = table[(qianda_time%10)];DelayMs(10); led_seg=0xff;}void show_DT(){dati_time=dati_time_m;led_bit =~(0x10); led_seg = table[GD_player];DelayMs(10); led_seg=0xff;led_bit =~(0x20); led_seg = rest[0];DelayMs(10); led_seg=0xff;led_bit =~(0x40); led_seg = table[(dati_time/10)];DelayMs(10); led_seg=0xff;led_bit =~(0x80); led_seg = table[(dati_time%10)];DelayMs(10); led_seg=0xff;}void K_scan4x4(void){char a=0;key_flag=0;JZ_KEY=0x0f;if(JZ_KEY!=0x0f)//读取按键是否按下{DelayMs(10);//延时10ms进行消抖if(JZ_KEY!=0x0f)//再次检测键盘是否按下{key_flag=1;JZ_KEY=0x0f; //读取列值switch(JZ_KEY){case(0X07): player=0; key = player;break;case(0X0b): player=1; key = player;break;case(0X0d): player=2; key = player;break;case(0X0e): player=3; key = player;break;}JZ_KEY=0xf0; //读取行值switch(JZ_KEY){case(0X70): player=player; key = player;break;case(0Xb0): player=player+4; key = player;break;case(0Xd0): player=player+8; key = player;break;case(0Xe0): player=player+12;key = player;break;}while((a<50)&&(JZ_KEY!=0xf0)) { DelayMs(10);a++; } //检测按键松手检测}}}void alert(){uchar i=0;for(i=100;i>0;i--) //i:警报长短{buzzer=0;DelayMs(20); //不同声音buzzer=1;}}void qianda(){qianda_flag=1;qianda_time=qianda_time_m;K7=0;key=100;do{K_scan4x4();show_QD();if(qianda_time == 0) {qianda_time = qianda_time_m; qianda_flag=0; break; } ////抢答倒计时,10s结束DelayMs(10);if((key>4)&&(key<16)) //这里设置路数按错键退出{if(key==0x0d) {qianda_flag=0; break;}else {alert();qianda_flag=0; break;}}} while(!(key<8));if(qianda_flag==0){ qianda_flag=0;} //未抢答成功else{qianda_flag=1; //抢答成功,关闭定时TR0 = 0;K7=1;GD_player=key+1;key=0;action = 0;}}void dati(){dati_time = dati_time_m;player=0;while(player!=0x0d){K_scan4x4();show_DT();if(dati_time == 0) { dati_time = 20; break;}}}void mod_time_q(){uchar flag=0;do{K_scan4x4();if(player==0x0e) { player=0; flag=1; qianda_time_m++; }if(player==0x0f) { player=0; flag=1;qianda_time_m--; }if(flag==0&&key_flag==1) {if(key!=0x0d) {key_flag=0;alert();}}DelayMs(50);show_QD();} while(key!=0x0d);qianda_time=qianda_time_m;dati_time=dati_time_m;}void mod_time_d(){uchar flag=0;do{K_scan4x4();if(player==0x0e) { player=0; flag=1; dati_time_m++; }if(player==0x0f) { player=0; flag=1; dati_time_m--; } if(flag==0&&key_flag==1) {if(key!=0x0d){key_flag=0;alert();} }DelayMs(50);show_DT();} while(key!=0x0d);qianda_time=qianda_time_m;dati_time=dati_time_m;}void main(){TMOD=0x01; //使用定时0,工作方式1,16位定时器TH0=(65536-20000)/256; //定时50msTL0=(65536-20000)%256;EA=1;ET0=1;TR0=0;while(1){FW_wait(); //复位状态等待按键switch(key){case 0x0a: if(Rest_flag==1){key=0;Rest_flag=0;mod_time_q();break;} break;case 0x0b: if(Rest_flag==1){key=0;Rest_flag=0;mod_time_d();break;}break;case 0x0c: key=0;K7=0;DelayMs(10); action=1; TR0=1; qianda();//启动抢答if(qianda_flag==0) {break;} //抢答不成功else QD_wait(); //抢答成功,执行答题等待界面if(key==0) {K7=0; TR0=1; dati(); K7=1;break;}//启动if(key==1) {break;} //复位case 0x0d: if(action==1) {key=0; FW_wait();break;} //抢答复位键if(qianda_flag==1) {key=0;QD_wait();break;}break; //答题复位键}}}void timer0() interrupt 1 //定时时间为1s{TH0=(65536-20000)/256; //定时20msTL0=(65536-20000)%256;timer0_count ++;if(timer0_count == 50){timer0_count = 0;qianda_time--;dati_time--; //答题记时}}。
摘要此次设计选择使用AT89C51单片机为核心的控制元件,设计制作一个简易的抢答器。
本设计是以AT89C51单片机作为控制的主要核心,LED显示器,蜂鸣器等六路抢答器的程序,并且利用了单片机的延迟时电路,时钟电路,键复位电路以及定时器/中断等其他电路。
六路抢答器的设计特点是让选手应答时间与选手实时显示出来,利用复位电路开场新一轮的比赛或者游戏,我们使用的也是我们所掌握的C语言来进展编程,实现了一些根本功能。
该系统的设计是可行的,以确定准确,简便,强烈的扩展能力。
它的表达的功能主要是比赛开场时,主持人读完题目后按下抢答键,语音提示答题开场,提示音完毕后开场倒计时,这时数码管开场进展10s的倒计时,当有选手进展抢答时,选手按下抢答键,这时候数码管显示屏上就会显示出对应答题者的编号以及抢答所剩余的时间。
如果10秒计时时间到了还没有人做出抢答,蜂鸣器就会发出声音并且语音提示抢答完毕,这一题就作废即所有人均不得分,然后开场新一轮的抢答。
在下一轮抢答开场之前按下复位键将时间归零,再按下开场键进展新的一轮。
抢答者答复正确后,评审员按下加分键,该选手编号所对应的数码管显示的数字就增加〔按一次加一分,最高显示9分〕。
相反,如果抢答者答复错误,在抢答者分数不为0的情况下,评审员按下减分键,该选手编号所对应的数码管显示数字就减少〔按一次减一分,最低显示0分〕。
关键词:单片机、AT89C51、抢答器Abstract:The design options using AT89C51 microcontroller as the core control elements, design a simple Responder. The design is based on the six-way Responder AT89C51 microcontroller as the main core control, LED display, beeper and other procedures, and use of the single-chip delay circuit, clock circuit, key reset circuit and a timer / interrupt other circuits. Six-way Responder design feature is to allow players the response time and the player numbers displayed in real time, using the reset circuit to start a new round of the petition or game, we used our disposal C language programming, to achieve some basic functions.The design of the system is feasible to determine the accurate, simple, strong expansion capability. Its main function is to reflect the start of the game, the host title after reading press answer key, voice prompt answer began, the tone began the countdown ends, then the digital countdown began 10s, when there are players to answer in time , players press the answer key, this time will show the number of respondents and the corresponding answer in the time remaining on the digital display. If 10 seconds to answer in time of time to make a nobody, a buzzer will sound and the end of the voice prompt answer this question on the void that all men are not scoring, then start a new round of answer. Before you start to answer in the next round will be time to press the reset button to zero, and then press the start key to make a new round. Responder who answered correctly, the assessors press plus key, alphanumeric display of the player number corresponding increases (once plus one points, the maximum display 9 points). Conversely, if the answer were wrong answer, answer in person at a fraction is not 0, the panelists Press the minus key points, the player number that corresponds to the digital display figures decrease (once by one point, the lowest display 0 ).Keywords:AT89C51、RESPONDER、SCM目录第一章概述 (1)第二章各模块的选择和论证 (2)1. 方框图┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ (2)2.1抢答器显示模块选择 (2)2.2 控制器选择 (3)2.3 键盘选择 (3)2.4 时钟频率电路的设计 (4)2.5 复位电路的设计 (5)2.6 报警电路 (5)3. 系统硬件连接图 (6)4. 元器件清单 (6)第三章软件的设计 (6)3.1程序流程图 (7)3.2源程序 (8)第四章系统调试 (16)4.1 硬件调试问题分析 (17)4.2 软件调试问题分析 (17)参考文献 (19)第一章概述随着科学技术的开展,电子技术在近几年也得到了快速的开展,而在我们的生活中处处都运用到电子技术,例如现在随着智力竞赛、电视娱乐节目越来越多,为了实现比赛的公平性,就需要一个能在多人进展比赛的情况下能够实现抢答的机器,所以我们就需要这么一个能够简单操作的抢答器。
目录一、设计任务与要求 (2)二、元器件清单及简介 (2)三、设计原理分析及简单设计过程 (3)四、设计中的问题及改进 (8)五、总结 (8)六、参考文献6路抢答器设计一、设计任务与要求1、第一人抢答开关按下后,红LED亮,别人不能再抢答,用1位数码管显示抢答号。
2、主持人有复位开关,按下开关后绿LED灯亮,同时两位动态数码管进行20秒倒计时,有人抢答后停止。
二、元器件清单及简介1.原器件清单如下表所示:2.元器件简介2.1 关于SM420364的介绍SM420364是12个引脚的8段数码管,其中6、7、10、11管脚要通过上拉电阻接电源。
SM420364的逻辑符号和管脚排列如下图所示:2.2 关于AT89S51的介绍2.2.1、AT89S51单片机采用40个引脚的双列直插封装方式,如下图所示:2.2.2、40个引脚按其功能可分为如下三类:(1)电源及时钟引脚(2)控制引脚(3)I/O口引脚2.2.3、AT89S51单片机的片内集成了如下功能部件:AT89S51单片机片内集成了一个8位CPU,数据存储器,4KB Flash ROM,4个8位可编程并行I/O口(P0、P1、P2、P3)。
1个全双工的异步串行口,2个可编程的16位定时器/计数器,1个看门狗定时器,中断系统具有5个中断源、5个中断向量,特殊功能寄存器(SFR)26个,低功耗节电模式有空闲模式和掉电模式,且具有掉电模式下的中断恢复模式、3个程序加密锁定位。
2.3 其他器材的简单说明限流电阻:保护二极管不被烧坏。
三、设计原理分析及简单设计过程3.1 设计思路此抢答器的设计采用模块化结构,主要由以下3个组成,即数码管显示模块、按键控制模块、LED发光显示模块。
在设计此抢答器时,采用模块化的设计思想,使设计起来更加简单、方便、快捷。
此电路是一时钟产生,触发,倒计时计数,数码码显示,在此结构的基础上,构造主体电路和辅助电路两个部分。
3.2 基本原理该抢答器供六人个的抢答比赛使用。
单片机六路抢答器课程设计概述在现代教育中,抢答器是一种被广泛应用的工具,能够有效提高学生的积极性和参与度。
本课程设计旨在使用单片机设计一个六路抢答器,实现简单、高效的抢答系统,为教学活动增添趣味和互动性。
设计要求1.使用单片机实现六个抢答按键,每个按键代表一个选手。
2.设计一个显示屏,显示抢答结果,包括选手编号和抢答时间。
3.实现按键的状态检测和抢答时间的计时功能。
4.提供简单的用户界面,包括开始抢答、停止抢答和重置功能。
结构设计按键和状态检测为了实现六个抢答按键,可以使用六个GPIO口作为输入端,通过外部上拉电阻连接到VCC电源。
当按键按下时,GPIO口会检测到低电平。
使用中断机制可以实现按键状态的实时检测,当检测到按键按下时,触发中断处理函数进行相应的操作。
抢答时间计时抢答时间计时可以使用定时器实现,定时器在启动抢答过程后开始计时,当有选手按下按键时,记录下计时器的当前值作为该选手的抢答时间。
为了满足要求,可以选择使用32位定时器,以提供足够的计时范围。
显示屏和界面设计为了显示抢答结果,可以使用简单的数码管或液晶显示屏。
数码管可以显示选手编号和抢答时间,而液晶显示屏可以提供更多的显示信息,如选手姓名等。
为了方便用户操作,可以设计几个按钮实现开始抢答、停止抢答和重置功能。
可以使用单片机的GPIO口作为输出端,通过外部上拉电阻连接到VCC电源。
当按钮按下时,GPIO口会检测到低电平。
使用中断机制可以实现按钮状态的实时检测,当检测到按钮按下时,触发中断处理函数进行相应的操作。
硬件原理图以下是单片机六路抢答器的硬件原理图:1. VCC2. GND3. 抢答器按键14. 抢答器按键25. 抢答器按键36. 抢答器按键47. 抢答器按键58. 抢答器按键69. 显示屏数据线10. 显示屏使能线11. 按钮112. 按钮213. 按钮3软件设计初始化在软件设计中,首先需要进行初始化设置,包括初始化GPIO口、定时器、中断等。
基于某AT89C51单片机六路抢答器的设计AT89C51单片机六路抢答器设计一、引言抢答器是一种常见的电子设备,特别是在教育领域中,常用于学生课堂上积极参与课堂互动和答题的工具。
本设计以AT89C51单片机为核心,设计了一款六路抢答器,能够实现多个人同时抢答的功能,提高学生参与课堂互动的积极性。
二、系统设计该抢答器设计包括六个按键、六个LED指示灯和一个液晶显示屏。
具体设计如下:1.硬件设计(1)按键设计:设计六个按键,分别对应六个抢答按钮。
当按下一些按键时,相应的LED指示灯亮起,并通过串口数据传送给单片机,单片机根据接收到的数据来判断相应的学生抢答情况。
(2)LED指示灯设计:设计六个LED指示灯,用于显示学生抢答情况。
当一些学生按下相应的按键抢答时,其对应的LED指示灯亮起。
(3)液晶显示屏设计:设计一个液晶显示屏,用于显示当前的抢答情况。
通过串口将单片机接收到的学生抢答情况传送给液晶显示屏,实时显示当前的抢答情况。
2.软件设计(1)按键扫描程序:通过循环扫描六个按键的状态,当一些按键被按下时,将按键对应的值通过串口传送给单片机。
(2)按键控制程序:单片机接收到按键传来的值后,根据不同的值对相应的LED指示灯进行控制,实现抢答状态的显示。
(3)串口通信程序:设计单片机与液晶显示屏之间的串口通信程序,实现单片机将学生抢答情况传送给液晶显示屏的功能。
(4)液晶显示程序:通过串口接收到的数据,将学生抢答情况显示在液晶显示屏上,实时显示当前的抢答情况。
三、系统实现1.硬件实现:按照设计要求,搭建相应的电路,包括按键、LED指示灯和液晶显示屏等模块的连接。
2.软件实现:根据设计要求,进行相应的程序编写。
四、系统测试五、结论本设计基于AT89C51单片机,设计了一款六路抢答器,能够实现多个人同时抢答的功能。
经过测试,系统能够准确地显示学生的抢答情况,并且操作简便。
通过该抢答器,能够有效提高学生的参与度,促进课堂互动,加深学生对知识的理解和记忆。
学号 2010《单片机中级教程原理与应用》课程设计(2010届本科)题目:六路抢答器设计学院:物理与机电工程学院专业:电气程及其自动化作者姓名:指导教师:职称:副教授完成日期: 201 年12 月15 日摘要本设计是六路智力抢答器。
使用51系列单片机,编写应用程序来实现智力抢答功能。
硬件设计使用的是51系列单片机中的89C51。
硬件设计利用其中断控制程序进行抢答部分的处理,通过非门的控制去申请单片机内部的中断,以达到显示抢答的目的。
软件设计利用中断系统的基本构成原理编写中断服务程序,其信号由按键电路提供,由CPU响应中断,并输出响应。
用到了查询按键模块、定时器模块、显示时间模块、显示组号模块、报警模块等。
关键词:89C51 中断定时器报警电路等目录第1章绪论 (3)1.1 智能抢答器的发展现状 (3)1.2 抢答器的背景和特点 (3)第2章抢答器的系统概述 (3)2.1 六路抢答器设计功能要求 (3)2.2 抢答器设计方案 (4)第3章系统硬件电路设计 (4)3.1 系统电路图 (4)3.2 时钟频率电路的设计 (5)3.3 键盘扫描电路的设计 (5)3.4 显示电路的设计 (6)第4章系统软件设计 (7)4.1 程序流程图 (7)4.2 系统程序 (7)第5章仿真调试及性能分析 (8)5.1 仿真调试 (8)一、上电显示 (8)二、开始抢答倒计时显示 (8)三、正确抢答显示 (9)四、违规抢答显示 (9)5.2 性能分析 (10)第6章设计出现的问题及总结 (10)6.1 设计出现的问题 (10)6.2 总结 (10)附录 (13)第1章绪论1.1 智能抢答器的发展现状随着电子技术的发展,现在的抢答器功能越来越强,可靠性和准确性也越来越高。
能够实现抢答器功能的方式有多种,可以采用前期的模拟电路、数字电路或模拟与数字电路相结合的方式,但这种方式制作过程复杂,而且准确性与可靠性不高,成品面积大。
对于目前抢答器的功能描述,如涵盖抢答器、抢答限时、选手答题计时及犯规组号抢答器具有抢答自锁,灯光指示、暂停复位、电子音乐报声、自动定时等功能,还有工作模式的切换和时间设定,对于这些,随着科学技术的发展,肯定还要得到进一步的改进。
题目如下:六人抢答器,以拨动开关K0~K5中的某个开关为ON作为抢答按键,无人抢答时,6只数码管循环轮流显示1~6跑马,谁先抢答,数码管停止跑马,6个数码管同时亮谁的编号,气候再有按键按下,系统不予回应,知道此拨为OFF,恢复1~6跑马开始下一轮抢答。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uchar x);void Js_Scan1(void);void Js_Scan2(void);int flag=0,i;int code LED_Num[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};void main(){EA=1;ET0=1;EX0=1;while(1){Js_Scan1();flag=0;}}void key() interrupt 0 using 0{int x;x=P2;if(x==0xfe&&flag==0){i=0;Js_Scan2();flag=1;}if(x==0xfd&&flag==0){i=1;Js_Scan2();flag=1;}if(x==0xfb&&flag==0){i=2;Js_Scan2();flag=1;}if(x==0xf7&&flag==0){i=3;Js_Scan2();flag=1;}if(x==0xef&&flag==0){i=4;Js_Scan2();flag=1;}if(x==0xdf&&flag==0){i=5;Js_Scan2();flag=1;}}void Js_Scan1() //数码管扫描函数{P1=0xfe;P0=LED_Num[0];delay(100);P1=0xfd;P0=LED_Num[1];delay(100);P1=0xfb;P0=LED_Num[2];delay(100);P1=0xf7;P0=LED_Num[3];delay(100);P1=0xef;P0=LED_Num[4];delay(100);P1=0xdf;P0=LED_Num[5];delay(100);}void Js_Scan2() //数码管扫描函数{uchar j; //定义j数据类型for(j=0;j<5;j++) //建立循环{P1=0x00;P0=LED_Num[i];delay(1);}}void delay(uchar x) //延时函数,防止数码管显示不稳定{uchar k;while(x--)for(k=0;k<125;k++);}基本功能:(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S7表示。
学号:xxxxxxxxxx课程设计报告基于AT89C51单片机抢答器的设计院系电子信息工程学院专业电子信息工程班级 1姓名xxx摘要单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中,单片微型计算机是微型计算机的一个重要分支,也是颇具生产力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称微控器。
学校和电视台等单位场举办各种比赛,抢答器是必要设备。
在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观判断造成比赛的不公平性。
抢答器是一名公正的裁判员,他由主体电路与扩展电路组成。
单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。
在工业生产中,单片微型计算机是微型计算机的一个重要分支,也是颇具生产力的机种。
单片微型计算机简称单片机,特别适用于控制领域,故又称微控器。
学校和电视台等单位场举办各种比赛,抢答器是必要设备。
在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观判断造成比赛的不公平性。
抢答器是一名公正的裁判员,他由主体电路与扩展电路组成。
AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
把216程序去掉空格添上下括号} v4扦测无错一处警告单片机六路数显计时抢答器c语言程序#include <reg52.h>#define uint unsigned int#define uchar unsigned charunsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};sbit start=P3^6;sbit reset=P3^7;sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit key5=P1^4;sbit key6=P1^5;sbit key7=P1^6;sbit key8=P1^7;sbit jia=P3^4;sbit jian=P3^5;bit action = 0;uchar second=10,a[7]={0};uchar timer0_count = 0;uchar number=0;uchar number_display = 0; uchar k;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}void display(uchar number,uchar second) {P2 = 0x01;P0 = table[second];delay(1);P2 = 0x02;P0 = table[number];delay(1);P2 = 0x04;P0 = table[a[0]];delay(1);P2 = 0x08;P0 = table[a[1]];delay(1);P2 = 0x10;P0 = table[a[2]];delay(1);P2 = 0x20;P0 = table[a[3]];delay(1);P2 = 0x40;P0 = table[a[4]];delay(1);P2 = 0x80;P0 = table[a[5]];delay(1);}void start_keyscan(){void fengling();while(start == 0){key7=0;display(number_display,second);if(start == 1){key7=1;action = 1;TR0 = 1;}}}uchar key_scan8(){if(key1 == 0){delay(8);if(key1 == 0){number = 1;number_display = number;} }if(key2 == 0){delay(8);if(key2 == 0){number = 2;number_display = number;}}if(key3 == 0){delay(8);if(key3 == 0){number = 3;number_display = number;}}if(key4 == 0){delay(8);if(key4 == 0){number = 4;number_display = number;}}if(key5 == 0){delay(8);if(key5 == 0){number = 5;number_display = number;}}if(key6 == 0){delay(8);if(key6 == 0){number = 6;number_display = number;}}if(number_display != 0){return number_display;}else{return 0;}}void reset_keyscan(){if(reset == 0){delay(8);if(reset == 0){number_display = 0;second=10;}}}void main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=0;P2=0x00;while(1){reset_keyscan();start_keyscan();if(jia==0&&a[number-1]<9){delay(10);while(jia==0)display(number_display,second);a[number-1]=a[number-1]+1;}if(jian==0&&a[number-1]>0){delay(10);while (jian==0) display(number_display,second);a[number-1]=a[number-1]-1;}while(action){while(!key_scan8()){display(number_display,second);if(second == 0){second = 10;break;}}TR0 = 0;key7=0;delay(80); display(number_display,second);key7=1;action = 0;break;}display(number_display,second);}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;timer0_count ++;if(timer0_count == 20){second --;timer0_count = 0;if(second==0){key7=0;delay(60);key7=1;}}}。
6位抢答器课程设计一、课程目标知识目标:1. 学生能够理解抢答器的原理及其在信息技术中的应用。
2. 学生能够掌握抢答器的电路连接和编程基础。
3. 学生能够描述抢答器的功能,并运用其进行简单的信息处理。
技能目标:1. 学生能够运用所学知识,独立完成抢答器的组装和编程。
2. 学生能够在小组合作中有效沟通,共同解决抢答器使用过程中遇到的问题。
3. 学生能够运用抢答器进行实际操作,提高动手实践能力和问题解决能力。
情感态度价值观目标:1. 学生对信息技术产生浓厚的兴趣,增强学习动力。
2. 学生在小组合作中培养团队精神和沟通能力,树立合作共赢的意识。
3. 学生通过抢答器课程的学习,认识到科技改变生活的重要性,培养创新精神和实践能力。
课程性质分析:本课程为信息技术课程,以实践操作为主,理论讲解为辅。
通过抢答器这一趣味性项目,提高学生对信息技术的学习兴趣。
学生特点分析:六年级学生具有一定的信息技术基础,对新鲜事物充满好奇,动手实践能力强,但需引导他们进行团队合作和问题解决。
教学要求:1. 注重理论与实践相结合,提高学生的动手实践能力。
2. 创设有趣的教学情境,激发学生的学习兴趣。
3. 引导学生进行小组合作,培养团队精神和沟通能力。
4. 注重过程评价,关注学生的个体差异,提高教学质量。
二、教学内容本课程依据课程目标,结合教材内容,制定以下教学内容:1. 抢答器原理介绍:介绍抢答器的电路原理、功能及应用场景,让学生了解抢答器在信息技术领域的作用。
2. 抢答器电路连接:讲解抢答器的电路连接方法,指导学生动手实践,掌握电路连接技巧。
3. 抢答器编程基础:介绍抢答器的编程语言和编程方法,引导学生学习编程思维,培养编程兴趣。
4. 抢答器组装与调试:制定详细的组装步骤,让学生分组进行抢答器的组装、调试,培养动手实践能力和团队协作精神。
5. 抢答器应用实例:分析抢答器在实际生活中的应用案例,让学生认识到信息技术的实用性。
教学内容安排及进度:第一课时:抢答器原理介绍,占总课时20%。
一课程设计题目六人抢答器二实现的功能1、抢答器同时供六名选手比赛,抢答按钮分别为P1,P2,P3,P4,P5,P62、test状态检测抢答装置是否正常。
3、在start状态下,最快按下按钮的选手抢答成功,且绿灯亮,至本轮结束。
4、在读题时,即prepare状态,按下抢答键视为犯规,红灯亮,取消本轮抢答机会。
5、主持人可以设置抢答时间,当系统鉴定出第一抢答后,自动开始倒计时,倒计时完后发出响声。
若在规定时间内回答,由主持人按使能开关,停止倒计时。
6、抢答器具有预置分和手动加分功能。
7、系统能显示分数和时间。
三系统结构框图P1P2P3P4P5P6控制三程序流程1、抢答模块2、时间模块3、记分模块4、显示模块四模块连接五程序设计1.程序代码:抢答模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity qiangdasix isport(test:in std_logic; --测试prepare:in std_logic; --读题start:in std_logic; --开始抢答p1:in std_logic; --抢答按钮p2:in std_logic;p3:in std_logic;p4:in std_logic;p5:in std_logic;p6:in std_logic;result:out std_logic_vector(3 downto 0); --抢答结果led1_green:out std_logic; --绿灯,抢答成功led2_green:out std_logic;led3_green:out std_logic;led4_green:out std_logic;led5_green:out std_logic;led6_green:out std_logic;led1_red:out std_logic; --红灯犯规led2_red:out std_logic;led3_red:out std_logic;led4_red:out std_logic;led5_red:out std_logic;led6_red:out std_logic;over:out std_logic); --抢答结束end qiangdasix;architecture behav of qiangdasix issignal stop:std_logic:='0';signal tled1_green:std_logic:='0'; --用于测试signal tled2_green:std_logic:='0';signal tled3_green:std_logic:='0';signal tled4_green:std_logic:='0';signal tled5_green:std_logic:='0';signal tled6_green:std_logic:='0';signal qled1_green:std_logic:='0';signal qled2_green:std_logic:='0'; --用于抢答signal qled3_green:std_logic:='0';signal qled4_green:std_logic:='0';signal qled5_green:std_logic:='0';signal qled6_green:std_logic:='0';signal qualify1:std_logic:='0'; --犯规标志signal qualify2:std_logic:='0';signal qualify3:std_logic:='0';signal qualify4:std_logic:='0';signal qualify5:std_logic:='0';signal qualify6:std_logic:='0';signal sell:std_logic_vector(5 downto 0);begincheck:process(test,start,prepare,p1,p2,p3,p4,p5,p6)beginif prepare='1'then --测试数据初始化tled1_green<='0';tled2_green<='0';tled3_green<='0';tled4_green<='0'; tled5_green<='0';tled6_green<='0';elsif test='1'and start='0'then --测试if p1='1' then tled1_green<='1';end if; --检查抢答按键if p2='1' then tled2_green<='1';end if;if p3='1' then tled3_green<='1';end if;if p4='1' then tled4_green<='1';end if;if p5='1' then tled5_green<='1';end if;if p6='1' then tled6_green<='1';end if;end if;end process check;qiang:process(start,test,prepare,p1,p2,p3,stop,qualify1,qualify2,qualify3) beginif(prepare='1')thenstop<='0';qualify1<='0';qualify2<='0';qualify3<='0';qualify4<='0'; qualify5<='0';qualify6<='0';qled1_green<='0';qled2_green<='0';qled3_green<='0';qled4_green<='0';qled5_green<='0';qled6_green<='0'; led1_red<='0';led2_red<='0';led3_red<='0';led4_red<='0';led5_red<='0';led6_red<='0'; --数据初始化elsif(start='0'and test='0')then --还未开始抢答,按下按键犯规if(p1='1')then qualify1<='1';led1_red<='1';end if;if(p2='1')then qualify2<='1';led2_red<='1';end if;if(p3='1')then qualify3<='1';led3_red<='1';end if;if(p4='1')then qualify4<='1';led4_red<='1';end if;if(p5='1')then qualify5<='1';led5_red<='1';end if;if(p6='1')then qualify6<='1';led6_red<='1';end if;elsif(stop='0'and test='0'and start='1') the--开始抢答,没犯规且按--下按键,抢答成功if (p1='1'and qualify1='0') then qled1_green<='1';end if;if (p2='1'and qualify2='0') then qled2_green<='1';end if;if (p3='1'and qualify3='0') then qled3_green<='1';end if;if (p4='1'and qualify4='0') then qled4_green<='1';end if;if (p5='1'and qualify5='0') then qled5_green<='1';end if;if (p6='1'and qualify6='0') then qled6_green<='1';end if;if(qled1_green<='0'and qled2_green<='0'and qled3_green<='0'and qled4_green<='0'and qled5_green<='0'and qled6_green<='0')thenstop<='0'; --还没有人抢答成功,不关进程else stop<='1'; --有人抢答成功,不继续扫描按键end if;else null;end if;over<=stop;end process qiang;evaluate:process(tled1_green,tled2_green,tled3_green,tled4_green,tled5_ green,tled6_green,qled1_green,qled2_green,qled3_green,qled4_green,qle d5_green,qled6_green) --绿灯显示beginled1_green<=tled1_green or qled1_green;led2_green<=tled2_green or qled2_green;led3_green<=tled3_green or qled3_green;led4_green<=tled4_green or qled4_green;led5_green<=tled5_green or qled5_green;led6_green<=tled6_green or qled6_green;sell<=qled1_green&qled2_green&qled3_green&qled4_green&qled5_green&qled6_green;case sell is --输出抢答结果,用于加分模块when"100000"=>result<="0001";when"010000"=>result<="0010";when"001000"=>result<="0011";when"100100"=>result<="0100";when"000010"=>result<="0101";when"000001"=>result<="0110";when others=> result<="0000";end case;end process evaluate;end behav;时间模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity tim isport(settime:in std_logic; --时间设置load:in std_logic; --读入预置数en:in std_logic; --使能端clk:in std_logic; --时钟信号bell:out std_logic; --时间到,蜂鸣器响q1,q0:out std_logic_vector(3 downto 0));--当前时间输出,用于显示end tim;architecture art of tim issignal clk1:bit;signal q:std_logic_vector(7 downto 0);signal tim1:std_logic_vector(3 downto 0);signal tim0:std_logic_vector(3 downto 0);signal time1:std_logic_vector(3 downto 0);signal stop:std_logic;begindividefreq:process(clk)beginif(clk'event and clk='1') then --该进程用于产生秒信号q<=q+1;if q="11111010" thenq<="00000000";clk1<=not clk1;else null;end if;end if;end process dividefreq;set:process(settime)beginif(settime'event and settime='1') then --时间设置if time1="1001"then time1<="0000";else time1<=time1+'1';end if;end if;end process set;timm:process(clk1,load,en,stop)beginif (load='1')then --读入预置时间tim1<=time1;tim0<="0000";stop<='0';bell<='0';elsif(clk1'event and clk1='1')thenif stop='0'and en='1' then --开始计时if tim0="0000"and tim1="0000"then bell<='1';stop<='1';elseif(tim0="0000")thentim0<="1001";tim1<=tim1-'1';else tim0<=tim0-'1';end if;end if;end if;end if;end process timm;q1<=tim1;q0<=tim0;end art;计分模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity score isport(set:in std_logic; --分数初始化add:in std_logic; --加分chos:in std_logic_vector(3 downto 0); --选择加分的选手a1,a2,a0:out std_logic_vector(3 downto 0);--寄存分数值b1,b2,b0:out std_logic_vector(3 downto 0);c1,c2,c0:out std_logic_vector(3 downto 0);d1,d2,d0:out std_logic_vector(3 downto 0);e1,e2,e0:out std_logic_vector(3 downto 0);f1,f2,f0:out std_logic_vector(3 downto 0));end score;architecture art of score issignal points_a2,points_a1:std_logic_vector(3 downto 0);signal points_b2,points_b1:std_logic_vector(3 downto 0);signal points_c2,points_c1:std_logic_vector(3 downto 0);signal points_d2,points_d1:std_logic_vector(3 downto 0);signal points_e2,points_e1:std_logic_vector(3 downto 0);signal points_f2,points_f1:std_logic_vector(3 downto 0);beginprocess(set,add,chos)beginif set='1'then --分数初始化points_a2<="0001";points_a1<="0000";points_b2<="0001";points_b1<="0000";points_c2<="0001";points_c1<="0000";points_d2<="0001";points_d1<="0000";points_e2<="0001";points_e1<="0000";points_f2<="0001";points_f1<="0000";elseif(add'event and add='1')then --对选中的选手加分if (chos="0001")thenif points_a1="1001"then points_a1<="0000";if points_a2="1001"then points_a2<="1010";else points_a2<=points_a2+1;end if;else points_a1<=points_a1+'1';end if;elsif chos="0010"thenif points_b1="1001"then points_b1<="0000";if points_b2="1001"then points_b2<="1010";else points_b2<=points_b2+1;end if;else points_b1<=points_b1+'1';end if;elsif chos="0011"thenif points_c1="1001"then points_c1<="0000";if points_c2<="1001"then points_c2<="1010";else points_c2<=points_c2+1;end if;else points_c1<=points_c1+'1';end if;elsif chos="0100"thenif points_d1="1001"then points_d1<="0000";if points_d1="1001"then points_d2<="1010";else points_d2<=points_d2+1;end if;else points_d1<=points_d1+'1';end if;elsif chos="0101"thenif points_e1="1001"then points_e1<="0000";if points_e2="1001"then points_e2<="1010";else points_e2<=points_e2+1;end if;else points_e1<=points_e1+'1';end if;elsif chos="0110"thenif points_f1="1001"then points_f1<="0000";if points_f2="1001"then points_f2<="1010";else points_f2<=points_f2+1;end if;else points_f1<=points_f1+'1';end if;end if;end if;end if;end process;a2<=points_a2;a1<=points_a1;a0<="0000"; --用于显示b2<=points_b2;b1<=points_b1;b0<="0000";c2<=points_c2;c1<=points_c1;c0<="0000";d2<=points_d2;d1<=points_d1;d0<="0000";e2<=points_e2;e1<=points_e1;e0<="0000";f2<=points_f2;f1<=points_f1;f0<="0000";end art;显示模块:library ieee;use ieee.std_logic_1164.all;entity display is --用动态扫描法,扫描时间,分数port(clk:in std_logic; --共14位数q1,q0:in std_logic_vector(3 downto 0);--时间a1,a2:in std_logic_vector(3 downto 0);--各选手成绩b1,b2:in std_logic_vector(3 downto 0);c1,c2:in std_logic_vector(3 downto 0);d1,d2:in std_logic_vector(3 downto 0);e1,e2:in std_logic_vector(3 downto 0);f1,f2:in std_logic_vector(3 downto 0);lsd:out bit_vector(13 downto 0);bcd:out std_logic_vector(3 downto 0));end display;architecture behav of display istype dis_p is array(0 to 13)of std_logic_vector(3 downto 0);signal dis_p1:dis_p;signal cnt: integer range 0 to 14;beginprocess(clk,a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,q1,q0)begin --把要显示的数据装入数组,便于循环dis_p1(0)<=q1;dis_p1(1)<=q0;dis_p1(2)<=a2;dis_p1(3)<=a1;dis_p1(4)< =b2;dis_p1(5)<=b1;dis_p1(6)<=c2;dis_p1(7)<=c1;dis_p1(8)<=d2;dis_p1(9)<=d1;dis_p1(10)<=e2;dis_p1(11)<=e1;dis_p1(1 2)<=f2;dis_p1(13)<=f1;if rising_edge(clk)thencase cnt iswhen 0=>lsd<="10000000000000";when 1=>lsd<="01000000000000";when 2=>lsd<="00100000000000";when 3=>lsd<="00010000000000";when 4=>lsd<="00001000000000";when 5=>lsd<="00000100000000";when 6=>lsd<="00000010000000";when 7=>lsd<="00000001000000";when 8=>lsd<="00000000100000";when 9=>lsd<="00000000010000";when 10=>lsd<="00000000001000";when 11=>lsd<="00000000000100";when 12=>lsd<="00000000000010";when 13=>lsd<="00000000000001";when others=> null;end case;bcd<=dis_p1(cnt);cnt<=cnt+1;if(cnt=13) then cnt<=0; end if; end if;end process;end behav;3.波形仿真:①抢答部分的仿真,无人犯规②抢答部分的仿真,有人犯规③计时模块仿真(设置30秒)④计分模块仿真(初始100分,选手2加10分,选手3加20分,选手4加40分,选手5加10分)⑤显示模块(分别显示q0,q1,a2·····e2,e1,f1,f2的值)。
6人抢答器课程设计一、课程目标知识目标:1. 学生能理解抢答器的原理,掌握基本电路的连接和使用方法。
2. 学生能运用所学的电子技术知识,设计并制作一个简易的6人抢答器。
3. 学生了解抢答器在现实生活中的应用,认识到电子技术在实际问题解决中的作用。
技能目标:1. 学生通过实践操作,提高动手能力,学会使用基本电子元器件和工具。
2. 学生学会分析问题,设计解决方案,培养创新意识和团队合作精神。
3. 学生掌握基本的编程知识,能够为抢答器编写简单的控制程序。
情感态度价值观目标:1. 学生对电子技术产生兴趣,激发学习热情,培养积极探索的精神。
2. 学生在团队合作中,学会尊重他人,提高沟通能力,培养团队协作精神。
3. 学生认识到科技改变生活,增强社会责任感,树立为社会发展贡献自己的力量的信念。
课程性质:本课程为电子技术实践课程,结合课本知识,注重培养学生的动手能力和创新精神。
学生特点:六年级学生具备一定的电子技术基础,好奇心强,喜欢动手实践,善于合作。
教学要求:教师应关注学生的个体差异,提供有针对性的指导,鼓励学生创新设计,注重培养学生的综合素质。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容本课程教学内容主要包括以下三个方面:1. 电子技术基础知识:- 电路的基本概念、原理和电路图的识别。
- 常用电子元器件的识别、性能和选用。
- 电路的连接方法和测试技巧。
2. 抢答器设计与制作:- 抢答器的工作原理和电路设计。
- 选用合适的电子元器件,搭建抢答器电路。
- 编写控制程序,实现抢答器的功能。
3. 实践操作与团队协作:- 分组进行实践操作,动手制作抢答器。
- 各小组展示作品,分享制作过程和经验。
- 评价与反馈,总结课程收获。
教学内容安排与进度:第一课时:电子技术基础知识学习,介绍电路原理和元器件识别。
第二课时:抢答器工作原理讲解,进行电路设计和元器件选用。
第三课时:分组实践,搭建抢答器电路,编写控制程序。
目录第1章概述 (1)1.1前言 (1)第2章总体方案设计 (3)2.1系统设计方案 (3)2.2系统设计框图 (3)第3章单元电路设计 (4)3.1总电路的设计 (4)3.2秒脉冲产生电路设计 (5)3.3抢答电路设计 (5)3.4定时电路设计 (7)3.5控制电路设计 (7)3.6报警电路设计 (8)3.7译码、显示电路设计 (9)第4章电路的仿真 (10)总结 (14)参考文献 (15)附录元器件清单 (16)第1章概述1.1前言抢答器在知识竞赛、文体娱乐活动(抢答赛活动)中,能准确、公正、直观地判断出抢答者的座位号。
传统抢答器只是大概判断出抢答成功或犯规选手台号,无法显示出每个选手的抢答时间。
而今抢答器可以通过数据来说明裁决结果的准确性、公平性。
使比赛大大增加了娱乐性的同时,也更加公平、公正。
本课程设计主要设计一个六人抢答器电路。
此抢答器需要满足在抢答过程中的实际功能。
首先我们必须了解一下在一般比赛中的抢答规则。
在主持说开始抢答后(题目已公布),选手开始抢答,第一名抢答的选手有效,其余的在抢答无效,在回答对问题后给于相应的加分。
如在规定的时间后没有人抢答,则需要说抢答超时,即在抢答无效。
若主持人没有说抢答开始,就开始抢答则属于犯规行为,抢答无效,并且一般还要给于提醒或扣分处罚。
所以我们将电路的功能设计如下:在主持人说开始抢答后,即主持人打开抢答开关后,如果有选手按键,则显示选手号码,并且锁存,当然要保证,在此之后其他选手再次按键抢答器则不再显示选手号码,即在第一名选手按键后的其他选手再按键无效。
若在主持人说开始抢答后在一定的时间内没有人按键抢答则要有报警,以示时间超时,此时主持人可以将抢答机会交给现场的其他观众。
而在主持人没有说抢答开始,有人按键则电路报警,同时显示犯规选手的号码。
当主持人将开关由开始抢答打到关闭抢答时,要将电路复位。
在本次课程设计中要求如下:1、具有抢答开始后20秒倒计时,20秒倒计时后无人抢答显示超时,并报警;2、能显示超前抢答台号并显示犯规报警;3、系统复位后进入抢答状态,当有一路抢答键按下,该路抢答信号将其余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。
目录第一部分设计任务与要求---------------------------------------------1第二部分总体框图------------------------------------------------------2第三部分选择器件------------------------------------------------------43.1、元器件清单-----------------------------------------------------------------43.2、器件的相关介绍(1)四2输入与门74LS08、与非门74LS00-------------------------------5(2)四2输入或门74LS32----------------------------------------------------6(3) 8-3线优先编码器74LS148------------------------------------------7(4)同步十进制可逆计数器74LS192-------------------------------------9(5)四R-S触发器74LS279-------------------------------------------------10(6) 555定时器---------------------------------------------------------------11(7)四线七段数码显示管----------------------------------------------------12第四部分功能模块------------------------------------------------------13 4.1 抢答显示电路----------------------------------------------------------13 4.2 定时电路----------------------------------------------------------------15 4.4 报警电路----------------------------------------------------------------17 第五部分总体设计电路图----------------------------------------------18 第六部分课程设计心得体会---------------------------------------------22 参考文献------------------------------------------------------------------23六路智能抢答器一、设计任务与要求(分别为S1~S6)控制,并设置一个系统清零和抢答控制开关S,该开关由主持人控制。
六人抢答器课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握六人抢答器的基本原理和操作方法;技能目标要求学生能够独立完成六人抢答器的组装和调试,并运用编程语言实现基本功能;情感态度价值观目标要求学生培养团队合作意识,提高创新能力和解决问题的能力。
通过对六人抢答器的学习,使学生了解并掌握电子元器件的基本知识和电路原理,培养学生动手操作和实践能力,激发学生对科学和技术的兴趣和好奇心,培养学生的创新精神和团队合作意识。
二、教学内容教学内容主要包括六人抢答器的基本原理、电路组成、组装与调试、编程实现等。
具体包括以下几个部分:1.六人抢答器的基本原理:介绍六人抢答器的工作原理和基本功能,使学生了解电子元器件的特性及其在电路中的应用。
2.电路组成:讲解六人抢答器的电路组成,包括电源、信号放大器、比较器、输出电路等,使学生掌握电路图的阅读和分析方法。
3.组装与调试:指导学生动手组装六人抢答器,并进行调试,使学生熟悉电子设备的组装过程,提高动手能力。
4.编程实现:教授学生使用编程语言实现六人抢答器的基本功能,使学生掌握编程的基本技巧,提高创新能力和解决问题的能力。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法。
通过教师讲解,使学生了解六人抢答器的基本原理和电路组成;通过讨论法,激发学生思考和探讨问题,培养学生的创新思维;通过案例分析法,使学生学会分析实际问题,提高解决问题的能力;通过实验法,培养学生动手操作和实践能力,巩固所学知识。
四、教学资源教学资源包括教材、参考书、多媒体资料和实验设备等。
教材和参考书用于为学生提供理论知识和参考资料;多媒体资料用于辅助教学,使学生更直观地了解六人抢答器的工作原理和操作方法;实验设备用于支持学生的动手实践,培养学生的实践能力。
五、教学评估教学评估是检验学生学习成果的重要手段。
本课程的评估方式包括平时表现、作业、考试等。
抢答器课程设计原文一、设计要求及目的(1)设计一个可供6人进行的抢答器。
(2)系统设置复位按钮,按动后,重新开始抢答。
(3)抢答器开始时数码管显示序号0,选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
抢答后显示优先抢答者序号,同时发出音响。
,并且不出现其他抢答者的序号。
(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为60秒,当主持人启动“开始”开关后,定时器开始减计时,同时音乐盒有短暂的声响。
(5)设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间。
并保持到主持人按复位键。
(6)当设定的时间到,而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。
定时器上显示00。
二、设计电路方框图:......三、电路组成本抢答器的电路主要有四部分组成:数字抢答电路、时序控制电路、报警电路以及可预置时间的定时电路。
其中数字抢答部分有一个CD4511译码器和LED数码管显示器组成,可以将六位抢答者的按钮通过CD4511译码驱动LED数码管显示器显示出他们最先抢答者的序号。
而时序控制电路的功能是当参赛选手按动抢答器时,使扬声器发声,这时抢答电路和定时电路停止工作。
而且设定的时间60秒到达后若无人抢答,则报警电路工作。
报警电路工作的条件是当设定时间到达后或者有人抢答时,报警电路被输入一个高电平,这时此电路工作。
可预置时间的定时电路是靠74LS121工作的。
以下是抢答电路的组成以及各部分功能(1)抢答电路1.电路组成电路如下图3.1所示,该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。
......目录目录:第一部分:设计的要求及目的第二部分:系统方框图第三部分:电路组成及各部分选定方案、功能及计算(1)抢答电路: 1、抢答电路功能2、方案选定(2)报警电路(3)定时电路 1、电路功能介绍2、电路选定方案分析及计算(4)时序控制电路 1、电路组成分析2、电路功能第四部分:器件说明第五部分:参考文献第六部分:设计总结第六部分:总体电路图(用PROTEL99制作)参考资料康华光《电子技术基础—数字部分》高等教育出版社董子舟、段辉娟《电子技术》机械工业出版社2002年,第7期《电子报》类别:电子制作12002年,第50期《电子报》类别:电子产品与器件张惠敏、肖耀南《数字电子技术》化学工业出版社江国强《现代数字逻辑电路》电子工业出版社简单介绍本抢答器的电路主要有四部分组成:数字抢答电路、时序控制电路、报警电路以及可预置时间的定时电路。
目录一、六路抢答器设计任务及要求 (1)1.1设计任务 (1)1.2设计要求 (1)1.2.1系统设计要求 (1)1.2.2设计目标………………………………………………………………二、系统组成及工作原理 (2)2.1方案选择 (2)2.1.1 利用译码芯片 (2)2.1.2 利用单片机 (2)2.2原理分析 (3)2.3设计方案 (3)三、抢答器硬件系统设计 (4)3.1时钟电路和复位电路 (4)3.1.1时钟电路 (5)3.1.2复位电路 (5)3.2键盘电路 (6)3.3 显示电路 (7)3.3.1 显示驱动电路 (7)3.3.2显示报警电路 (8)3.4芯片介绍 (9)3.4.1集成芯片AT89S52 (9)3.5共阳数码管介绍 (11)四、软件系统设计 (12)4.1 设计思想 (12)4.2 资源分配 (12)4.3 程序设计流程图 (13)4.3.1 定时器中断服务程序流程 (13)4.3.2抢答违规流程图 (13)4.3.3 显示程序流程 (14)4.3.4主程序流程图 (15)五、调试及使用说明 (16)5.1实物调试 (16)5.2 使用说明 (16)六、设计心得体会及教学建议 (17)6.1 设计体会 (18)6.2教学建议 (18)致谢 (19)参考文献 (20)附录Ⅰ电路原理图 (21)附录Ⅱ PCB元器件布局图 (22)附录Ⅲ PCB顶层图 (23)附录Ⅳ PCB底层图 (24)附录Ⅴ元器件清单 (25)附录Ⅵ程序清单 (27)一、六路抢答器设计任务及要求1.1设计任务设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别是1、2、3、4、5、6、各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是S0、S1、S2、S3、S4、S5。
要求一人一组在一周时间内完成实物并打印《单片机技术》课程设计说明书一份。
1.2设计要求1.2.1系统设计要求:(1)该抢答器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态;(2)主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;(3)主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;(4)正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,数码管显示违规台号;(5)在30S,内选手提前答完,由主持人按下停止,并显示答题时间,主持人按复位,等待下一轮抢答:(6)各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位按钮;1.2.2设计目标:(1)通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机技术》中所学的理论知识和实验技能;(2)熟悉电路中所用到的各集成芯片的管脚及其功能;(3)进行电路的装接、调试,直到电路能达到规定的设计要求;(4)掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力告,以后从事电子电路设计、研发电子产品打下良好的基础。
题目: 六人抢答器一、初始条件QuartusⅡ软件微机实验箱二、要求完成的主要任务1、抢答台数为6,具有抢答开始后20秒倒计时,20秒倒计时后六人抢答显示超时,并报警。
2、能显示超前抢答台号并显示犯规报警。
3、系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。
三、时间安排作课程设计任务布置、选题、查阅资料第1天设计软件编程和仿真,验证设计的可行性和正确性第2-8天设计的硬件调试第9-10天机房检查设计成果,提交设计说明书及答辩第11天指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)ABSTRACT ................................................................................................................. I I1 绪论 (1)2 设计内容及要求 (2)2.1设计的目的及主要任务 (2)2.1.1设计的目的 (2)2.1.2 设计任务及主要技术指标 (2)2.2设计思想 (3)3 设计原理及单元模块设计 (3)3.1设计原理及方法 (3)3.2按键模块设计 (4)3.3抢答控制模块 (5)3.4犯规控制模块 (6)3.5倒计时模块 (7)3.6报警模块 (8)3.7数码显示模块 (9)3.8顶层电路的设计 (10)4电路的仿真及分析 (11)5 硬件调试 (12)6 心得体会 (13)参考文献 (14)附录一 (15)附录二 (16)附录三 (17)摘要近年来随着科技的飞速发展,QuartusⅡ的应用正在不断地走向深入。
本文介绍基于QuartusⅡ,并用VHDL语言设计来完成六人抢答器的方法。
大体思想是:利用VHDL语言设计出按键选择模块,倒计时模块,抢答控制模块,犯规控制模块,报警模块及数码显示模块等所需要的元件,将这些元件进行例化后,进行一定的连接形成六人抢答器系统。
题目如下:六人抢答器,以拨动开关K0~K5中的某个开关为ON作为抢答按键,无人抢答时,6只数码管循环轮流显示1~6跑马,谁先抢答,数码管停止跑马,6个数码管同时亮谁的编号,气候再有按键按下,系统不予回应,知道此拨为OFF,恢复1~6跑马开始下一轮抢答。
#include<reg51.h>#define uchar unsigned char#define uint unsigned intvoid delay(uchar x);void Js_Scan1(void);void Js_Scan2(void);int flag=0,i;int code LED_Num[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d};void main(){EA=1;ET0=1;EX0=1;while(1){Js_Scan1();flag=0;}}void key() interrupt 0 using 0{int x;x=P2;if(x==0xfe&&flag==0){i=0;Js_Scan2();flag=1;}if(x==0xfd&&flag==0){i=1;Js_Scan2();flag=1;}if(x==0xfb&&flag==0){i=2;Js_Scan2();flag=1;}if(x==0xf7&&flag==0){i=3;Js_Scan2();flag=1;}if(x==0xef&&flag==0){i=4;Js_Scan2();flag=1;}if(x==0xdf&&flag==0){i=5;Js_Scan2();flag=1;}}void Js_Scan1() //数码管扫描函数{P1=0xfe;P0=LED_Num[0];delay(100);P1=0xfd;P0=LED_Num[1];delay(100);P1=0xfb;P0=LED_Num[2];delay(100);P1=0xf7;P0=LED_Num[3];delay(100);P1=0xef;P0=LED_Num[4];delay(100);P1=0xdf;P0=LED_Num[5];delay(100);}void Js_Scan2() //数码管扫描函数{uchar j; //定义j数据类型for(j=0;j<5;j++) //建立循环{P1=0x00;P0=LED_Num[i];delay(1);}}void delay(uchar x) //延时函数,防止数码管显示不稳定{uchar k;while(x--)for(k=0;k<125;k++);}基本功能:(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S7表示。
(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在DPY_7-SEG七段数码管上显示选手号码。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
2.扩展功能:(1)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
当主持人启动"开始"键后,定时器进行减计时。
(2)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
在这段(3)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
三、实现的原理与电路1.数字抢答器总体方框图如图1所示为总体方框图。
其工作原理为:接通电源后,主持人将开关拨到"清零"状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置;开始"状态,宣布"开始"抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"清除"和"开始"状态开关。
设计一个智力竞赛抢答器可同时供8人参加比赛,他们的编号分别是0、1、2、3、4、5、6、7,各用一个抢答按钮举报|2012-06-14 23:06 提问者悬赏:20分|nicecaichamo|分类:工程技术科学|浏览742次按钮的编号与选手的编号分别是S0、相对应,S1、S2、S3、S4、S5、S6、S7。
给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答开始。
抢答器具有数据锁存和显示功能。
抢答开始后,若有某一参赛者首先按下抢答开关时,编号立即锁存,并在LED数码管上显示出选手的编号,同时扬声器给出音响提示。
此外,要封锁输入电路,禁止其他选手抢答,优先抢答选手的编号一直保持到主持人将系统清零为止。
抢答器具有定时抢答功能,且一次抢答的时间可以由主持人设定(如30s)。
当主持人启动开始按钮后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间0.5s左右。
电路具有回答问题时间控制功能。
要求回答问题的时间小于等于100秒(显示为0~99),时间显示采用倒计时方式。
当达到限定时间时,发出声响以示警告。
如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。
第一章抢答器设计功能分析1.1 数字抢答器的概述对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。
抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。
选手们都站在同一个起跑线上,体现了公平公正的原则。
1.2 设计任务与要求基本要求:1. 给主持人设置一个开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始。
2. 抢答器具有数据锁存和显示的功能。
抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。
此外,要封锁输入电路,禁止其他选手抢答。
发挥部分:1. 抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。
当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间0.5秒左右。
2. 参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。
3. 如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。
4. 选手如果在主持人按开始键之前违规抢答,系统报警,LED显示违规选手号码和FF,直到主持人按下停止键。
第二章抢答器方案论证抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,如优先编码器,锁存器,555定时器译码器等,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。
于是,我想到了用单片机实现。
单片机体积小价格低,应用方便,稳定可靠。
单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。
由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”入单片机内。
在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。
如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。
在老师的指导下我选择了常用的单片机仿真软件proteus6.9以及keil 进行仿真。
第三章硬件电路设计3.1总体设计根据抢答器的基本功能,可以设计出如下的单片机外围电路:图3-1 总体设计如图3-1,P3.0为开始抢答,P3.2为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器(用绿灯代替)输出为P3.6口。
P3.2为时间加1调整,P3.3为时间减1调整。
3.2 外部振荡电路图3-2 外部振荡电路一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
3.3 复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:图3-3 复位电路在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。
软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.1.4 显示电路的设计显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。
图3-4 阴极七段数码管4.1.5 按钮输入电路的设计抢答器的输入按钮使用常开开关,图3-5 抢答按键这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”现象就可以了。
这里采用最常用的方法即延时法,其的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
3.1.6 发声这里能利用程序来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。
第四章系统软件设计4.1 程序系统结构图硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。
由功能分析得到以下的软件结构图:图4-1 软件系统结构图4.2 程序流程图整个程序主要由定时器T0、定时器T1、外部中断0和主程序构成。