当前位置:文档之家› 基于51单片机8路抢答器设计

基于51单片机8路抢答器设计

创新实践课课程名称:创新实践课实践题目:基于51单片机8路抢答器设计学院:信息工程与自动化学院专业:生物医学工程年级:2014级学生:4 丽莎2海星指导教师:嘉林日期:2016-12-30教务处制目录一、前言 (3)二、电路原理图设计 (3)三、印制版图设计 (7)四、软件设计 (9)五、测试数据及分析 (16)六、总结 (18)一、前言目前,抢答器已经作为一种必不可少的工具广泛应用于各种智力和知识竞赛场合,但一般的抢答器可靠性低,使用寿命短,介于这些不方便因素,此次设计提出了用51单片机为核心控制元件,设计一个简易的八路抢答器。

本方案以51单片机作为主控核心,与晶振、数码管、蜂鸣器等通过外围接口实现的八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时器/计数器等,设计的八路抢答器不仅具有实时显示抢答选手的和抢答时间的功能,同时还利用汇编语言编程,使其实现复位、定时和报警的功能。

本次设计的系统实用性强、判断精确、操作简单、扩展功能强。

功能:以STC89C52RC单片机作为主控核心,与晶振、数码管、蜂鸣器等通过外围接口实现的八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路等,设计的八路抢答器不仅具有实时显示抢答选手的和抢答时间的功能,同时还利用汇编语言编程,使其实现复位和报警的功能。

此系统是基于51单片机,led发光二极管,一位共阳数码管,蜂鸣器,按键,等分立元件设计而成。

元件设计的意义:关于按键:共设计了10个独立按键,其中8个分别为八位选手抢答输入用,另外两个分别为开始和停止按键!只有裁判按下了开始键才进入正常抢答,否则属于犯规抢答,抢答完毕,裁判按下停止,数码管显示0。

关于led发光二极管:共设计了9个发光二极管,其中一个为电源指示,其他8个为选手抢答状态指示,正确抢答时led发光二极管缓慢闪烁,犯规抢答时,快速闪烁。

关于数码管:选手按下自己的按键时显示相应的选手编号!裁判按下开始键时数码管显示倒计时,倒计时0--9--8--7--6--5--4--3--2--1--0共10秒。

关于蜂鸣器:选手正确抢答时蜂鸣器响一声,犯规抢答时响两声,倒计时结束时响一声。

系统采用5v直流供电,通电前注意电源正负极,以及电源接口是否匹配。

此系统通电有个短暂的自检时间,led发光二级管都亮下再灭,蜂鸣器也响一声再停,方便检测部分元件好坏。

二、电路原理图设计(一)介绍Altium Designer软件1、Altium Designer软件Altium Designer软件是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows XP操作系统。

这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。

该平台拓宽了板级设计的传统界面,全面集成了FPGA 设计功能和SOPC 设计实现功能,从而允许工程设计人员能将系统设计中的FPGA 与PCB 设计及嵌入式设计集成在一起。

由于Altium Designer 在继承先前Protel软件功能的基础上,综合了FPGA 设计和嵌入式系统软件设计功能,Altium Designer对计算机的系统需求比先前的版本要高一些。

2.Altium Designer软件的界面图1-1 Altium Designer软件的界面3、功能最基本的功能就是画原理图,设计PCB,另外还可以编辑Geber文件,以及FPGA 的设计,可以将你的设计输出为PDF文档或者CAD文档以方便保护自己的设计或者配合结构件的设计。

(二)设计原理图步骤1、原理图设计流程图1-2 原理图设计流程图2、步骤(1)创建PCB工程(项目文件)启动ProtelDXP后,选择菜单【File】/【New】/【Project】/【PCBProject】命令;完成后如图6-2.3所示图1-3 PCB创建图(2)保存PCB项目(工程)文件选择【File】/【Save Project】菜单命令,弹出保存对话框【Save[PCB_Project1.PrjPCB]AS…】对话框如图6-2.4所示;选择保存路径后在【文件名】栏输入新文件名保存到自己自己建立的文件夹中。

(3)创建原理图文件在新建的PCB项目(工程)下新建原理图文件。

在新建的PCB项目(工程)下,选择菜单【File】/【New】/【Schematic】命(4)保存原理图文件选择【File】/ 【Save】菜单命令,弹出保存对话【Save[Sheet1.SchDoc]AS…】图1-4 创建原理图3、基于51单片机的八路抢答原理图图1-5 八路抢答的原理图4、元件清单表1-1 元件清单元件名称规格型号数量电阻1k1个10k1个4.7k1个三、印制版图设计(一)电路板设计流程图1-6 印制电路板流程图(二)PCB图1.方法在PCB 编辑器窗口左侧的工作面板上,单击左下角的【Files 】标签,打开【Files 】菜单。

单击【Files 】面板中的【New From Template 】标题栏下的“PCB Template”选项,选择所需要的模板。

2.创建PCB图的文件图1-7 PCB图的创建3.导入网络表格后的PCB图激活PCB 文件,执行菜单命令【Design 】/ 【Import Changes From 单片机最小系统.PrjPCB 】。

图1-8图1-94.元件布局(1)选中红色器件盒,在键盘上按下Delete 键,将其删除。

(2)选中某个元件,按住鼠标左键拖动到板合适的位置后放开鼠标左键(在拖动过程中按下空格键可以旋转位置),将各个元件调整到适合的位置。

(3)执行菜单【Auto Route】/【All...】5..绘制好导线的PCB图图1-10 绘制好导线的PCB图6、PCB的Bottom layer和top layer图1-11 PCB图的Bottom layer图1-12 PCB图的top layer四、软件设计(一)单片机软件流程图图1-13 软件流程图(二)keil软件介绍Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、器、库管理和一个功能强大的仿真调试器等在的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。

如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

Keil μVision4:2009年2月发布Keil μVision4,Keil μVision4引入灵活的窗口管理系统,使开发人员能够使用多台监视器,并提供了视觉上的表面对窗口位置的完全控制的任何地方。

新的用户界面可以更好地利用屏幕空间和更有效地组织多个窗口,提供一个整洁,高效的环境来开发应用程序。

新版本支持更多最新的ARM芯片,还添加了一些其他新功能。

2011年3月ARM公司发布最新集成开发环境RealView MDK开发工具中集成了最新版本的Keil μVision4,其编译器、调试工具实现与ARM器件的最完美匹配。

(三)Keil C编译步骤1、运行Keilc51进入编辑界面,如图4.1所示。

图1-14 Keilc51编辑界面2、首先进入菜单project/new project建立一个新工程,如图4.2所示。

图1-15 建立新工程3、选择要保存的路径,输入工程文件的名字,如图4-3所示。

图1-16 保存路径4、根据使用的单片机选择相应的型号,如图4.4所示。

图1-17 选择单片机型号5、单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如图4.5所示界面加入源文件。

如还没有源文件请先进入菜单File/New生成一个*.C格式的文件。

图1-18 加入源文件界面6、进行输出文件设置,进入菜单project/options for target选择OUTPUT选项卡,勾选Crest HEX File项,如图4.6所示。

图1-19 输出文件设置7、程序编写完成后进入菜单Project/Build target编译工程,如图4.7所示。

生成的*.HEX文件即可作为下载程序使用。

图1-20 生成文件(四)程序设计及说明//8个选手,正确抢答:显示选手号,对应的led慢闪,蜂鸣器响一声// 犯规抢答:显示选手号,对应的led快闪,蜂鸣器响两声#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;//选手1--4 sbit key5=P1^4;sbit key6=P1^5;sbit key7=P1^6;sbit key8=P1^7;//选手5--8 sbit d1=P0^0;sbit d2=P0^1;sbit d3=P0^2;sbit d4=P0^3;//选手指示灯1--4sbit d5=P0^4;sbit d6=P0^5;sbit d7=P0^6;sbit d8=P0^7; // 5--8sbit alarm=P3^1;//蜂鸣器控制端uchar code display[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84};//共阳0---9 bit flag=0;//是否允许抢答标志,初始【不允许】bit flag1=1;//是否允许扫描按键标记,初始【允许】uchar counter,time=10;//计数器,10s抢答倒计时//==========================================================延时函数================================================= void delay1m(uint k){uint j;while(k--)for(j=0;j<121;j++);}//========================================================== =定时器,外中断初始化函数================================void init_function(){TMOD=0x01; //定时器T0,工作于方式1TH0=(65535-50000)/256; //定时50msTL0=(65535-50000)%256;TR0=0; //启动T0IT0=IT1=1;//外部中断负跳变触发ET0=EX0=EX1=EA=1;//允许T0,外部中断0,1中断,开总中断}//================================================T0中断服务函数====================================================void time0() interrupt 1{TH0=(65535-50000)/256; //定时50msTL0=(65535-50000)%256 ;counter++;}//===================================================响一声========================================================= void speak1(){alarm=1;delay1m(300);alarm=0;}//===================================================响两声========================================================= void speak2(){alarm=1;delay1m(200);alarm=0;delay1m(200);alarm=1;delay1m(200);alarm=0;}void main(){delay1m(500);//延时检测led,蜂鸣器P0=0x00;alarm=0;//关led,蜂鸣器init_function();//初始化函数P2=display[0];//初始显示0while(1){while(flag1){if(flag)//正常抢答{if(!key1){flag1=0;TR0=0;speak1();P2=display[1];while(flag1==0){d1=1;delay1m (300);d1=0;delay1m(300);}}//显示1,蜂鸣器叫,对应的led亮elseif(!key2){flag1=0;TR0=0;speak1();P2=display[2];while(flag1==0){d2=1;delay1 m(300);d2=0;delay1m(300);}}//显示2,蜂鸣器叫elseif(!key3){flag1=0;TR0=0;speak1();P2=display[3];while(flag1==0){d3=1;delay1 m(300);d3=0;delay1m(300);}}//显示3,蜂鸣器叫elseif(!key4){flag1=0;TR0=0;speak1();P2=display[4];while(flag1==0){d4=1;delay1 m(300);d4=0;delay1m(300);}}//显示4,蜂鸣器叫elseif(!key5){flag1=0;TR0=0;speak1();P2=display[5];while(flag1==0){d5=1;delay1 m(300);d5=0;delay1m(300);}}//显示5,蜂鸣器叫elseif(!key6){flag1=0;TR0=0;speak1();P2=display[6];while(flag1==0){d6=1;delay1 m(300);d6=0;delay1m(300);}}//显示6,蜂鸣器叫elseif(!key7){flag1=0;TR0=0;speak1();P2=display[7];while(flag1==0){d7=1;delay1 m(300);d7=0;delay1m(300);}}//显示7,蜂鸣器叫elseif(!key8){flag1=0;TR0=0;speak1();P2=display[8];while(flag1==0){d8=1;delay1 m(300);d8=0;delay1m(300);}}//显示8,蜂鸣器叫else{if(counter>=20)//1S时间到{counter=0;time--;if(time==0)//10S到{TR0=0;P2=display[time];speak1();//显示0flag=0;//抢答的时间没人抢答,必须等待重新开始}P2=display[time];}}}else//犯规抢答{if(!key1){flag1=0;TR0=0;speak2();P2=display[1];while(flag1==0){d1=1;delay1m (100);d1=0;delay1m(100);}}//数码管显示1,蜂鸣器叫elseif(!key2){flag1=0;TR0=0;speak2();P2=display[2];while(flag1==0){d2=1;delay1 m(100);d2=0;delay1m(100);}}//数码管显示2,蜂鸣器叫elseif(!key3){flag1=0;TR0=0;speak2();P2=display[3];while(flag1==0){d3=1;delay1 m(100);d3=0;delay1m(100);}}//数码管显示3,蜂鸣器叫elseif(!key4){flag1=0;TR0=0;speak2();P2=display[4];while(flag1==0){d4=1;delay1m(100);d4=0;delay1m(100);}}//数码管显示4,蜂鸣器叫elseif(!key5){flag1=0;TR0=0;speak2();P2=display[5];while(flag1==0){d5=1;delay1 m(100);d5=0;delay1m(100);}}//数码管显示5,蜂鸣器叫elseif(!key6){flag1=0;TR0=0;speak2();P2=display[6];while(flag1==0){d6=1;delay1 m(100);d6=0;delay1m(100);}}//数码管显示6,蜂鸣器叫elseif(!key7){flag1=0;TR0=0;speak2();P2=display[7];while(flag1==0){d7=1;delay1 m(100);d7=0;delay1m(100);}}//数码管显示7,蜂鸣器叫elseif(!key8){flag1=0;TR0=0;speak2();P2=display[8];while(flag1==0){d8=1;delay1 m(100);d8=0;delay1m(100);}}//数码管显示8,蜂鸣器叫}}}}//==========================================================外部中断0中断函数,开始=================================== void extern_int0() interrupt 0{if(P2==display[0])//数码管显示0时开始键才响应{flag=flag1=1;//允许抢答,允许响应按键time=10;P0=0x00;//灯都灭掉alarm=0;//关蜂鸣器TR0=1;//倒计时,开定时器}}//==========================================================外部中断1中断函数,停止=================================== void extern_int1() interrupt 2{flag1=1;//允许抢答,flag=0;// 不允许响应按键TR0=0;//关定时器P0=0x00;//灯都灭掉alarm=0;//关蜂鸣器P2=display[0];//显示0}(五)导程序1、利用以下两个软件将程序导入51单片机图1-212、在指定文件夹找到程序并添加图1-22五、测试数据及分析1、程序初始化图1-23 未按下开始键2、按下开始键,属于正常抢答,显示选手号,led慢闪,蜂鸣器响一声,锁定其他选手图1-24 开始抢答2、裁判按下开始键时数码管显示倒计时,倒计时0--9--8--7--6--5--4--3--2--1--0共10秒。

相关主题