欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于51单片机的八位抢答器课程设计.docx

    • 资源ID:6534364       资源大小:996.41KB        全文页数:23页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51单片机的八位抢答器课程设计.docx

    1、基于51单片机的八位抢答器课程设计电子技术应用综合课程设计 51单片机八位抢答器 第一章:内容提要4 1.1设计要求41.2总体设计方案5第二章:硬件设计及分析5 2.1单片机最小系统52.2 LCD1602显示电路72.3独立式按键键盘设计72.4蜂鸣器设计82.5复位电路设计9第三章:软件设计及分析10 3.1系统程序103.2程序流程图10第四章:体会感想11 参考文献12附录13第一章:内容摘要数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生

    2、的信号在LCD602显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。关键字: 抢

    3、答电路 定时电路 报警电路 1 .1设计要求以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0S7表示。 设置一个系统清除和抢答控制开关S,开关由主持人控制。 抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为

    4、止。 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。1 .2总体方案设计 图1.2 总体电路设计框图独立式按键键盘:用于输入高低电平,连接到P1口,由P1口检测电平的变化。抢答器倒计时显示电路:用LCD1602液晶显示,第一行显示成功抢答选手编号,第二行显示选手抢答用的时间和倒计时时间。蜂鸣电路:有选手抢答成功,P2.0口发出脉冲,使蜂鸣器发出声音。第二章:硬件设计及分析2.1单片机最小系统单片机选用的是Atmel公司推出的AT89S52,它是一种低功效、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储

    5、器技术制造,与工业80C51产品指令和引脚完全兼容。在单芯片上拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器串口、中断继续工作。掉电保护方式下RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器。如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的

    6、时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。T89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 图2.1 最小系统电路2.2显示电路液晶显示器是一种功耗极低的被动式显示器件,1602广脚介绍:D0D7数据传送引脚,VSS为接地线,VDD为电源线,VEE为LCD驱动电压调节,由此可以调节显示亮度。RS为寄存器选择信号,高电平选择数据

    7、寄存器,低电平选择指令寄存器。RW为读写控制信号,高电平读,低电平写。EN使能信号,读状态下高电平有效,写状态下下降沿有效。 RS连接P20;寄存器选择信号 RW连接P21;读写控制信号线EN连接P22;使能信号线 图2.2 LCD1602电路2.独立式按键键盘设计键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。因此可以根据实际需要对键盘中的按键灵活的编码。最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU

    8、可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。 独立式按键键盘:用于输入高低电平,八位选手抢答时高低电平发生变化,如图所示。图2.3 抢答按键电路2.4蜂鸣器设计我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的巨型波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出

    9、频率,从而改变音调,使喇叭发出不同的声音。单片机通过内部定时器的操作实现交替变换的波形输出驱动扬声器发声,有选手抢答成功,使蜂鸣器发出声音,如图 所示。图2.4 蜂鸣器电路2.5复位电路设计MCS-5l的复位输入引脚RST为MCS-51提供了初始化的手段,可以使程序从指定处开始执行,在MCS-5l的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作只要RST保持高电平,则MCS-5l循环复位只有当RST由高电平变低电平以后。MCS-51才从0000H地址开始执行程序。本系统采用按键复位方式的复位电路。复位电路:当一轮进行完时,由主持人按下,下一轮倒计时开始,

    10、如图3.2所示。 图2.4 复位电路第三章:软件设计及分析3.1系统程序分为主程序、lcd1602显示程序、按键扫描程序、初始化等程序。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。按键复位再来一次执行下次程序3.2程序流程图第四章:体会感想通过本次单片机课程设计,使我所学的知识能够得到实际的应用,过程中也发现自身所学的知识存在许多的不

    11、足和问题,当然同时也学到了不少宝贵的知识,提高了自己的动手实践能力。在整个设计过程中从设计方案确定,到具体的电路仿真,最后到总体电路的连接构建以及程序的编写烧制,特别是程序的编写要求对LCD1602的初始化操作,指令和数据的操作都非常熟悉。通过这次对数字钟的设计与制作 让我了解了设计电路的程序 也让我了解了关于数字钟的原理与设计理念 要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样 因为 再实际接线中有着各种各样的条件制约着。而且 在仿真中无法成功的电路接法 在实际中因为芯片本身的特性而能够成功。所以 在设计时应考虑两者的差异 从中找出最适合的设计方法

    12、。在这次实习中遇到了许多问题,但通过向老师同学请教都得到了解决。通过这次课程设计,我知道了做任何事都要有一颗平常心,不要想着走捷径,要一步一个脚印才能取得最后成功,在此过程中更要注重自主学习,发挥自己的主管能动性。总之这次课程设计试一次很好的锻炼,让我有了全方位的提高,受益匪浅,为我以后的工作学习打下了很好的基础,而且积累了丰富的经验。参考文献:1张义和.例说51单片机M.北京:人民邮电出版社,2010年 2阎石编著数字电子技术基础(第五版)北京高等教育出版社2006.15503蔡明文冯先成主编单片机课程设计华中科技大学出版社2007.34陈明萤编著8051单片机课程设计实训教材清华大学出版社

    13、20045康华光编著模拟电子技术基础(第五版)高等教育出版社20066黄智伟编著全国大学生电子设计竞赛电路(第一版)航空航天大学出版社2006.36附录:(1)实物图:(2)元件清单Lcd1602 一个蜂鸣器 一个三极管 一个89c52单片机一个Led 一个按键 九个10K电阻器 一个最小系统板一个(3)程序清单#include#includesbit RS = P24; /定义端口 sbit RW = P25;sbit EN = P26;sbit s = P37; sbit s0 = P10;sbit s1 = P11;sbit s2 = P12;sbit s3 = P13;sbit s4

    14、= P14;sbit s5 = P15;sbit s6 = P16;sbit s7 = P36;sbit beep = P20;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0unsigned char table10 =0,1,2,3,4,5,6,7,8,9;unsigned char shu,key,count=0;unsigned char flag=0;unsign

    15、ed char DATA,num;/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned i

    16、nt t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 判忙函数-*/ bit LCD_Check_Busy(void) DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); /*- 写入命令函数-*/ void LCD_Write_Com(unsigned char com) while(LCD_Check_Busy(); /忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= co

    17、m; _nop_(); EN_CLR; /*- 写入数据函数-*/ void LCD_Write_Data(unsigned char Data) while(LCD_Check_Busy(); /忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; /*- 清屏函数-*/ void LCD_Clear(void) LCD_Write_Com(0x01); DelayMs(5); /*- 写入字符串函数-*/ void LCD_Write_String(unsigned char x,unsigned char y,unsi

    18、gned char *s) if (y = 0) LCD_Write_Com(0x80 + x); /表示第一行 else LCD_Write_Com(0xC0 + x); /表示第二行 while (*s) LCD_Write_Data( *s); s +; /*- 写入字符函数-*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); LCD_Write_Data( D

    19、ata); /*- 初始化函数-*/ void LCD_Init(void) LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显

    20、示开及光标设置*/ /*- 定时器中断子程序-*/void Timer0_isr(void) interrupt 1 unsigned char temp,temp1,i,j=2; TH0=(65536-50000)/256;/重新赋值 50ms TL0=(65536-50000)%256; / beep=beep;/ DelayMs(100); i+; if(i=20) i=0; DATA-; if(DATA0) DelayMs(50); temp=DATA/10; temp1=DATA%10; LCD_Write_Char(7,1,tabletemp); LCD_Write_Char(8,

    21、1,tabletemp1); else if(DATA=0) P1=0xFF; ET0=0; DelayMs(50); LCD_Write_Char(7,1,0); LCD_Write_Char(8,1,0); for(;j-;j0) beep=0; DelayMs(500); beep=1; void beepon(void) unsigned char i; for(i=0;i10;i+) beep=0; DelayMs(50); beep=1; unsigned char keyscan(void) unsigned char scan1; scan1=P1; if(scan1!=0xf

    22、f) DelayMs(30); if(scan1=P1) switch(scan1) case 0xff: scan1 = 0; break; case 0xfe: scan1 = 1; break; case 0xfd: scan1 = 2; break; case 0xfb: scan1 = 3; break; case 0xf7: scan1 = 4; break; case 0xef: scan1 = 5; break; case 0xdf: scan1 = 6; break; case 0xbf: scan1 = 7; break; case 0x7f: scan1 = 8; bre

    23、ak; else scan1=0; return(scan1);void display(void) unsigned char a,b; key=keyscan(); if(key!=0 & flag=0 ) ET0=0; count+; DelayMs(200); LCD_Write_Char(10,0,tablekey); flag=1; a=(shu-DATA)/10; b=(shu-DATA)%10; LCD_Write_Char(7,1,tablea); LCD_Write_Char(8,1,tableb); void main(void) unsigned char k; uns

    24、igned a,b; LCD_Init(); /初始化液晶 DelayMs(20); /延时有助于稳定 LCD_Clear(); /清屏 LCD_Write_String(0,1,time); LCD_Write_String(0,0,xuanshou); / Init_Timer0(); /定时器0初始化 while(count=0) if(s0=0) DelayMs(10); if(s0=0) count+; while(count=1) if(s=0) DelayMs(10); if(s=0) while(!s); count+; if(s1=0) DelayMs(10); if(s1=0) while(!s1); DATA+; shu=DATA; if(DATA=31)DATA=0;count=0; a=DATA/10; b=DATA%10; LCD_Write_Char(7,1,tablea);


    注意事项

    本文(基于51单片机的八位抢答器课程设计.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开