八路抢答器设计说明书精品.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
八路抢答器的设计 一、设计要求 (1)设计一个智力抢答器,可同时供 8 名选手或八个代表队参加比赛,他们的编号 分别是 1,2,3,4,5,6,7,8 ,各用一个抢答按钮,按钮的编号与选手的编号相对应,分 别是 S0, S1,S2,S3,S4,S5, S6,S7。 (2)节目主持人设置一个控制开关,用来控制系统的复位和抢答开始。 (3)抢答器具有数据锁存和显示功能。抢答开始后,若有选手按动抢答按钮,编号 立即锁存,并在LED数码管上显示出选手的编号,同时扬声器发出提示声音,此外封 锁输入电路,禁止其他选手抢答。优先抢答的选手的编号一直保持到主持人将系统复 位为止。 二、总体设计思路 本次设计采用TO外部中断来实现主持人的控制开关,用 P0 口输出选手的段码, 用P2口来读取按键选手号,用P1 口来点亮选手相应的发光二极管。 三、硬件设计 3.1 原理综述 单片机:使用了 AT89C51单片机芯片控制电路。 显示电路:P0 口输出选手段码,P1 口点亮相应的发光二极管。 按键电路:P3A2管脚接一个开关来实现主持人的控制开关,通过 P2 口接的按键来读 取选手号。 晶扳电品复位电路境光二根营电 路图3.1硬件框图 晶扳电品 复位电路 境光二根营电 路 图3.1硬件框图 3.2元器件清单 序号 名称 型号 1「 单片机 AT89C51 2 数码管 7SEG-MP*1-CA 3 上拉电阻RN1 220 4 上拉电阻RP1 220 5 电阻R1 880 6 电阻R2 220 7 开关(10个) BUTTON 8 晶振 12M 9 1 电容(C1、C2) 22pf 10 电容C3 1uf 11 三极管 PNP 12「 扬声器 BUZZER 13 发光二极管(8个) LED BLUE 3.3硬件原理图 四、软件设计 4.1程序流程图 4.2程序及注释 #in clude<reg51.h>//包含头文件REG51.H #in clude<reg51.h> #defi ne uchar un sig ned char //数据类型的宏定义 //数据类型的宏定义 〃7 〃7段数码管0-8断码 uchar act[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 低电平有效的位码 uchar num; //宏定义全局变量num bit bdata start; //定义开始按键start sbit bz=P3A3; //定义P3.3为bz // ^延时 函^数 *********************************************************** void delay( uint k) uint i,j; for(i=0;i<k;i++) {for(j=0;j<121;j++){;}} // 蜂鸣器 // 蜂鸣器 void buzzer(void) { while(1) { bz=~bz; delay(10); //外中断 0 // 外中断 0 ************************************************************ void EA_INT0() interrupt 0 //定义函数名为EA_INT0的TO外中断服务函数, void EA_INT0() interrupt 0 //定义函数名为EA_INT0的TO外中断服务函数, 中断号为 0 uchar in=1; start=!start; if(start==1) { while(in) { P2=act[0]; if(P2!=0xff) { delay(10); // 定义 in=1 //start 取反 // 判断是否开始抢答 // 循环 // 初始化 P2 // 判断有无选手按下 // 延时确定有选手按下 for(num=1;num<9;num++) // 判断选手号 { if(P2==act[num]) // 读取选手号 {bz=1;in=0;break;} // 停止循环 } } } else { num=O; P3=0xff; bz=O; } } 〃******************************************************************************* void mai n(void) // 主函数 { start=0; // 初始化start P0=seg7[0]; // 初始化段码 P1=act[0]; //初始化发光二级管 bz=0; //初始化蜂鸣器 EX0=1; // 允许外中断T0 IT0=1; // 外中断T0设为边沿触发 EA=1; // 开启总中断 while(1) //

文档评论(0)

136****3783 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档