1、硬件设计实例作业 16 路抢答器 第 页 共 页 目 录 1 需求分析 1 1.1 项目背景 1 1.2 项目分析 1 1.3 设计方案及要求 2 1.4 所需环境 2 2 总体设计 2 3 详细设计 3 3.1 独立键盘 3 3.2 开始和复位键 4 3.3 喇叭驱动电路 4 3.4 LED显示 5 3.5 LED数码管 6 3.6 程序流程设计 6 3.7 代码 块 (附注释) 7 3.7.1 变量定义 7 3.7.2 延时函数 7 3.7.3 按键检测及输出控制函数 7 3.7.4 主函数 9 3.7.5 数码管显示函数 9 4 仿真结果分析 10 4.1 抢答犯规 10 硬件设计实例作
2、业 16 路抢答器 第 页 共 页 4.2 抢答成功 11 5 心 得体会 12 附录 源程序代码 13 硬件设计实例作业 16 路抢答器 第 1 页 共 15 页 1 需求分析 1 1 项目背景 二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称 PC 机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常 都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类
3、头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词 “智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。 在知识竞赛中,特别是做抢答题时,在抢答过程 中,为了更确切的知道哪一组或哪一位选手先抢答到题,必须要有一个系统来完成这个任务。若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪
4、一个选手)先抢答到题的。利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。 对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的 知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。 1 2 项目分析 本系统采用单片机作为整个控制核心。控制系统的四个模块为:显示模块、存储模块、语音模块、抢答开关模块。该系统通过抢答电路键盘按键输入抢答信号;
5、利用一个数码管来完成显示功能;用按键来让选手进行抢答,在数码管上显示哪一组先答题的,从而实现整个抢答过程。在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个硬件设计实例作业 16 路抢答器 第 2 页 共 15 页 系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机 系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。 1 3 设计方案及要求 设计一个基于 AT89C51 单片机的 16路抢答器 。 设计要求: ( 1) 设计一个竞赛抢答器,可同时供十六名选手或代表队参加比赛; (
6、 2)给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始; ( 3) 抢答器具有数据锁存和显示功能 ,当某一路抢答成功时,放光二极管立即点亮,并在数码管上显示该路的号数,直到主持人按复位开关为止,其他人再抢答无效; 1 4 所需环境 Proteus 仿真软件 Keil uVision4 开发环境 2 总体设计 抢答器的工作原理是采用单片机最小系统,用查询式键盘进行抢答。采用动态显示组号。主持人按下开始抢答键才可以抢答。主持人没有按下开始抢答按纽( P3.2),有人抢答则抢答违规, 只有 LED 灯亮,不会 显示组号 。 主持人按下开始抢答按纽( P3.2),蜂
7、鸣响声提示。单片机最小系统、抢答按键模块(四位并行数码显示、 4*4矩阵式键盘)、显示模块、抢答开关模块、蜂鸣器音频输出模块。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理, 输出控制信号,单片机控制的智能抢答器。 硬件设计实例作业 16 路抢答器 第 3 页 共 15 页 图 2-1 总体硬件电路设计 图 3 详细 设计 3 1 独立键盘 单片机常用的键盘有全编码键盘和非编码键盘两种。全编码键盘能有硬件逻辑自动提供与被按键对应的编码,如 BCD码键盘、 ASCII码键盘等,价格较贵,一般的单片机应用系统较少采用;非编码键盘分为独立式键盘和矩阵式键盘,硬件上只是提供通、断两种状态
8、,其他工作都靠软件完成,经济实用,目前单片机应用系统中多采用这种方法。在智力抢答器设计中,要求有 16 个代表队参加抢答,每个代表队一个抢答按钮,就需要 16 个按 钮,而选手抢答器按钮就是用独立式键盘或矩阵式键盘来完成的。独立式键盘电路要求一个端口连接一个按键,硬件电路简单但浪费成本 硬件设计实例作业 16 路抢答器 第 4 页 共 15 页 图 3-1 独立键盘总体电路设计 图 3 2 开始和复位键 主持人按开始键后才可以开始抢答,否则犯规,不显示组号。每次抢答结束后都需要按复位键才可以开始再次抢答。 图 3-2 开始和复位键电路设计 图 3 3 喇叭驱动电路 蜂鸣器是一种电子电路中常用的
9、发声器件,蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。提供蜂鸣器发声所需要较高的电流,单片机的 I/O口驱动能力有限,而我们知道三极 管有电流放大的作用,在这里就是利用三极管放大电流来使蜂鸣器获得足够的驱动电流。 蜂鸣器音频输出电路的功能是用来报警,当遇到报警信号时,发出蜂鸣声,以此来提醒操作者。本电路通过控制不同频率的矩形脉冲来控制蜂鸣器发声。此硬件设计实例作业 16 路抢答器 第 5 页 共 15 页 次课程设计中只需要一些简单的提示声音,如有抢答违规,开始抢答,抢答时间结束和回答问题时间到的提示声音。本课程设计从 P3.7 口输出一个矩形脉冲来控制驱动器 PNP集电极的高低电平时间来控制蜂鸣器
10、的声音。 图 3-3 喇叭驱动电路蜂鸣器设计 图 3 4 LED显示 当某组抢答后其对应的 LED灯会亮起来,若抢答成功则数码管显示他们的组号,若是在主持人按开始键之前抢答,即违规抢答,则只亮其 LED 灯,不显示他们的组号。 图 3-4 LED 灯电路设计 图 硬件设计实例作业 16 路抢答器 第 6 页 共 15 页 3 5 LED数码管 在本设计中采用的是共阴极接法的数码管,由 P0 口驱动七段数码显示管,P2 口驱动数码管位。由 P0、 P2 口共同组成 LED 数码管显示电路。由于 P0 口不带有上拉电阻,所以在设计中需另外外接上拉电阻,以提供一定的拉电流。 P2口本身自带电阻,所以
11、无需外接。因为 AT89C51 单片机 P0、 P2口都自带锁存器,所以无需另外外接锁存器。其与单片 机一起来显示所抢答的代表队的编号。 图 3-5 LED 数码管电路设计 图 3 6 程序流程设计 开始 开始键是否按下 是否抢答成功 Y 检测复位检 检测按键 Y N 有按键按下 显示灯亮 喇叭响 抢答成功 硬件设计实例作业 16 路抢答器 第 7 页 共 15 页 3 7 代码块 (附注释) 3.7.1 变量定义 typedef unsigned char uchar; typedef unsigned int uint; uchar code table= 0x3f,0x06,0x5b,0
12、x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; uchar push_down = 0, flag = 0; /是否按下,是否开始 sbit speaker = P37; /喇叭 sbit reset = P31; /复位按键 sbit led = P30; /调试用 led灯 sbit led1 = P20; sbit led2 = P21; sbit begin = P32; /开始控制 3.7.2 延时函数 void delay_ms(uint ms) uchar i; while (ms-) for
13、 (i = 0; i 120; +i) 3.7.3 按键检测及输出控制函数 void slove() uchar i, j, key; P1 = 0x0f; if (P1 != 0x0f) 硬件设计实例作业 16 路抢答器 第 8 页 共 15 页 for (i = 0; i 4; +i) if (P1 P1 = 0xf0; if (P1 != 0xf0) for (j = 0; j 4; +j) if (P1 key = i * 4 + j; push_down = 1; if(flag = 1) display_count(key); if (key 8) P0 = (1 key); else key -= 8; P2 = (1 key); speaker = 0; delay_ms(3000); speaker = 1;