导航:首页 > 操作系统 > 单片机课设方案论证

单片机课设方案论证

发布时间:2024-10-17 07:11:29

单片机 智能小车 课程设计

智能小车的设计与制作
摘要:本课题组设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示所走的路程和行走的时间,并可发声发光。作品可以作为高级智能玩具,也可以作为大学生学习嵌入式控制的强有力的应用实例。
作品以两电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动作,以达到自身控制。电机驱动电路采用高电压,高电流,四通道驱动集成芯片L293D。其中避障采用红外线收发来完成;铁片检测部分采用电感式接近开关LJ18A3-8-Z/BX检测;黑带检测采用红外线接收二极管完成;趋光部分通过3路光敏二极管对光源信号的采集,再经过ADC0809转化为数字信号送单片机处理判别方向。由控制单元处理数据后完成相应动作,实现了无人控制即可完成一系列动作,相当于简易机器人。
关键字:智能控制 蔽障 红外线收发 寻迹行驶 趋光行驶
1.总体方案论证与比较
方案一:采用各类数字电路来组成小车的控制系统,对外围避障信号,黑带检测信号,铁片检测信号,各路趋光信号进行处理。本方案电路复杂,灵活性不高,效率低,不利于小车智能化的扩展,对各路信号处理比较困难。
方案二:采用ATM89S52单片机来作为整机的控制单元。红外线探头采用市面上通用的发射管与及接收头,经过单片机调制后发射。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,黑带采用光敏二极管对光源信号采集,再经过ADC0809转化为数字信号送到单片机系统处理。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地满足题目的要求。
比较以上两种方案的优缺点,方案二简洁、灵活、可扩展性好,能达到题目的设计要求,因此采用方案二来实现。方案二的基本原理如图1所示。
图1 智能车运行基本原理图框图

避障部分采用红外线发射和接受原理。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,产生的高低电平信号经过处理后,完成相应的记录数目,驱动蜂鸣器发声。黑带寻迹依靠安装在车底部左右两个光敏二极管对管来对地面反射光感应。寻光设计在小车前端安装3路(左、中、右)光敏电阻对光源信号采集,模拟信号经过ADC0809转化为数字信号送到MCU处理。记程通过在车轮上安装小磁块,再用霍尔管感应产生计数脉冲。记时由软件实现,显示采用普通七段LED。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现
2.模块电路设计与比较
1) 避障方案选择
方案一:采用超声波避障,超声波受环境影响较大,电路复杂,而且地面对超声波的反射,会影响系统对障碍物的判断。
方案二:采用红外线避障,利用单片机来产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。外界对红外信号的干扰比较小,且易于实现,价格也比较便宜,故采用方案二。
红外线发射接受电路原理图如图2所示。
采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。 接收管输出TTL电平,有利于单片机对信号的处理。采用红外线发射与接收原理。利用单片机产生38KHz信号对红外线发射管进行调制发射,发射距离远近由RW调节,本设计调节为10CM左右。发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。利用单片机的中断系统,在遇障碍物时控制电机并使小车转弯。由于只采用了一组红外线收发对管,在避障转弯方向上,程序采用遇障碍物往左拐方式。如果要求小车正确判断左转还是右转,需在小车侧边加多一组对管。外界对红外信号的干扰比较小,性价比高。 。调试时主要是调制发射频率为接收头能接收的频率,采用单片机程序解决。发射信号强弱的调节,由可调精密电阻调节。
图2 红外线发射接受电路原理图

2)检测铁片方案选择
方案一:采用电涡流原理自制的传感器,取才方便,但难以调试,输出信号也不可靠,成功率比较低,难以准确输出传感信息。
方案二:采用市面易购的电感式接近开关,本系统采用市面比较通用LJ18A3-8-Z/BX来完成铁片检测的任务。虽然电感式接近开关占的体积大,对本是可以接受,且输出信号较可靠,稳定性好,受外界的干扰小,故采用方案二。
检测铁片电路原理图如图3所示。
图3 检测铁片电路原理图

3)声音提示
方案一:采用单片机产生不同的频率信号来完成声音提示,此方案能完成声音提示功能,给人以提示的可懂性比较差,但在一定程度上能满足要求,而且易于实现,成本也不高,我们出自经费方面考虑,采用方案一。
方案二:采用DS1420可分段录放音模块,能够给人以直观的提示,但DS1420录放音模块价格比较高,也可以采用此方案来处理,但方案二性价比不如方案一。
4)黑带检测方案选择
方案一:采用发光二极管发光,用光敏二极管接收。由于光敏二极管受可见光的影响较大,稳定性差。
方案二:利用红外线发射管发射红外线,红外线二极管进行接收。采用红外线发射,外面可见光对接收信号的影响较小,再用射极输出器对信号进行隔离。本方案也易于实现,比较可靠,因此采用方案二。黑带检测电路图如图4所示。
输出信号进入74LS02。稳定性能得到提升。当小车低部的某边红外线收发对管遇到黑带时输入电平为高电平,反之为低电平。结合中断查询方式,通过程序控制小车往哪个方向行走。电路中的可调电阻可调节灵敏度,以满足小车在不同光度的环境光中能够寻迹。由于接收对管装在车底,发射距离的远近较难控制,调节可调电阻,发现灵敏度总是不尽人意,最后采用在对管上套一塑料管,屏蔽外界光的影响,灵敏度大幅提升。再是转弯的时间延迟短长控制。
图4 黑带检测电路图
3)计量路程方案
方案一:利用红外线对射方式,在小车的车轮开一些透光孔来计量车轮转过圈数,从而间接地测量路程。
方案二:利用霍尔元件来对转过的车轮圈数来计程,在车轮子上装小磁片,霍尔元件靠近磁片一次计程为车轮周长。此方案传感的信号强, 电路简单,但精度不高。
如果想达到一定的计量精度,用霍尔传感元件比较难以实现,因为在车轮上装一定量的小磁片会相互影响,而利用红外线对射方式不会影响各自的脉冲,可达到厘米的精度,因此采用方案一来实现。计量路程示意图见图5。
通过计算车轮的转数间接测量距离,利用了霍尔元件感应磁块产生脉冲的原理,再对脉冲进行计数。另可采用红外线原理提高记程精度,其方法为在车轮均匀打上透光小孔,当车轮转动时,红外光透射过去,不断地输出脉冲,通过单片机对脉冲计数,再经过一个数据的处理过程,这样就可把小车走过的距离计算出来,小孔越多,计数越精密。
图 5 计量路程示意图
3)智能车驱动电路
方案一:采用分立元件组成的平衡式驱动电路,这种电路可以由单片机直接对其进行操作,但由于分立元件占用的空间比较大,还要配上两个继电器,考虑到小车的空间问题,此方案不够理想。
方案二:因为小车电机装有减速齿轮组,考虑不需调速功能,采用市面易购的电机驱动芯片L293D,该芯片是利用TTL电平进行控制,对电机的操作方便,通过改变芯片控制端的输入电平,即可以对电机进行正反转操作,很方便单片机的操作,亦能满足直流减速电机的要求。智能车驱动电路实现如图6所示。
图6 智能车驱动电路

小车电机为直流减速电机,带有齿轮组,考虑不需调速功能,采用电机驱动芯片L293D。L293D是着名的SGS公司的产品。为单块集成电路,高电压,高电流,四通道驱动,设计用来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达),和开关电源晶体管。内部包含4通道逻辑驱动电路。其额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;Vs电压最大值也是36V,经过实验,Vs电压应该比Vss电压高,否则有时会出现失控现象。表1是其使能、输入引脚和输出引脚的逻辑关系。
表1 引脚和输出引脚的逻辑关系

EN A(B) IN1(IN3) IN2(IN4) 电机运行情况
H H L 正转
H L H 反转
H 同IN2(IN4) 同IN1(IN3) 快速停止
L X X 停止
L293D可直接的对电机进行控制,无须隔离电路。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。调试时在依照上表,用程序输入对应的码值,能够实现对应的动作,调试通过。
3) 寻找光源功能
方案一:在小车前面装上几个光电开关,通过不同方向射来的光使光电开关工作,从而对小车行驶方向进行控制,根据光电开关特性,只有当光达到一定强度时才能够导通,因此带有一定的局限性。
方案二:在小车前面装上参数一致的光敏二极管或者光敏电阻,再通过A/D转换电路转换成数字量送入单片机,单片机再对读入的几路数据进行存储、比较,然后发出命令对外围进操作。对方案一、二进行比较,方案二硬件稍为复杂,但能够对不同强度的光进行采集以及比较,操作灵活,所以采用方案二。
寻找光源电路图如图7所示。
图7 寻找光源电路图
3)显示部分
方案一:采用LCD显示,用单片机可实现显示数据,但显示亮度和字体大小在演示时不尽人意,价格也比较昂贵。
方案二:采用LED七段数码管,采用经典电路译码和驱动,电路结构简单,并且可以实现单片机I/O口的并用,显示效果直观,明亮,调试容易。故采用LED数码管显示。
4)显示电路如图8所示。
图8 显示电路

3. 系统原理及理论分析
1) 单片机最小系统组成
单片机系统是整个智能系统的核心部分,它对各路传感信号的采集、处理、分析及对各部分整体调整。主要是组成是:单片机AT89S52、模数转换芯片ADC0809、小车驱动系统芯片L293D、数码管显示的译码芯片74LS47、74LS138及各路的传感器件。
2)避障原理
采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。 接收管输出TTL电平,有利于单片机对信号的处理。
3)计程原理
通过计算车轮的转数间接测量距离,在车轮均匀打上透光小孔,当车轮转动时,红外光透射过去,不断地输出脉冲,通过单片机对脉冲计数,再经过一个数据的处理过程,这样就可把小车走过的距离计算出来。
4)黑带检测原理
利用光的反射原理,当光线照射在白纸上,反射量比较大,反之,照在黑色物体上,由于黑色对光的吸收,反射回去的量比较少,这样就可以判断黑带轨道的走向。由于各路传感器会对单片机产生一定的干扰,使信号发生错误。因此,采用一级射极输出方式对信号进行隔离,这样系统对信号的判断就比较准确。
4. 系统程序设计
用单片机定时器T0产生38KHz的方波,再用定时器T1产生250Hz的方波对38KHz方波进行调制。为了提高小车反应灵敏度,对红外线接收信号及黑带检测信号都采用中断法来处理。用定时方法对铁片检测、计量路程、倒车、拐弯及数码管动态扫描进行处理。
主程序流程图见图9,各子程序图见图10、图11、图12。
图9 主程序流程图
图 10 外部中断0服务子程序
图 11 外部中断1服务子程序
图12 定时器1中断子程序
6.调试及性能分析
整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。首先写入电机控制小程序,控制其正反转,停机均正常。加入避障子程序,小车运转正常,调整灵敏度达最佳效果。加入显示时间子程序,显示正常。铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。趋光电路主要由三个光敏电阻构成,调整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。
整机综合调试,上电后对系统进行初始化,接着控制电机使小车向前行驶,突然发现系统即刻进入外部中断1,重复多次测试,结果都是自动进入该中断。推断是由刚上电时电机起动所引起,为了避免上电瞬间的影响,在启动小车后延时几毫秒,再开外部中断,结果问题解决。允许的话应采用双电源供电,即电机和电路应分开供电,L293D与单片机之间采用隔离信号控制。这样就不会出现小车启动时程序出错和数码管显示闪动的问题。在计程精度上,可用红外线原理获得较高精度。
7.结论
通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化,智能小车能够完成各项功能到达车库。
8.参考文献
《单片机应用技术》
《周立功单片机》
《单片机原理与应用》
《8051单片机程序设计与实例》
《MCS-51单片机实验指导》

② 基于51单片机的数字电压表总结与体会

通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计、组装并调试一个数字电压表测量系统。需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。
在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。动手能力得到很大的提高。从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。在以后学习中我要加强对使用电路的设计和选用能力。但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。这对今后从事技术工作无疑是个很好的训练。通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。
还有就是每次在组团做试验都会感觉特别的充实,我们可以按照自己设计的电路去完成,老师也不是死板的要求我们怎么怎么,而是给了我们尽可能大的自己决定的余地,这次的元器件都是按照我们设计出来的电路参数给定的,而且每位老师都很耐心的为我们解决试验中所出现的问题,最后真心的感谢老师对我们课程设计的建议和帮助,我们才得以圆满的完成这次课程设计!

③ 单片机的毕业论文怎么写

一、毕业设计题目及要求 (2个) 1、基于单片机控制的电动机Y-△启动的设计 要求:1)控制器为单片机,电动机为三相异步电动机;2)启动时间为3秒;3)由按键设置电动机Y-△运行、停止。 2、基于单片机控制的可调直流稳压电源的设计 要求:1)控制器为单片机,电压输出范围为0-10V,电压精度为0.1V;2)通过数码管显示电压值;3)由按键设置电压值。 二、毕业设计用到的主要软件(及功能) 毕业设计用到的主要软件(及功能):Keil 51(源程序编译),Proteus(电路仿真),AutoCAD(绘图), Visio(绘流程图), Protel 99SE(原理图电路设计,PCB板制作) 三、单片机方面毕业设计要求 1、学会编写程序(用C语言或汇编语言),用Keil 51软件对源程序进行编译。 2、学会用Proteus电路仿真软件对所设计的硬件电路进行仿真。 3、在写毕业论文时,学会用Word、AutoCAD, Visio,Protel 99SE等软件对程序流程图、电路原理图等进行绘制。 相关答案 ↓位朋友,以51单片机为例。51现在很多都是用仿真器来进行在线调试的,而每个公司的仿真器都会有自带的编程软件,当然,跟keil是差不了多少的。 步骤大体如下: 1.新建,进行程序的编写 2.连上仿真器或烧写器,这一步有可能要对仿真器或烧写器进行设置,具体可看它们的使用说明 3.对程序进行编译,这一步会自动检测你的程序有没错,如果有错,是不能进入下一步的.如果你用的是仿真器,这一步编译成功后就可以直接运行进行在线调试了。 4.如果用的是烧写器,那就进行烧写 各个软件和调试方法会有些不同,但大体就是这样,一些调试工具的说明书也有很详细的说明。 学参数测量技术涉及范围广,特别是微电压、微电流、高电压以及待测信号强弱相差极大的情况下,既要保证弱信号的测量精度又要兼顾强信号的测量范围,在技术上有一定的难度。传统的低成本仪表在测量电压、电阻时都采用手动选择档位的方法来转换量程。在使用中,当忘记转换档位时,会造成仪表测量精度下降或损坏。 现代电子测量对系统的精度要求越来越高且智能化程度也越来越高。全量程无档自动量程转换电压表和电阻表是在保证测量精度不下降的前提条件下省去手动转换量程的工作,得到了广泛应用。 本文介绍了一种基于AT89S52 单片机 的智能多用表。该表能在单片机的控制下完成直流电压、电阻和直流电流的测量。测量电流部分采用了简单的I/V转换电路完成测试;测量电压部分结合模拟开关CD4051和运算放大器OP07构成程控放大器,实现了自动量程转换;测量电阻部分也由模拟开关CD4051和运算放大器OP07相结合,在单片机控制下完成了自动量程转换。电流、电压和电阻的最终测量信号都在单片机的控制下由12位A/D转换器TLC2543进行采集,采集的信号经单片机数据处理后通过LCD(12864)显示出来,测量结果还可以由带有串行EEPROM的CPU存储器和监控器的X25045进行多个数据保存。 关键词:TLC2543 自动量程转换 程控增益放大器 电压 电阻 电流 目录 摘要1 Abstract 2 第一章 绪论 5 1. 1 概述 5 1. 2 智能仪器/仪表国内外发展概况 5 1. 3 课题研究目的及意义 6 第二章 系统结构及功能介绍 8 2. 1 系统功能和性能指标 8 2. 1. 1 仪表功能 8 2. 1. 2 性能指标 8 2. 1. 3 本机特色 8 2. 1. 4 系统使用说明 9 2. 2 系统工作原理概述 9 第三章 方案设计与论证 11 3. 1 量程选择的设计与论证 11

④ 基于单片机设计的直流电机调速系统文献综述怎么写

单片机控制的直流电机调速系统 摘要:本文采用AT89C52作为主控芯片,设计了一种直流电机高速系统。AT89C52产生单极性工作制的定频PWM脉冲,配合驱动能力强大的L298,从而实现控制和调整直流电机转速和转向的功能。利用软件编程,能够设置多个占空比不同的脉冲,使得电机转速可以逐步增大或减小,同时在LCD上显示电机的工作状态,易于观察和识别。本设计主要由电机调速控制模块和LCD显示模块组成,具有电路简单,可靠性高,运行稳定的特点,是对于小型直流电机调速装置的一种探究。 关键词:AT89C52 定频PWM LCD 直流电机 目 录 1 绪论... 1 2 方案设计... 1 2.1 功能要求... 1 2.2 方案论证... 1 3 系统硬件的设计... 3 3.1 电机调速控制模块... 3 3.2 LCD显示模块... 6 3.3 硬件设计总原理图... 11 4 系统软件的设计... 12 4.1 主程序... 12 5 调试及性能分析... 14 5.1 调试与测试... 14 6 结论... 15 7 致谢... 15 参考文献... 17 附录... 18

⑤ 51单片机关于密码锁的毕业设计,论文

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#includeunsignedcharcodeps[]={1,2,3,4,5};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                              

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedcharpslen=9;unsignedchartemplen;

unsignedchardigit;unsignedcharfuncount;

unsignedchardigitcount;

unsignedcharpsbuf[9];

bitcmpflag;

bithibitflag;

biterrorflag;

bitrightflag;

unsignedintsecond3;

unsignedintaa;

unsignedintbb;

bitalarmflag;

bitexchangeflag;

unsignedintcc;

unsignedintdd;

bitokflag;

unsignedcharoka;

unsignedcharokb;

voidmain(void)

{ 

unsignedchari,j; 

P2=dispcode[digitcount]; 

TMOD=0x01; 

TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

TR0=1; 

ET0=1; 

EA=1; 

while(1)  

 {     

if(cmpflag==0)       

{         

if(P3_6==0)//functionkey          

 {             

for(i=10;i>0;i--)             

for(j=248;j>0;j--);     

        if(P3_6==0)               

{               

  if(hibitflag==0)      

             {    

                 funcount++; 

                    if(funcount==pslen+2)

                       { 

                        funcount=0;

                         cmpflag=1;

                        }

                      P1=dispcode[funcount];

                   }

                   else

                     {

                        second3=0;

                     } 

                while(P3_6==0);

               }

           }

         if(P3_7==0)//digitkey

           {

             for(i=10;i>0;i--)

             for(j=248;j>0;j--);

             if(P3_7==0)

               {

                 if(hibitflag==0)

                   {

                     digitcount++; 

                 if(digitcount==10)

                       {

                         digitcount=0;

                       }

                     P2=dispcode[digitcount];

                     if(funcount==1)

                       {

                         pslen=digitcount;                         

templen=pslen;

                       }

                       elseif(funcount>1)

                         { 

                          psbuf[funcount-2]=digitcount;

                         }

                   }

                   else

                     {

                       second3=0;

                     }

                 while(P3_7==0);

               }

           }

       } 

      else

         {

           cmpflag=0;

           for(i=0;i

             { 

              if(ps[i]!=psbuf[i])

                 {

                   hibitflag=1;

                   i=pslen;

                   errorflag=1;

                   rightflag=0;

                   cmpflag=0;

                   second3=0;

                   gotoa; 

                }

             }  

         cc=0; 

          errorflag=0; 

          rightflag=1;

           hibitflag=0;

a:   cmpflag=0;

         }

}

}

voidt0(void)

interrupt1using0{ TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

if((errorflag==1)&&(rightflag==0)) 

{

     bb++;

     if(bb==800)

       {

         bb=0;

         alarmflag=~alarmflag;

       }

     if(alarmflag==1)

       {

         P0_0=~P0_0;

       }

     aa++;

     if(aa==800)

       {

         aa=0;

         P0_1=~P0_1;

       }

     second3++;

     if(second3==6400)

       {

         second3=0;

         hibitflag=0;

         errorflag=0;

         rightflag=0;

         cmpflag=0;

         P0_1=1; 

        alarmflag=0;

         bb=0; 

        aa=0; 

      }

   }

 if((errorflag==0)&&(rightflag==1))

   {

     P0_1=0;

     cc++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cc<1000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif(cc<2000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibitflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_1=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=1;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okflag==1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka++;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oka==2)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okb==3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;}

}

⑥ 51单片机四路抢答器毕业论文 只要四路

第一章 绪论设计的四路数字抢答器,每路设计一抢答按钮供选手使 用,并设置一个系统清除和抢答控制总开关 S,该开关由主持 人控制。 抢答器具有限时抢答功能,每一轮的限时抢答时间设定为 30 秒。主持人启动"开始"键后,在设定的时间内,参赛选手 进行抢答有效,否则无效。 抢答器具有锁存与显示功能。选手抢答成功则显示相应 的编号,此时其他选手无法抢答。优先抢答选手的编号一直 保持到主持人将系统清除为止。用计时器数码管显示当前剩 余的答题时间, 当答题剩余时间为 5 秒时,小灯闪烁提示;当答题时间结束 时,蜂鸣器发出响声,提示答题者答题时间到。 本课题我们主要采用单片机电路来实现的,主要设计思 路是:在主持人下达命令之后,若选手在 30s 内没有闭合开 关,就进入下一环节;若有选手闭合开关,主机就能够准确 判断出第一抢答信号并将其锁存,同时将其余输入信号封锁, 使其它抢答无效,此时主持人根据屏幕上显示的号码判断是 哪位选手可以做答,此时最先闭合开关的选手开始进入答题 倒计时,若在 60s 内答题则视为有效;否则无效。 程序流程图如图 1-1.1-2 所示: 选手发送图: 开始 初始化:P0.P2 口清零 定时器 T1 方式选择;串行口发送方式选 择;启动定时器 1 并装入初值 判断抢答是否成功 向主机发送选手号 显示答题倒计时 图 1-1 主持人接受图:开始 初始化: P0.P1.P2.口清零, 串行口接受方式选择,T1 接收方 式选择,启动计数器 T1,并装入初值,开总中断和串行口 中断 总开关是否按下 允许接收,并显示抢答时间倒计时 是否接受到抢答信号 显示优先按下键的选手号码, 并屏蔽其他选手 号码 图 1-2 系统方案论证 第二章 系统方案论证方案一:如图 2-1,采用一个单片机,一个计时器,一个 数码管,选手通过按下开关作为输入信号,完成抢答输入信 号的触发。主持人根据选手的输入信号准确判断出最先按下 开关的选手,并屏蔽其他抢答信号,让优先按键的选手开始 作答,同时计时器开始计时倒计时。电路主要运用了定时器 和计数器,该电路的优点是电路图比较简单,缺点是抗干扰 能力差,缺乏实际利用价值。 图 2-1 方案二:采用五个单片机,五个计时器,一个数码管, 电路主要运用串行口中断和定时器计数器的工作原理。接通 电源后, 主持人将开关拨到"清零"状态, 抢答器处于禁止状态, 编号显示器灭灯,主持人将开关置开始"状态,宣布"开始"抢 答器工作,开始抢答时间倒计时,如果在抢答时间倒计时内 无人抢答,则直接进入下一环节,若有人在这时间内优先抢 答,则其开始作答,与此同时抢答倒计时,改换成作答倒计 时,当倒计时到 5s 时,信号灯闪烁提醒作答选手,当计时结 束时,蜂鸣器发出报警声响提示选手。选手抢答实行优先锁 存,优先抢答,选手的编号一直保持到裁判将系统清零为止。 该电路的缺点是电路复杂,优点是便于每位选手观看倒计时, 实用性较好,在实际生活中应用较多。 通过以上两个方案的比较,我们不难发现第二个电路增 加了一些控制电路,控制起来比较容易一些,效果和实用性 比第一个好,故本实验采用第二个原理图。 系统图各位选手通过按键发送请求信号告知主持人,主持人通 过数码管上号码告诉哪位选手可以答题,如图 2-2 1号 4号 主 持 人 2号 3号 图 2-2 第三章 理论分析本课题的电路采用单片机 AT89C51 作为控制芯片, 分别是 主持人和每位参赛选手都有自己的控制器。每位选手的控制 芯片 P0 和 P2 口上都接一个共阴极的数码管作为答题倒计时 的显示。P1^4 口接一按键,按键的另一端接地,供选手抢答 使用。 P1^6 接音频放大电路, 并在其输出端接一个喇叭,作 为答题剩余时间提醒。当选手按下按键抢答成功时,它就会 通过控制芯片上的串行口发送自己的选手号,同时也启动了 答题倒计时,当答题时间只剩下 5 秒时,喇叭就会发出“叮 咚”提醒选手抓紧时间答题。 主持人的控制芯片的 P0 . P1 和 P2 口都接一共阴极的数码 管,其中 P1 口的数码管用来显示抢答成功选手的号码。P1 和 P2 口的数码管开始时用来显示允许抢答的时间限制,当有 选手抢答成功时,就转为显示抢答时间倒计时。P3^7 接开关 和指示灯,当开关按下指示灯亮时才允许选手们进行抢答。当 有一号选手抢答成功,则通过软件关闭串行口中断屏蔽其他 的选手。 选手向主持人发送自己的选手号码是采用串行口单工通 讯的原理。 每个控制芯片内部都有一个功能强大的全双工的 异步通信串行口, 其内部有两个物理上独立的接收. 发送缓冲 期 SBUF,可同时发送. 接收数据。每次串行口的使用,串行 口需初始化后, 才能完成数据的输入、输出。其初始化过程如 下: (1) 按选定串行口的操作模式设定 SCON 的 SM0、SM1 两 位二进制编码。(2) 对于操作模式 2 或 3, 应根据需要在 TB8 中写入待发送的第 9 位数据。(3) 若选定的操作模式不 是模式 0, 还需设定接收/发送的波特率。设定 SMOD 的状态, 以控制波特率是否加倍。 若选定操作模式 1 或 3, 则应对定 时器 T1 进行初始化以设定其溢出率。 这些初始化须通过软件 编程来实现。 本设计采用的是模式 2--9 位数据异步通讯方式。 其工作原理为: (1).一帧为 11 位:9 位数据位,1 个起始位(0),1 个停 止位(1)。第 9 位数据位在 TB8/RB8 中,常用作校验位和多机 通讯标识位(2).RXD:接收数据端,TXD:发送数据端。(3). 波特率: 方式 2:B=(2SMOD/64)×fosc ,本设计用定时器 1 来产生。(4).发送:先装入 TB8,写入 SBUF 并启动发送, 发送结束,TI=1。接收:REN=1,允许接收。接收完一帧,若 RI=0 且第 9 位为 1 (或 SM2=0),将接收数据装入接收 SBUF, 第 9 位装入 RB8,使 RI=1;否则丢弃接收数据,不置位 RI。 原理图如下: 图3 试验及数据分析 第四章 试验及数据分析 1. 实验环境在实验室里用 proteus 仿真,用 keil 编程,最后得到仿真 结果。 2. 数据(1)主机工作 ) 主持人闭和开关后,数码管显示零,计时器显示抢答倒 计时,从 30s 开始倒计时。如图 4-2-1: 图 4-2-1 (2)选手一抢答 ) 在抢答倒计时时间内,选手一闭合开关,主机数码管上 显示”1”,选手一旁边的发光二极管亮,与此同时,主持人和选 手一的计时器开始显示答题倒计时,时间在 60s 内,如图 4-2-2: 图 4-2-2 (3)选手二抢答 ) 在抢答倒计时时间内,选手二闭合开关,主机数码管上 显示”2”,选手二旁边的发光二极管亮,与此同时,主持人和选 手二的计时器开始显示答题倒计时,时间在 60s 内,如图 4-2-3: 图 4-2-3 (4)选手三抢答 ) 在抢答倒计时时间内,选手三闭合开关,主机数码管上 显示”3”,选手三旁边的发光二极管亮,与此同时,主持人和选 手三的计时器开始显示答题倒计时,时间在 60s 内,如图 4-2-4: 图 4-2-4 (5)选手四抢答 ) 在抢答倒计时时间内,选手四闭合开关,主机数码管上 显示”4”,选手四旁边的发光二极管亮,与此同时,主持人和选 手四的计时器开始显示答题倒计时,时间在 60s 内,如图 4-2-5: 图 4-2-5 3. 分析抢答器由单片机以及外围电路组成,由于采用单片机, 使得外围电路非常简单,有如下功能抢答限时、选手答题计 时抢答自锁,灯光指示、暂停复位、电子音乐报声;抢答规 定时限 0-30 秒可调; 面板上设有组号与计时窗口, 显示清晰, 同步显示,互不干扰集抢答器、数显倒计时器于一机; 可设 定抢答、答题两种倒计时时间;抢答器具有锁存与显示功能。 即选手按动按钮, 锁存相应的编号, 并在 LED 数码管上显示; 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定, 本次时间设定为 30 秒,当主持人启动"开始"键后,定时器进 行减计时等等,总之抢答器很有实用价值。 第五章 心得体会今年参加了全国大学生电子设计大赛培训,培训过程中 的艰辛只有亲身经历过才知道里面的酸甜苦辣,我相信这段 时间会给我们留下美好的回忆。在经历了艰苦的培训之后, 我们组只有一个信念,就是无论如何也要尽我们最大的努力, 让老师选上我们,只有选上了,我们的梦想才真的开始了, 否则前面的付出就付诸东流了。 我们做的是抢答器。我们本来很快就有思路了,但给老 师一看的时候,他说太没难度了,会影响我们的选拔分,没 办法,我们只好把难度往上提了,这一提难度我们可就连续 整了 3 天,在这 3 天我们除下吃饭和睡觉的时间不在外,其 余时间通通泡在实验室内,最终通过我们的集体努力,我们 的实验也算有所成果吧。 通过参加这次培训,发现有了很多的体会和收获:首先 是学习能力的加强。这种学习能力包括获取资料的能力、理 解前人思路的能力、系统设计能力、动手能力、分析排除故 障能力、表达能力等多方面,电子设计竞赛的赛制就决定了 上述能力缺一不可。其次是团队精神的培养。电子设计竞赛 要求三人组队参赛,集体计算成绩,这就使得三个人必须互 相信任、互相配合、分工合作。在顺境时要相互提醒保持冷 静,逆境时要相互鼓励共度难关,不能相互埋怨。 我们组永远忘不了这次经历,永远忘不了和我们一起奋 斗的老师和学哥,我们永远坚信我们组是最棒的! 参 考 文 献 [1] 余发山, 单片机原理及应用技术 ,中国矿业大学出版社, 2003; [2]王卫东,基于单片机的最简连线抢答器的设计与制作,1999; [3]李朝青.2001.单片机原理与接口技术.北京:北京航空航天 大学出版社.94-103,339-348; [4] 沈庆阳、郭庭吉 版社; [5]李朝青主编,《单片机原理与接口技术》,北京航天航空大学 出版社,1994; [6]何立民主编,《单片机应用与设计》,北京航天航空大学出版 社,1990; 8051 单片机实践与应用 清华大学出

电子科协竞赛项目报告书 参赛作品: 单片机的 参赛作品:基于 51 单片机的四路电子抢答器 作品 小 组 成 员: TH XZ 专 业 班 级: 电信 1005 班 报告提交日期: 2011 报告提交日期: 2011 年 3 月 16 日 日期 目录 1 设计要求与功能 ........................................................................................................... 4 1.1 设计基本要求…………………………………………………………………...4 2 硬件设计 ...................................................................................................................... 4 2.1 控制系统及所需元件…………………………………………………………. 4 2.2 抢答器显示模块………………………………………………………………...5 2.3 电源方案的选择 ............................................................................................... 6 2.4 抢答器键盘的选择 ........................................................................................... 6 2.5 蜂鸣器模块 ........................................................................................................ 7 2.6 外部振荡电路 .................................................................................................... 7 3 程序设计 ...................................................................................................................... 7 3.1 程序流程图 ........................................................................................................ 7 3.2 系统的调试…… ………………………………….. …………………………9 3.3 焊接的问题及解决……………………………………………………… …10 4 总结 ............................................................................................................................. 10 附录 C 程序 ................................................................................................................... 11 II 一设计要求与功能 1.1 设计基本要求(1)抢答器同时供 4 名选手或 4 个代表队比赛使用,分别用 4 个按钮 K1~ K4 表示。 (2)设置裁判开关 k5 和清零开关 k6,该开关由主持人控制,当主持人按 下 k6,系统复位,预备抢答,当主持人按下总控制控制开关 k5,开始抢答; (3) 抢答器具有定时抢答功能, 抢答时间为倒计时 15 秒。 当主持人启动 “开 始”键后,定时器进行减计时,同时扬声器发出短暂的提示声响,声响持续的时 间 0.5 秒左右,当计时小于 5 秒后,每减少一秒,便报警一次以提示选手。 (4)抢答器具有锁存功能,参赛选手在设定的时间内进行抢答,抢答有效, 蜂鸣器发声,计时停止,数码管上显示选手的编号和时间,选手相应的信号灯被 点亮,其他选手再抢答时无效。 (5)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答。 等待下一轮抢答。 。 二 硬件设计 2.1 控制系统及所需元件控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其 中单片机 STC89C52 是系统工作的核心,它主要负责控制各个部分协调工作。 所需元件:该系统的核心器件是 STC89C52。各口功能: P0.0-P0.3 是数码管的位选口; P2.0-P2.7 是数码管的段选口,为其传送段选信号; P1.0-P1.3 是 4 组抢答信号的输入口; P1.4、P1.5 由裁判控制,分别是抢答开始\复位功能键; P1.6 为蜂鸣器的控制口; P3.4-P3.7 为选手信号灯输出口; 在其外围接上电复位电路、数码管电路、LED 发光二极管、按键电路及扬声 器电路。 电子抢答器用单片机来设计制作完成的, 由于其功能的实现主要是通过软件 3 编程来完成的,所以采用单片机 STC89C52,它是一个低电压,高性能 CMOS 8 位 单片机,片内含 8k bytes 的可反复擦写的 Flash 只读程序存储器和 512 bytes 的随机存取数据存储器(RAM) ,器件采用 ATMEL 公司的高密度、非易失性存储技 术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储 单元,功能强大的 STC89C52 单片机可为您提供许多较复杂系统控制应用场合。 下图为其 I/O 口引脚图: STC89C52 管脚图 2.2. 抢答器显示模块显示模块分为数码管模块和 LED 信号灯模块 分别采用四位一体共阴极数码管和四个发光二极管,体积小,功耗低,故障 率低,程序编译容易,资源占用较少。 (见图 1,图 2) 图1 4 图2 2.3 电源方案的选择系统需要 5V 电源来驱动单片机 STC89C52。 利用电脑的 USB 接口可以提供 5V 电压来驱动单片机。 2.4 抢答器键盘的选择键盘是单片机不可缺少的输入设备,是实现人机对话的纽带。键盘按结构形 式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件 方法来产生键码。 在单片机中使用的都是非编码键盘, 因为非编码键盘结构简单, 成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。 本设计采用独立式键盘。 键盘接口中使用多少根 I/O 线,键盘中就有几个按键,键盘接口使用了 6 根 I/O 口线,该键盘就有 6 个按键,这种类型的键盘,其按键比较少,且键盘中 各按键的工作互不干扰。因此可以根据实际需要对键盘中的按键灵活的编码。如 图所示。 最简单的编码方式就是根据 I/O 输入口所直接反映的相应按键, 按下的状态 进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU 可以通过直接 读取 I/O 口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识 别,这样形式的键盘结构简单,按键识别容易。 5 独立式键盘的缺点是需要占用比较多的 I/O 口线, 当单片机应用系统键盘中 需要的按键比较少或 I/O 口线比较富余时,可以采用这样类型的键盘。 其模块电路图如图 4 所示。采用六个 BUTTON 按钮作为抢答的选择按钮,与 STC89C52 的 P1.0-P1.5 相连。 图 4 键盘模块 2.5 蜂鸣器模块蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计 算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等 电子产品中作发声器件,其图形如图所示. 6 2.6 外部振荡电路外部振荡电路单片机必须在 AT89C52 的驱动下才能工作.在单片机内部有一个 时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部 的各个单元,外部振荡电路见图所示。 三 程序设计 3.1 程序流程图: 程序流程图:开始 初始化部分 N K5= =0 Y 启动中断,数码管开始倒计时 N 若有选手抢答 Y 中断停止,数码管显示选手的标号并点亮信号灯 结束抢答器主程序流程图 7 定时器 0 中断 N 1 秒时间到? Y 秒加 1 数码管显示秒值 中断返回 抢答器定时器中断流程图 扫 描 键 盘 Y K0 键按下 N Y K1 键按下 N Y K2 键按下 N K3 键按下 N 与 K2 键对应的发光二极管亮及数码管显示 与 K1 键对应的发光二极管亮及数码管显示 与 K0 键对应的发光二极管亮及数码管显示 Y 与 K3 键对应的发光二极管亮及数码管显示 扫描停止 键盘扫描流程图 主程序我们组所设计的抢答器的程序采用的是 C 程序设计,C 语言的显着特点是用 二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。 8 这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函数 形式提供给用户的,这些函数可方便的调用,并具有多种循环、 条件语句控制程序 流向,从而使程序完全结构化。虽然 C 语言也是强类型语言,但它的语法比较灵 活,允许程序编写者有较大的自由度。本次设计的主程序中包括时钟设计程序, 定时器中断子程序,LED 显示程序以及按键控制子程序,具体程序见附件。 3.2 系统的调试系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的 硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配人情 况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、 完善,最终开发成实用产品。 硬件调试分单元电路调试和联机调试, 单元电路试验在硬件电路设计时已经 进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加 工工艺性错误(如错线、开路、短路等) 。这种调试可单独模拟进行,也可通过 开发装置由软件配合进行。硬件联机调试则必须在系统软件的配合下进行。 软件调试一般包括分块调试和联机调试两个阶段。 程序的分块调试一般在单 片机开发装置上进行, 可根据所调程序功能块的入口参量初值编制一个特殊的程 序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单 独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以 通过单步运行或设置断点的方法, 查出原因并加以改正, 直到运行结果正确为止。 这时该 程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法 进行调试。 程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完 整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性 和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条 件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在 联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成 功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性 和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。 9 3.3 焊接的问题及解决一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直 接响产品的正常运行。 造成焊接质量不高的常见原因是:①焊锡用量过多,形成焊 点的锡堆积;焊锡过少,不足以包裹焊点。②冷焊。焊接时烙铁温度过低或加热 时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹(如同 豆腐渣一样!)。 ③夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成 电连接不良。若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;若加热温 度太高,则焊点下有一层碳化松香的黑色膜。对于有加热不足的松香膜的情况, 可以用烙铁进行补焊。 对于已形成黑膜的,则要"吃"净焊锡,清洁被焊元器件或印 刷板表面,重新进行焊接才行。④焊锡连桥。指焊锡量过多,造成元器件的焊点之 间短路。这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。⑤焊剂过 量,焊点明围松香残渣很多。当少量松香残留时,可以用电烙铁再轻轻加热一下, 让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。 ⑥焊点表 面的焊锡形成尖锐的突尖。这多是由于加热温度不足或焊剂过少,以及烙铁离开 焊点时角度不当浩成的内。 。 总 结 经过近半个月的努力,在我们合作下,我们较好的完成了这次设计项目,通 过此次电子制作比赛,我们重新认识到了自学的重要性,以及学以致用的道理。 我们在图书馆和网上查阅了大量的资料,同时也认识到了图书馆的重要作用。 通过此次的抢答器的设计,让我们更加重视到专业知识的重要性及动手能力的 必要性,在整个制作过程中,我们出现很多问题,但我们并没有因此而放弃, 在不断调试和失败中,我们不仅学到了专业知识,更是磨炼了我们的心智,让 我们受益匪浅。任何事情只要去做,多多去尝试,努力的要以自己去做为前提 的心态,那么任何事情即使做的不好,也会受益很多,不是有句话叫做:心态 决定的成败的话吗,实在是有理。无论做什么事情都不可能一帆风顺,碰到阻 碍不要舍弃,不要踟蹰不前,不经历风雨,怎么见彩虹! 在今后的学习过程中,应该多到图书馆看一些专业方面的书籍,比如 protel 画图,proteus 仿真软件,以丰富自己的知识,掌握更多的硬件与软件设计技巧, 使我们在今后的制作中提高效率。 这次设计任务也使我们加深了对单片机及接口 10 技术的理解和应用,由于知识水平的局限,设计中可能会存在着一些不足,我们 真诚的接受老师和同学的批评和指正.。 附录( 程序) 附录(C 程序) #include<reg52.h> #define uchar unsigned char #define uint unsigned int Uchar code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管 0~9 编码 uint i,j,time,num; uchar ge,shi; bit flag,flag1; sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2; sbit k4=P1^3;sbit k5=P1^4;sbit k6=P1^5; //k1~k4 为选手按键,k5 为主持人开关,k6 为复位键 sbit beep=P1^6;//定义蜂鸣器的端口 sbit wei1=P0^0;sbit wei2=P0^1; sbit wei3=P0^2;sbit wei4=P0^3;//定义数码管的位选端口 sbit led1=P3^4;sbit led2=P3^5; sbit led3=P3^6;sbit led4=P3^7;//定义 LED 灯的端口 void delay(uint a)//延时函数 { uint i,j; for(i=a;i>0;i--) for(j=110;j>0;j--); } 11 void display()//显示函数 { shi=time/10; ge=time%10; P2=table[num];//显示选手编号 wei1=0;delay(1); wei1=1; P2=table[shi]; wei3=0; delay(1); wei3=1; P2=table[ge]; wei4=0; delay(1); wei4=1; } void keyscan() { if(k1==0)//按键按下 { delay(10);//延时去抖动 if(k1==0) { num=1;led1=0;flag=1;TR0=~TR0;TR1=0;//开定时器 0,关定时器 1 beep=1;delay(500);beep=0;//蜂鸣器响 500 毫秒 while(!k1);//等待按键释放 } } if(k2==0) { delay(10); if(k2==0) //显示时间 12 { num=2;led2=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k2); } } if(k3==0) { delay(10); if(k3==0) { num=3;led3=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k3); } } if(k4==0) { delay(10); if(k4==0) { num=4;led4=0;flag=1;TR0=~TR0;TR1=0; beep=1;delay(500);beep=0; while(!k4); } } display();//显示选手编号和时间 if(time==0) { TR0=0; TR1=0; flag=1;//关计时器 0 和 1 13 } if(time==6) TR1=1; } void init() { TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1;ET0=1;ET1=1; beep=0;//作品上蜂鸣器是赋高电平响,开始置低关闭 } void main() { init();//初始化 while(1) { display(); if(k6==0) { delay(10); if(k6==0) { P3=0xff;//关闭所有 LED 灯 flag1=k6; time=15; wei1=0; num=0; P2=table[num]; 14 while(!flag1) { if(k5==0) { delay(10); if(k5==0) { flag1=1;flag=k5; TR0=1; beep=1;delay(500);beep=0; while(!k5); while(!flag) keyscan();//扫描键盘 } } } } } } } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; i++; if(i==20) { i=0; time--; } } 15 void time1() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; j++; if(j==10) { j=0; beep=~beep; } } 16

阅读全文

与单片机课设方案论证相关的资料

热点内容
压缩机气缸滑片槽 浏览:530
java逻辑思维 浏览:648
在哪里看app的内存 浏览:894
视频加密什么意思 浏览:859
清除网络连接命令 浏览:36
解压足疗店 浏览:283
崽崽app在哪个电视剧里出现过 浏览:803
pythongooglenet 浏览:726
编译后生成apk 浏览:719
python传值是什么意思 浏览:667
江苏在哪个app查重名 浏览:566
php数据锁 浏览:258
京东安维app在哪里下载 浏览:634
程序员被技术总监骂了2小时 浏览:504
安卓手机dsvideo用什么播放器 浏览:926
程序员不会弄表格 浏览:973
cad保存PDF格式怎么弄 浏览:46
如何用命令方块上矿车一直走 浏览:84
单片机和语音模块通信 浏览:853
一个加密网络的概念 浏览:197