单片机微机原理课程设计八路抢答器.docx

上传人:b****6 文档编号:6577983 上传时间:2023-01-08 格式:DOCX 页数:22 大小:363.44KB
下载 相关 举报
单片机微机原理课程设计八路抢答器.docx_第1页
第1页 / 共22页
单片机微机原理课程设计八路抢答器.docx_第2页
第2页 / 共22页
单片机微机原理课程设计八路抢答器.docx_第3页
第3页 / 共22页
单片机微机原理课程设计八路抢答器.docx_第4页
第4页 / 共22页
单片机微机原理课程设计八路抢答器.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机微机原理课程设计八路抢答器.docx

《单片机微机原理课程设计八路抢答器.docx》由会员分享,可在线阅读,更多相关《单片机微机原理课程设计八路抢答器.docx(22页珍藏版)》请在冰豆网上搜索。

单片机微机原理课程设计八路抢答器.docx

单片机微机原理课程设计八路抢答器

 

《微机原理与接口技术》

课程设计报告

基于STC89C52防违规八路抢答器

 

院系:

专业(班级):

姓名:

学号:

指导教师:

职称:

完成日期:

2013年12月25日

目录

1引言1

2总体方案论证与设技1

2.1主控模块的选型和论证1

2.2显示模块的选型和论证2

2.3按键模块的选型和论证2

2.4系统整体设计概述3

2.5系统使用说明4

3系统硬件电路设计4

3.1主控模块4

3.1.1单片机芯片介绍5

3.1.2单片机最小系统6

3.2数码管模块设计6

3.2.1数码管原理介绍7

3.2.2数码管电路设计7

3.3键盘模块设计8

3.4蜂鸣器模块设计8

4系统软件设计9

4.1系统软件总体设计9

4.2程序设计原理10

5系统调试11

5.1硬件调试11

5.2调试结果12

6总结12

7致谢13

参考文献13

附录A系统整体原理图15

附录B实物图16

附录C系统源程序17

基于STC89C52防违规八路抢答器

1引言

随着技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。

本设计就是基于单片机设计抢答系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能。

单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。

对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。

抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。

选手们都站在同一个起跑线上,体现了公平公正的原则。

1.1本系统主要研究内容

本系统设计制作一个基于单片机的8路抢答器。

能实现以下几种功能:

(1)键盘扫描,显示当前按键。

(2)检测是否有参赛者违规操作,如果在主持人按下开始按键以前按下则利用蜂鸣器报警并显示参赛者编号。

(3)当主持人按下开始按键后,计数器开始倒数,在30秒倒数结束之前如果有参赛者按下按键,则在数码管上显示参赛者编号和剩余的时间。

2总体方案论证与设技

2.1主控模块的选型和论证

该系统采用51系列单片机STC89C52作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。

由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。

整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。

2.2显示模块的选型和论证

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于本设计而言一个LCD1602的液晶屏即可,价格较高

2.3按键模块的选型和论证

方案一:

采用常见的独立按键输入模式,根据需要一共要用9个按键进行功能输入。

方案二:

采用矩阵键盘作为输入,矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组.在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。

在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。

这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。

由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。

键模块使用的是多位独立按键,按键一端接IO口,一端接地,由于单片机的IO口都有内部上拉,因此当按键没有按下的时候,IO检测到的时候高电平,当按键按下的时候,相当于IO短接地,因此这时候单片机检测到的电平为低电平,通过检测不同时刻的IO口状态就可以判断按下的是那个按键。

2.4系统整体设计概述

本系统以STC89C52单片机为控制核心,对系统进行初始化,主要完成对键盘的响应、数码管显示等功能的控制,起到总控和协调各模块之间工作的作用。

单片机通过驱动蜂鸣器发响声。

系统由单片机.数码管、蜂鸣器报警模块、按键模块所组成。

2-1系统结构框图

2.5系统使用说明

本程序为8位抢答器的设计程序具体要求如下:

要求有违例抢答的判别,即在主持人未发出可以抢答的指令前进行抢答的,要能给出违例抢答的声音提示;当参赛者成功抢答之后,能用五寸以上的数码管显示抢答成功的组别,并给出抢答成功的提示音;主持人发出可以开始抢答指令30秒以后,如果无人进行抢答,能发出与抢答成功不同的声音进行提示,并同时用两位数码管显示倒计时的情况

3系统硬件电路设计

3.1主控模块

主控模块模块在整个系统中起着统筹的作用,需要检测键盘,温度传感器等各种参数,同时驱动液晶显示相关参数,在这里我们选用了51系列单片机中的STC89C52单片机作为系统的主控芯片。

51系列单片机最初是由Intel公司开发设计的,但后来Intel公司把51核的设计方案卖给了几家大的电子设计生产商,譬如SST、Philip、Atmel等大公司。

因此市面上出现了各式各样的均以51为内核的单片机。

这些各大电子生产商推出的单片机都兼容51指令、并在51的基础上扩展一些功能而内部结构是与51一致的。

STC89C52有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。

STC89C52的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。

图3-1STC89C52单片机结构图

3.1.1单片机芯片介绍

STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。

使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。

在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89SC52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。

STC89C52具有以下标准功能:

 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。

另外,AT89S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。

掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。

8 位微控制器 8K 字节在系统可编程。

 

图3-2单片机最小系统

3.1.2单片机最小系统

STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

 

3.2数码管模块设计

3.2.1数码管原理介绍

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;

 

图3-3四位数码管内部结构图

3.2.2数码管电路设计

如下图所示为一位共阳数码管的硬件电路连接图,由于数码管内部实际为8个LED灯,如果把LED的阴级直接单片机的IO的口,会使LED通过的电流过大从而把数码管烧毁,因此在设计的时候在LED的阴级和单片机的IO之间加上了限流电阻从而起到限流作用。

根据经验,这里选取了1K电阻。

程序编写的时候我们预先根据要显示的字符,编写了个对应要显示的数组,这样可以使程序更加简化。

图3-4四位共阳数码管硬件电路连接图

3.3键盘模块设计

图3-5键盘模块电路图

3.4蜂鸣器模块设计

本设计带有蜂鸣器报警功能,当主持人没有按下抢答器的时候,用户抢答的话与蜂鸣器发声提醒。

图3-6蜂鸣器驱动电路图

4系统软件设计

4.1系统软件总体设计

图4-1系统流程图

开始的时候,系统主持人按下开始按键,如果再没有按下开始按键的时候有用户抢答的话,系统会显示犯规选手和蜂鸣器发声提示,当主持人按下按键的时候,系统进行倒数,如果再倒数的时间内有用户抢答的话会显示选手的编号和剩余时间,如果超过抢答时间,系统会显示FF并蜂鸣器发声。

4.2程序设计原理

软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。

软件任务分析环节是为软件设计做一个总体规划。

从软件的功能来看可分为两大类:

一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。

这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。

软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。

在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。

各执行模块规划好后,就可以监控程序了。

首先根据系统功能和键盘设置选择一种最适合的监控程序结构。

相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。

这如同当一名操作工人比较容易,而当一个厂长就比较难了。

软件任务分析的另一个内容是如何安排监控软件和各执行模块。

整个系统软件可分为后台程序(背景程序)和前台程序。

后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断(如掉电中断)。

也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰。

智力竞赛抢答器要求有记忆功能,一次时间设置完,复位后不需重新进行时间设定,通过键盘扫描输出按键信息,再通过单片机将它转换成能在七段数码管上显示字型码。

当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功,同时显示其分数,分数的加减可有裁判手动进行。

采取独立式键盘,可以实现8路抢答。

在显示时使用的是七段数码管显示在本设计中根据实际情况采用的是动态显示方法。

臂并通过查表发将其在数码管上显示出来,其中P1口为字型码输入端,P2口低6位为字选段输入端。

通过查表将字型码送给7段数码管显示的数字。

软件去抖动,如果“开始键”按下就向下执行,否则就跳到开始。

采用发声报警,起到报警作用。

主持人按"抢答开始"键,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设30s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。

如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。

5系统调试

5.1硬件调试

抢答器的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺破带有包皮的导线,则会对电路造成短路现象。

在本抢答器的设计调试中遇到了很多的问题。

回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:

(1)数码管选用的时候没有注意采用的是共阴还是共阳,导致调试的时候数码管一直不能显示。

解决:

把共阴数码管换成数码管。

(2)最开始的时候以为单片机IO口直接可以驱动蜂鸣器发声,后来调试的时候久久不能出声音。

解决:

经过查找相关资料,知道扬声器需要三极管来驱动,后来把三极管放大器加上系统便可以正常工作。

5.2软件调试

1、打开Keil软件后,在Project菜单中选择NewProject命令,打开一个新项目。

保存此项目,输入工程文件名后,并保存工程文件的目录。

2、为项目文件选择目标器件。

3、上述设置好后,创建源程序文件并输入程序代码。

输入好代码后点击“文件/保存”。

4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。

5、开始编译,对项目文件进行编译。

若没有错误后进行硬件调试。

5.2调试结果

(1)在测试中遇到LED数码管为不显示时,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.

(2)LED数码管显示不正常,还有亮度不够,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。

查看烧写的程序是否正确无误,对程序进行认真修改。

经过一系列的问题查找后系统最终能正常工作,并完成所有功能。

6总结

本文研究设计的八路抢答器采用了通用的电子元器件,利用AT89C51单片机及外围接口实现强大系统,利用单片机的定时器、计数器定时和计数的原理,将软‘硬件有机的结合起来。

理论联系时间,体现出大学生的动手能力。

通过查资料和收集有关的文献,培养了自学能力和动手能力。

并且有原先的被动接受只是转换为主动寻求只是,这可以收拾学习方法上的一个很大突破。

在以往的传统学习模式下,我们可能会记住很多书本知识,但是通过毕业设计,我们学会了如何将学到的知识化为自己的东西,学会了怎么跟好的处理只是和实践相结合的问题,把握重点,攻克难关,学到用到活学活用。

在设计过程中由于时间仓促有很多地方难免存在不足之处,硬件设计已经完成,在软件设计中有些功能还尚未能开发出来。

但在以后的工作中,我们会严格要求自己最求完美。

回头再看看该设计,还可以将设计的扩展功能增强:

1可以设计声控装置,在主持说开始时,系统自动完成清零并开始时的功能。

2增加积分模块,可以设定初始积分,并记录每次抢答完成后的积分。

3将抢答按键使用无线实现,如红外线,是抢答者可以远距离进行抢答,并简化按键模块的线路布置。

如果提供相应的器材及时间上的宽限,硬顶可以完成上述扩展功能,进一步完善作品

7致谢

此次单片机课程设计是在**老师的细心指导下完成的,老师治学严谨的态度,渊博的知识感染着我,是我学习的榜样,使我受益无穷。

在此,特向老师表达诚挚的谢意。

除此之外,在课程设计过程中,还得到了其他老师、同学的帮助。

他们的无私帮助也是我得以完成本次课程设计的关键。

在此,我向他们表示由衷的感谢。

我还要感谢我的一些同学,他们在我最需要帮助的时候无私的伸出了援助之手。

在此,对于他们的无私帮助我表示深深的感谢。

真诚的感谢所有帮助过我的老师们和同学们。

 

参考文献

[1]彭伟.单片机C语言程序设计实训100例.电子工业出版社.2009年.

[2]吴运昌.模拟电子线路基础.广州:

华南理工大学出版社,2004年.

[3]付晓光.单片机原理与应用技术[M].北京:

清华大学出版社,2004:

138-141.

[4]李维祥.MCS-51单片机原理与应用[M].天津:

天津大学出版社,2002:

55-56.

[5]李广弟,朱月秀,王秀山.单片机基础[M].北京:

北京航空航天大学出版社,2001:

44-47.

[6]沙占友,葛家怡,马洪涛.集成化智能传感器原理与应用[J].北京:

电子工业出版社,2004:

74-81.

[7]张伟.单片机原理及应用[M].北京:

机械工业出版社,2002:

174-180.

[8]李玉峰,倪虹霞.MCS-51系列单片机原理与接口技术[M].北京:

人民邮电出版社,2004:

128-129.

[9]马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006.

[10]刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007.

附录A系统整体原理图

 

附录B实物图

正面

反面

附录C系统源程序

//****************************************************

//抢答器设计

//****************************************************

#include

sbitseg_1=P1^0;

sbitseg_2=P1^3;

sbitseg_3=P1^2

;

sbitkey_9=P1^7;

sbitbeep=P1^4;

#definedatP0

#defineOPEN0

#defineOFF1

#defineKey_portP2

unsignedintT0count=0;

unsignedcharTime_Left=30;

bitflag1=0;

bitflag2=0;

constunsignedcharcodeseg_dat[]={

0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28,0xff

};

unsignedcharkey_scan(void);

voidbuzzer(unsignedchart);

voiddis_1(unsignedcharnum1);

voiddis_2(unsignedcharnum2);

voiddelayms(unsignedinti);

voiddelayus(unsignedinti);

unsignedcharkey_scan(void)

{

unsignedcharget_port=0;

Key_port=0xff;

key_9=1;

get_port=Key_port;

if(get_port!

=0xff)

{

delayms(10);

get_port=Key_port;

if(get_port!

=0xff)

{

get_port=Key_port;

switch(Key_port)

{

case0xfe:

flag2=1;return1;

case0xfd:

flag2=1;return2;

case0xfb:

flag2=1;return3;

case0xf7:

flag2=1;return4;

case0xef:

flag2=1;return5;

case0xdf:

flag2=1;return6;

case0xbf:

flag2=1;return7;

case0x7f:

flag2=1;return8;

}

while(!

Key_port);

}

}

if(key_9==0)

{

delayms(10);

if(key_9==0)

{

flag1=1;

return9;

}

while(!

key_9);

}

return0;

}

voidbuzzer(unsignedchart)

{

unsignedchari;

for(i=0;i<100;i++)

{

beep=1;

delayus(t);

}

beep=0;

}

voiddis_1(unsignedcharnum1)

{

seg_1=OPEN;

seg_2=OFF;

seg_3=OFF;

dat=seg_dat[num1];

delayms(5);

dat=seg_dat[10];

}

voiddis_2(unsignedcharnum2)

{

unsignedcharshi,ge;

shi=num2/10;

ge=num2%10;

seg_1=OFF;

seg_2=OPEN;

seg_3=OFF;

dat=seg_dat[shi];

delayms(5);

dat=seg_dat[10];

 

seg_1=OFF;

seg_2=OFF;

seg_3=OPEN;

dat=seg_dat[ge];

delayms(5);

dat=seg_dat[10];

}

voiddelayms(unsignedinti)

{

unsignedintx,y;

for(x=0;x

for(y=0;y<100;y++);

}

voiddelayus(unsignedinti

{

unsignedintx;

for(x=0;x

;

}

//主函数

voidmain(void)

{

unsignedcharx=0;

while(!

flag1)

x=key_scan();

while(flag2==1)

{

buzzer

(2);

dis_1(x);

seg_1=OFF;

seg_2=OPEN;

seg_3=OFF;

dat=0x74;

delayms(5);

dat=seg_dat[10];

seg_1=OFF;

seg_2=OFF;

seg_3=OPEN;

dat=0x74;

delayms(5);

dat=seg_dat[10];

}

while(flag1)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

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