毕业设计(论文)课题:学生: 系部:班级: 学号:指导教师:装订交卷日期:装订顺序: (1)封面(2)毕业设计(论文)成绩评定记录(3)标题、中文摘要及关键词(4)正文(5)附录(6)参考文献毕业设计(论文)成绩评定记录表指导教师评语(包含学生在毕业实习期间的表现):成绩(平时成绩): 指导教师签名:年月日评阅教师评语:成绩(评阅成绩): 评阅教师签名:年月日答辩情况记录:答辩成绩:答辩委员会主任(或答辩教师小组组长)签名:年月日总评成绩:注:1.此表适用于参加毕业答辩学生的毕业设计(论文)成绩评定;2.平时成绩占20%、卷面评阅成绩占50%、答辩成绩占30%,在上面的评分表中,可分别按20分、50分、30分来量化评分,三项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。
教务处制毕业设计(论文)成绩评定记录表指导教师评语(包含学生在毕业实习期间的表现):成绩(平时成绩): 指导教师签名:年月日评阅教师评语:成绩(评阅成绩): 评阅教师签名:年月日总评成绩:注:1.此表适用于不参加毕业答辩学生的毕业设计(论文)成绩评定;2.平时成绩占40%、卷面评阅成绩占60%,在上面的评分表中,可分别按40分、60分来量化评分,二项相加所得总分即为总评成绩,总评成绩请转换为优秀、良好、中等、及格、不及格五等级计分。
教务处基于单片机的简易多路智力抢答器摘要抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辨认出选手号码。
现在随着电子技术的发展,大多数抢答器均已使用单片机来实现抢答功能,具有功能齐全,电路简单,成本低,性能高等优点。
单片机以其较高的可靠性、准确性和可拓展性受到越来越广泛的应用。
本设计就是基于MCS-51单片机为控制核心,结合周边电路实现的一个简易多路智力抢答器。
关键词:抢答器;单片机;功能第一章绪论1.1 单片机概述单片机(单片微型计算机)是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
随着微电子技术,自动控制技术,微机应用技术的发展,使单片微型计算机也得到迅速的发展,单片微型计算机是微型计算机的一个重要分支,单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
单片机的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。
它已成为工业控制领域,智能仪器仪表,尖端武器,日常生活中最广泛使用的控制器。
1.2 抢答器的原理与发展应用在各类竞赛中,特别是做抢答题时,在抢答过程中,为了知道哪一组或哪一名选手先答题,必须要有一个系统来完成这个任务。
如果在抢答过程中,只靠人的视觉是很难判断出哪组先答题。
利用单片机来设计抢答器,使以上问题得以解决,即使有两组的抢答时间相差几微秒,也可分辨出哪组优先答题。
抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辨认出选手号码。
现在大多数抢答器均使用单片机(如 MCS-51 型)和数字集成电路,并增加了许多新功能,如选手号码显示、计时、响铃、选手得分显示等功能。
对于抢答器的应用,如早期的数字电路,随着科技的逐步发展,进而到了单片机的控制来实现其功能,而且功能齐全,电路简单,成本低,性能高,真正朝着有利的方向发展。
第二章系统方案2.1 系统要求指标及其功能本系统要实现:1. 识别最先选手按键并锁存。
2.实时显示当前状态和抢答号码。
3. 8路输入与显示。
4. 对最先抢答人亮灯。
5. 主持人能开始,停止/清零抢答器状态。
2.2 各种方案选择比较2.2.1 实现方式的选择方案一:采用纯数字门电路。
通过各种逻辑门电路的组合连接,实现系统功能。
此方案设计复杂,电路复杂,功能单一,且需要门电路较多,成本较高,也不美观。
维护调试都比较麻烦。
方案二:采用单片机为主控制器。
此方案电路简单,设计工作主要是软件设计,设计较为灵活,功能都是通过软件实现,硬件花费少;应用KEIL 软件,C 语言编程,软件设计也较为方便。
系统易于调试维护。
应用单片机使得系统更具有智能化的特色,是当今的主流。
故采用本方案。
2.2.2 控制器的选择方案一:采用AT89C51系列单片机。
由于AT系列单片机烧录调试程序需要专门烧写器。
购买烧写器成本较高,且烧录不方便。
方案二:采用STC89C51系列单片机。
STC8951系列单片机为AT8951的同类替代产品,除去和AT8951具有的相同性能外,还可以直接用串口烧录程序,大大简化了程序烧写的流程。
降低了成本,加快了开发周期。
考虑到单片机内部存储器的大小(STC89C52的flash 为8K,RAM 为512),本系统选用STC89C52单片机。
2.2.3 显示模块的选择方案一:采用L12864液晶显示。
此器件能显示4*8个字符,操作简便,但器件很小,视觉效果差。
方案二:采用数码管显示。
此器件价格较低廉,能显示数字,亮度较高,且规格较多,本系统可选用大尺寸、高亮度的LED 数码管。
故选用此方案。
2.3 系统的描述单片机按键阵列LED 发光二极管阵列LED 数码管控制门电路电源图2.3.1 抢答器的系统框图本系统以STC89C52单片机为控制核心,结合周边电路,通过单片机引脚I/O 口实现对按键抢答的迅速响应;应用单片机外部中断实现对按键的快速响应,单片机的相应时间可达几微妙,满足系统快速响应要求。
在此基础上,实现了按键响应并识别。
主持人能够通过“开始”键开始答题,此时选手可以抢答。
单片机通过中断的方式响应最先抢答的选手并识别选手号码,此时选手们的按键锁定, 所有人按键无效,数码管显示最先抢答人的号码,相应选手的LED 发光二极管点亮,此时主持人可以按“停止/清零”键停止抢答,停止时,数码管显示“FF ”。
第三章电路设计3.1 系统总体设计本设计的主要电路有:单片机STC89C52最小系统、数码管显示驱动模块、按键输入模块。
LED发光二极管电路。
外围电路都与单片机引脚I/O口相连,以实现单片机对外围电路的控制,实现相应功能。
3.2 单元电路设计3.2.1 单片机最小系统图3.2.1 单片机最小系统如图 3.2.1 单片机最小系统包括单片机、时钟电路、复位电路。
其他引脚I/O相应的扩充功能,P1口接8个独立按键,P3.4-5为功能控制按键,P3.6-7为数码管扫描位,INT0、INT1接按键门电路处理的信号中断,P2接LED发光二极管,PO接数码管数据位。
3.2.2 电源电路图3.2.2 电源电路本电源电路如上图所示,应用7805三端稳压电源模块构成。
输出稳压5V电压,为单片机、LED灯和数码管提供工作电压。
电容为滤波作用,使输出电源更平滑稳定。
3.2.3 数码管驱动电路本电路由数码管、三极管构成。
三极管的作用是为数码管提供驱动,使之更亮。
单片机引脚接三极管基极,控制三极管的导通对数码管选择位控制。
数码管为共阳极数码管。
如图3.2.3所示。
图3.2.3 数码管驱动电路3.2.4 按键电路图3.2.4 按键电路如上图所示,按键电路分为两部分,第一部分是选手按键阵列,共有8个独立按键,接到单片机P1口,同时8位按键通过一个8输入与门接入单片机外部中断位INT1。
第二部分是主持人按键阵列,共有2个独立按键,接到P3的两个普通I/O口,同时2位按键通过一个2输入与门接入单片机外部中断位INT0。
主持人的优先级高于选手。
3.2.5 LED发光二极管电路图3.2.5 LED发光二极管电路本电路由高亮度发光二极管组成,共阳极连接,阴极接P2口。
由P2口控制发光二极管的亮灭。
第四章 程序设计4.1程序总体流程图开始系统初始化当前是否开始显示号码关选手中断选手按键无效显示亮灯号码清零数码管显示”FF ”结束YESNO图4.1.1 系统总体流程图INT0去抖动按键有效?识别按键开始/清零设置结束YESINT1按键有效?识别按键关选手中断其他人按键无效结束YES图4.1.2 中断程序流程图主程序实现当主持人按开始时,等待按键并显示最先抢答人号码,相应二极管灯点亮,此时其他人抢答无效。
当主持人按停止清零时,选手按键无效,数码管和二极管灯清零。
中断程序有两个,分别实现1.如果主持人按键,触动外部中断1,识别是否是开始还是停止清零,如果是开始,则开选手按键中断,选手可按键抢答。
如果是停止清零,则选手按键关,选手按键无效。
2.选手按键中断,识别按键并关选手按键,其他人按键无效。
程序见附录。
第五章测试与仿真5.1测试方法测试仿真工具:Protues软件仿真5.2测试效果图5.2.1 Protues仿真总体效果图上图为系统启动时,当前为停止清零状态,选手此时不能按键,按键无效,数码管显示"FF",发光二极管都不亮。
图5.2.2 开始后效果图图5.2.3 选手抢答后效果图图5.2.2为主持人按键开始时,此时数码管为00,等待选手抢答。
图5.2.3为选手抢答后,数码管显示选手号码,相应二极管灯点亮。
此时其他选手抢答按键无效。
综上所述,仿真效果完全符合题目要求指标。
第五章总结本系统以STC89C52单片机为控制核心,结合周边电路。
经过测试,各项功能指标均达到设计要求,且电路设计简洁,程序设计也较为简单,界面效果简洁美观,操作简单实用。
通过此次毕业课题的设计,让我学到很多东西,一方面,它是3年大学所学知识的一个综合应用,考察了我大学所学的知识,是一次彻底的知识巩固和提高。
另一方面,通过综合的应用设计,锻炼了我应用知识的能力和动手能力。
同时,在设计的过程中,也锻炼了我解决问题的能力,遇到问题坚持不懈的毅力和细心程度。
让我在以后求职就业中更好的学习和提高自己。
第六章参考文献[1] 李全利. 单片机原理及接口技术.高等教育出版社[2] 公茂法. 单片机原理与实践.北京航空航天出版社[3] 全国大学生电子设计竞赛组委会. 第九届全国大学生电子设计竞赛获奖作品选编.北京理工大学出版社[4] 及力. Protel 99原理图与PCB设计教程. 电子工业出版社第七章附录/*===========================程序清单========================*/#include<reg51.h>typedef unsigned char uchar;typedef unsigned int uint;#define KEY P1 //8个按键#define DATA P0 //数码管段sbit LED1=P2^0;sbit LED2=P2^1;sbit LED3=P2^2;sbit LED4=P2^3;sbit LED5=P2^4;sbit LED6= P2^5;sbit LED7= P2^6;sbit LED8= P2^7; //发光二极管sbit WEI1=P3^6; //数码管高位sbit WEI2=P3^7; //数码管地位sbit start=P3^4; //开始按键sbit stop=P3^5; //停止按键uchar num,temp,work_mode;uchar code lab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码 0x07,0x7f,0x6f,0x71};//0123456789F/*======================自定义子程序===================*/void delay10ms(); //延时10msvoid delay5ms(); //计时器计时void display_num(); //显示数码管数字void init_INT0(); //初始化void init_INT1(); //初始化void key_process(); //按键处理void display_led(); //LED灯显示void init_port(); //初始化I/O口/*========================主程序=====================*/void main(){init_INT0();init_INT1(); //系统初始化init_port();while(1){EX1=1; //开抢答人按键中断,while(work_mode) //当主持人按键开始抢答时{display_num(); //显示抢答号码display_led();}while(!work_mode) //当主持人按键停止抢答时{EX1=0; //关抢答按键中断,抢答无效num=0; //数字清零P2=0XFF; //LED灭灯WEI1=1;WEI2=1;DATA=~lab[10]; //显示FF停止}}}void init_port(){WEI1=0;WEI2=0;}void delay10ms(){unsigned char a,b,c;for(c=1;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--);}void delay5ms(){unsigned char a,b;for(b=18;b>0;b--)for(a=130;a>0;a--);}void display_num(){WEI1=0;WEI2=0;DATA=~lab[num/10];WEI1=1;delay5ms();WEI2=0;WEI1=0;DATA=~lab[num%10];WEI2=1;delay5ms();WEI1=0;WEI2=0;}void init_INT0(){EX0=1;IT0=1;EA=1;}void init_INT1(){EX1=1;IT1=1;EA=1;}void INT1_SIR()interrupt 2{EA=0;temp=KEY;key_process();EA=1;}void INT0_SIR()interrupt 0{EA=0;if(!(start&stop))delay10ms();if(!(start&stop)){if((!start)&stop)work_mode=1;if((!stop)&start)work_mode=0;}EA=1;}void key_process(){switch(temp){case (~0x01):num=1;EX1=0;break;case (~0x02):num=2;EX1=0;break;case (~0x04):num=3;EX1=0;break;case (~0x08):num=4;EX1=0;break;case (~0x10):num=5;EX1=0;break;case (~0x20):num=6;EX1=0;break;case (~0x40):num=7;EX1=0;break;case (~0x80):num=8;EX1=0;break;default :break;}}void display_led(){switch(num){case 1:LED1=0;break;case 2:LED2=0;break;case 3:LED3=0;break;case 4:LED4=0;break;case 5:LED5=0;break;case 6:LED6=0;break;case 7:LED7=0;break;case 8:LED8=0;break;default :P2=0XFF;break;}}。