




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
滁州学院本科毕业论文本 科 毕 业 设 计(或论 文)论文题目 具有自动躲藏功能的闹钟小车 的设计与实现 作者姓名 X X 所学专业名称 计算机科学与技术 指导教师 XXX 2017年5月14日学 生: (签字)学 号: 2013211463答 辩 日 期: 2017年 5 月 14 日指 导 教 师: (签字)目 录摘要11 概述22 设计方案论证22.1 功能要求22.2 方案确定22.2.1 单片机的选择方案和论证22.2.2 时钟芯片的选择方案和论证32.2.3 电路部分最终方案确定33 主控制器和外围器件33.1 AT89S52单片机33.2 DS1302芯片介绍43.2.1 DS1302的性能特新43.2.2 DS1302工作原理43.3 LCD1602液晶显示屏介绍53.3.1 LCD1602的工作原理53.3.2 LCD1602的管脚功能53.4 E18-D80NK红外传感器介绍63.4.1 E18-D80NK光电传感器工作原理64 硬件电路设计64.1 总体思路设计64.1.1 红外避障电路74.1.2 液晶屏显示电路74.1.3 复位电路74.1.4 晶振电路84.1.5 有源蜂鸣器电路84.1.6 供电电源电路94.1.7 电机驱动电路95 软件的程序实现105.1 开发软件的介绍105.2 程序部分模块设计115.2.1 主函数设计115.2.2 LCD1602初始化程序设计125.2.3 红避障程序与电机驱动的实现135.2.4 实时时间、定时时间显示设计155.2.5 延时函数和蜂鸣器设定函数176 系统调试和功能测试176.1 系统调试176.1.1 软件调试176.1.2 硬件调试186.2 功能测试18结束语21参考文献21附录22致谢28 摘要本设计的主要功能是为了设计一款具有自动躲藏功能的闹铃小车系统的自动躲藏功能,即在闹钟工作前能自动移动到在某个位置躲藏起来,实现闹钟的实际作用。该系统设计包括硬件系统和软件系统两个部分。硬件部分采用AT89S52处理器为处理芯片,其他部分包括DS1302实时时钟芯片、LCD液晶显示屏和调时按键电路等成。软件部分采用keil系列软件为开发环境,采用C语言进行编程实现,首先将电路模块化,模块包括时钟程序模块、键盘程序模块、液晶显示程序模块以及红外避检测模块等。每个模块间相互作用,在LCD1602上显示当前时间以及定时时间,实现闹钟的完整功能。关键字:红外传感器;闹钟;AT89S52;DS1302;LCD1 概述在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统、智能型家用电器(冰箱、空调、彩电)等1。用单片机来控制的小型家电产品具有便携实用,操作简单的特点。闹钟,自从它发明的那天起,就成为人类的朋友。但传统的闹铃,用户在完成定时之后,一般放置在一个固定的位置,当定时时间到达时,很容易被使用者关闭,而起不到实际闹铃的作用,从而产生种种不便。因此需要设计具备躲藏功能的闹钟,具备躲藏功能的闹钟小车能在闹铃工作前自动行走,并在相应位置躲藏起来,然后再等闹铃运行响起,迫使使用者起床关闭闹铃,从而起到闹铃功能。本设计的主要功能是为了实现闹钟的自动躲藏功能,即在闹钟工作前能自动移动到在某个位置,实现闹钟的实际作用。系统由硬件部分和软件部分组成,硬件主要由AT89S52芯片、DS1302实时时钟芯片、LCD1602液晶显示屏和调时按键电路等组成,软件主要由时钟程序模块、键盘程序模块、液晶显示程序模块以及红外避检测模块等组成,最后整合所有模块,使其实现本设计的完整功能。2 设计方案论证2.1 功能要求本设计首先要实现一般闹钟的功能2,即实时时间的显示和手动校正、定时时间的设定和显示与定时蜂鸣;还需要实现闹钟的自动躲藏功能,即在闹铃工作前能自动避障行进。根据上述功能分析,系统的功能要求具体包括以下四点: (1)闹钟到点能准时响起(2)闹钟设定完成后红外避障能够完成5次避障,避障距离为20cm(3)能显示年、月、日、时、分、秒、星期、定时时间(4)能对时间和定时时间进行手动修正2.2 方案确定2.2.1 单片机的选择方案和论证单片机的发展主要经历了SCM、MCU、SoC三大阶段3。早期的SCM单片机都是8位或4位的。其中最成功的是Intel的8051,8051芯片是同步式的顺序逻辑系统,整个系统的工作完全依赖系统内部的时钟信号,而芯片内部并没有石英晶体谐振器。中期的SCM阶段代表芯片是MCS48系列单片机,该系列单片机各部分是通过内部的总线有机地连接起来的,片内带有4KB的程序存储器。当前的SoC是嵌入式系统式的独立发展之路,代表芯片有51系列8位高档位单片机,相比48系列单片机,51系列在片内RAM容量,I/O口功能,系统扩展方面都有很大的提高。在51系列中可选方案有89C51芯片和更高机种的89S52芯片。所以备选方案有如下两种:方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次插拔会对芯片造成一定的损坏。 方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。根据以上对89C51芯片和89S52芯片的性能分析,结合所要设计的系统需求,本设计拟采用AT89S52作为主控制芯片。2.2.2 时钟芯片的选择方案和论证方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA。根据以上对两种定时方案的优缺点分析,本设计拟采用DS1302作为时钟芯片。2.2.3 电路部分最终方案确定综上各方案所述,对此次作品的方案选定:以单片机AT89S52为主控制器,时间数据是用过时钟芯片DS1302来读取,闹钟时间的设定通过小键盘来设置,然后通过LCD液晶显示屏显示出来。3 主控制器和外围器件3.1 AT89S52单片机AT89S524是一种低功耗、高性能CMOS 8微控制器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。并具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89C52的标准功能如下:4k 字节闪速存储器,128字节内部随机存取存储器, I/O 口线,两个16位定时器,一个全双工串行通信口,振荡器等。不仅如此,由于AT89C51可降至0HZ,因此有节电模式,。在静态逻辑操作中,只允许RAM,串行口和中断,计数器继续工作。如果掉电,RAM中的内容将保存下来,但振荡器及其他部件停止工作,直到下一个硬件复位。3.2 DS1302芯片介绍低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能5。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。3.2.1 DS1302的性能特新(1)实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数; (2)用于高速数据暂存的318位RAM; (3)最少引脚的串行I/O; (4)2.55.5V 电压工作范围; (5)2.5V时耗电小于300nA; (6)用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式; (7)简单的3线接口; (8)可选的慢速充电(至VCC1)的能力。63.2.2 DS1302工作原理DS13027采用三线接口,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302在任何数据传送时必须先初始化,把RST引脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。管脚图如图3-1所示。图3-1 DS1302管脚图3.3 LCD1602液晶显示屏介绍液晶显示器的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。3.3.1 LCD1602的工作原理LCD1602中的1602表示每行显示16个字符,一共可以显示两行,只能显示ASCII码字符。12232表示液晶显示画面由122列、32行组成,共有122*32个点来显示各种图形。每8列对应一个字节的8位,每一个字节的内容与显示屏上相应位置的暗亮对应,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。3.3.2 LCD1602的管脚功能脚1:GND;脚2:VCC 电压为5v;脚3:V0的功能是调整液晶的对比度,当V0节VCC时对比对最低,接地时对比度最高;脚4:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;脚5:RW是读写信号引脚,当为高电平时开始读操作,低电平时开始写操作;脚6:E(或EN)端为使能端,高电平时读取信息,当有下降沿时执行指令;脚714:D0D7为8位双向数据端;脚1516:空脚或背灯电源。15为背光正极,16为背光负极;8LCD1602的管脚图如图3-2所示。图3-2 LCD1602管脚图3.4 E18-D80NK红外传感器介绍E18-D80NK这是一种集发射与接收于一体的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出。有效的避免了可见光的干扰。检测障碍物的距离可以根据要求通过尾部的电位器旋钮进行调节。实物图如图3-3所示。图3-3 E18-D80NK光电传感器实物图3.4.1 E18-D80NK光电传感器工作原理E18-D80NK光电传感器是通过把光强度的变化转换成电信号的变化来实现控制的。发送器对准目标发射光束,发射的光束一般来源于半导体光源,发光二极管(LED)、激光二极管及红外发射二极管。光束不间断地发射,或者改变脉冲宽度。接收器有光电二极管、光电三极管、光电池组成。在接收器的前面,装有光学元件如透镜和光圈等。在其后面是检测电路,它能滤出有效信号和应用该信号9。传感器检测到这一信号就可以确认正前方有障碍物,并送给单片机,单片机通过输入内部的算法,协调小车两轮工作,从而完成躲避障碍物动作。4 硬件电路设计4.1 总体思路设计以AT89S52单片机为主控芯片完成时钟电路、定时系统、红外避障电路、液晶屏显示、电机以及蜂鸣器的工作和组成。系统整体图如下4-1所示。图4-1 系统整体图4.1.1 红外避障电路E18-D80NK光电传感器传感器基本原理10:利用物体的反射性质。在一定范围内,如果没有障碍物,发射出去的红外线,因为传播距离越远而逐渐减弱,最后消失。如果有障碍物,红外线遇到障碍物,被反射到达传感器接收头。传感器检测到这一信号,就可以确认正前方有障碍物,并送给单片机,单片机进行一系列的处理分析。由于protues中没有红外传感器,我们用光电式耦合器来代替其功能,避障电路如图4-2所示。图4-2 避障电路图4.1.2 液晶屏显示电路LCD1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的,在本设计中通过函数来实现小键盘上的输入能够在LCD上实现读写操作和光标的移动。显示电路如图4-3所示。图4-3 LCD显示电路4.1.3 复位电路复位操作分为手动复位和上电自动复位。上电后由于电容C1进行充电,有电流结果R1,由于U=IR,RST被拉高,单片机开始上电复位;电容充满后,电流消失,RST被重新拉低,单片机结束复位;也可以手动复位,S1按下后进行复位,松开结束复位。本设计使用的是上电自动复位电路,可以节省硬件空间,减小设计体积,使其安装时更方便。复位电路如图4-4所示。图4-4 复位电路图4.1.4 晶振电路每个单片机系统里都有晶振,全称叫晶体震荡器11,在单片机系统里,晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振电路如图4-5所示。图4-5 晶振电路图4.1.5 有源蜂鸣器电路蜂鸣器有两种,无源蜂鸣器和有源蜂鸣器。源是指震荡源。无源内部不带震荡源,通直流信号无法令其鸣叫,而有源蜂鸣器内部带振荡器,所以通电之后就会鸣叫。有源蜂鸣器程序控制方便,单片机一个高低电平就可以让其发出声音,所以本设计选用了有源蜂鸣器。设计的电路图如图4.6所示。图4-6蜂鸣器电路图4.1.6 供电电源电路本设计使用两节电池为系统供电,电池使用方便。电源与其他硬件的连接如图4-7所示,一个单刀单掷开关控制整个系统的通电与否;LED是检测通电状态,当灯亮的时候,电路是通的,反之则不同。图4-7 供电电源电路4.1.7 电机驱动电路因为AT89S52单片机的I/O输出电流难以到达驱动电机,因此需要加一个驱动IC(ULN2003A),其作用是直接驱动电机;排阻的作用是为了保护电路。电机驱动电路如图4-8所示。图4-8 电机驱动电路5 软件的程序实现5.1 开发软件的介绍本系统的软件方面程序编译是使用了Keil系列的软件。 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil 软件提供了包括的C文件编译器、宏汇编编译器、数据链接器、代码库管理和强大的仿真调试器等在内的完整开发方案,将这些组合集成为一个强大的开发环境(Vision)。一般我们使用的电脑上的操作系统,例如WINXP、WIN7、WIN8、WIN10、WIN98、NT等都可以很好的运行keil软件。如果是使用C语言进行编程的话,那么Keil软件几乎当仁不让,而且就算不使用C语言进行编程而只用汇编语言进行编程的话,keil软件里面方便的集成开发环境和软件的仿真调试工具等也会起到事半功倍的效果。使用Keil软件的优点如下:(1)Keil C51生成的目标代码效率特别高,所以在在开发大型软件时更能体现高级语言的优势。 (2)C语言相对汇编语言来说要相对简单,有着明显的优势。Vision与Ishell分别是C51 for Windows 和for Dos集成的应用开发环境(IDE),这个集成好的开发环境能够完成代码的编辑、代码的编译、芯片内部的连接、在线调试、仿真这一系列的开发的流程。开发人员可以使用IDE本身或其他编辑器编辑文件C或汇编源文件。 51和C51分别接着编译器编译生成目标文件(.obj)。最后通过各种转换再转换成标准的十六进制的hex 文件,以供调试器dScope51 或tScope51利用源代码级调试的,也可以通过直接在模拟器目标板上调试使用,也可以直接写程序存储器如EPROM。本设计使用的是Keil Vision4这款软件。Keil Vision4运行界面如图5-1所示。图5-1 Keil4运行界面图5.2 程序部分模块设计5.2.1 主函数设计将每个部分模块化,封装成函数,在主函数进行调用即可。首先要初始化LCD1602、DS1302 RAM区中保存闹钟时分的数据,在while分支语句中调用函数,判断闹钟时间是否已到,调用蜂鸣器设定函数,判断按键是否有效。核心代码如下:void main() init(); /初始化LCD GetAlarmData(); Timer0Init(); while(1) if(fen1!=fen) /flag3 为闹钟铃响有效标记位,0时有效,1时无效 flag3=0; getnum(); /从DS1302中读取多个寄存器中的数据 while(flag2=1&enter=0&shi1=shi&fen1=fen&flag3=0) /判断闹钟时间是否已到 di(); delay(200); di(); delay(600); getnum(); display(); if(s1=0|s2=0|s3=0|s4=0) /判断是否有键被按下,若有键按下则置 flag3 为1,终止闹钟 delay(10); flag3=1; while(s1=0|s2=0|s3=0|s4=0) ; /如有键被按下,且未放开,则等待 if(flag2=1)time_bz=0; enter=0; display(); keyscan(); 5.2.2 LCD1602初始化程序设计本设计中LCD1602的8位数据线都接到了P2口,“P2”参数涉及到的函数有:void write_com(uchar com)和void write_data(uchar date),分别是写入LCD的显示方式和向LCD1602写入数据,后面都有介绍。LCD初始化程序核心代码如下:void init() /LCD初始化 lcden=0; / lcd信号使能端设定 lcdrw=0; /lcd读写选择端设定,0为写,1为读 RST=0; SCLK=1; write_com(0x38); /显示模式设置指令码,双列显示,字形5*7点阵 write_com(0x0c); /开显示,显示光标,光标不闪烁 write_com(0x06); / lcd光标初始化, write_com(0x01); /清除 LCD 显示屏 write_com(0x80); /显示“20” write_data(time0); write_data(time1); write_com(0x84); /显示“” write_data(time4); write_com(0x87); /显示“” write_data(time7); write_com(0xc7); /显示“:”, 即第二行第8个位,第二行从40开始算 write_data(time17); write_com(0xca); /显示“:”,0xca=0x80+0x4a,即第二行第11个位 write_data(time110); 创建一个write_com(uchar com)函数,主要功能是写入LCD的显示方式,其中调用了延时delay函数来减小误差,稳定数据。核心代码如下:void write_com(uchar com) /写入lcd显示方式 rs=0; /rs=0, 表明要写的是命令,而非数据 P0=com; /命令要在 en=1 前赋给数据口,并延时一会 delay(1); /延时1ms lcden=1; /en=1 并延时一会,即把命令取走,写给LCD delay(1); lcden=0; /en=0 关闭通讯,以便下次再置1时取走数据创建一个void write_data(uchar date)函数,主要功能是向LCD1602写入数据,其中也调用了延时delay函数来减小误差,稳定数据。核心代码如下:void write_data(uchar date) /向lcd1602写入数据 rs=1; /rs=1, 表明要写的是数据,而非命令 P0=date; /数据要在 en=1 前赋给数据口,并延时一会 delay(1); /延时1ms lcden=1; /en=1 并延时一会,即把命令取走,写给LCD delay(1); lcden=0; /en=0 关闭通讯,以便下次再置1时取走数据5.2.3 红避障程序与电机驱动的实现红外避障是要先由红外发射管与接收管的协调工作,即发射管发射红外信号,然后接收管接收信号经由单片机分析处理来判断是否要进行避障行进。E18-D80NK光电传感器在本设计中的壁障流程图如图5-2所示。图5-2 避障流程图由于红外避障传感器的组成,避障距离可以直接在红外传感器上调节,所以代码部分只需要设置避障次数,本设计中为方便观察,避障次数设置为5次。核心代码如下:void hw_scan() /避障5次if(flag_hw=0)delay(2);if(flag_hw=0)in1=1;in2=0;in3=0;in4=0;time_bz+;delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);else in1=1;in2=0;in3=1;in4=0;电机脉宽调制函数在定时器0函数里,转向控制的程序写在了避障函数中,通过控制车轮的前进与否,来实现小车的转向功能。in1,in2,in3,in4,分别是控制车轮的工作状态,当in1=1;in2=0;n3=0;in4=0时,小车实现转向;当in1=1;in2=0;in3=1;in4=0;时,小车直线前进。定时器函数核心代码如下:void Timer0Init(void)TMOD &= 0xF0;TMOD |= 0x01;TL0 = 0x50;/低五位装入初值TH0 = 0xFB;/高八位装入初值TF0 = 0;TR0 = 1; /启动定时器0 ET0 = 1; /开定时器0中断EA=0; /开关中断void tm0_isr() interrupt 1 using 1 TL0 = 0x50; TH0 = 0xFB; count+;if(count=5) ENAB=1;else ENAB=0;if(count=20) count=0; 5.2.4 实时时间、定时时间显示设计实时时间是通过读取DS1302的数据,处理后给相关变量、数组赋值,直接读到的数据是BCD码16进制的形式,然后需要将16进制转化成10进制再赋值给相关数组,最后在LCD上显示出来。核心代码如下:void getnum() /接收ds1302的数据,处理后给相关变量、数组赋值 uchar j; for(j=0;j4)+0;/年 num6保存年的低两位数,BCD码16进制形式 time3=(num6&0x0f)+0; /将2位BCD码16进制形式分离并转换成数字字符形式,分别赋给time2、time3 nian=(num6&0x70)4)*10+(num6&0x0f); / nian 保存年的低两位数,10进制、数值形式 time5=(num4&0x70)4)+0;/月 time6=(num4&0x0f)+0; yue=(num4&0x70)4)*10+(num4&0x0f); time8=(num3&0x70)4)+0;/日 time9=(num3&0x0f)+0; ri=(num3&0x70)4)*10+(num3&0x0f); time13=(num5&0x0f)+0;/星期 num5保存星期的1位数,BCD码16进制形式,转换成数字字符形式,分别赋给time13? week=(num5&0x0f); switch(time13) /星期字符数组赋值 case 1: time12=S; time13=u; time14=n; break; case 2: time12=M; time13=o; time14=n; break; case 3: time12=T; time13=u; time14=e; break; case 4: time12=W; time13=e; time14=d; break; case 5: time12=T; time13=h; time14=u; break; case 6: time12=F; time13=r; time14=i; break; case 7: time12=S; time13=a; time14=t; break; time15=(num2&0x70)4)+0; /时 time16=(num2&0x0f)+0; time18=(num1&0x70)4)+0; /分 time19=(num1&0x0f)+0; time111=(num0&0x70)4)+0; /秒 time112=(num0&0x0f)+0; 定时时间的设置是通过小键盘的输入来完成的,小键盘一共有4个按键,第一个按键就是设置键,通过按设置键来进入闹钟设置界面,并且在进入闹钟设置界面后会有闹钟图标()显示。核心代码如下:void display() /显示数据 uchar i; write_com(0x0c); /显示方式设定为:无光标,且不闪烁 if(flag2=1) time10=; /闹钟图标设定 else time10= ; if(flag1=0) /flag为0时正常显示年、月、日、时、分、秒等 write_com(0x80); /首行,第一个位 for(i=0;timei!=0;i+) /timei!=0,用结束符来判定是否已到数组未尾 write_data(timei); write_com(0xc0); /0x0c=0x80+x0x40, 即LCD第二行,第一个位 for(i=0;time1i!=0;i+) /用结束符来判定是否已到数组未尾 write_data(time1i); if(flag1=1) /flag为1时进入闹钟时间设定界面 time38=fen1/10+0; time39=fen1%10+0; time35=shi1/10+0;time36=shi1%10+0; if(choice=0) time32=N;time33=O; /显示“NO” write(0xc4, 0x00); / 保存闹钟开/关状态,以便下次开机时读取 if(choice=1) time32=O; time33=K; /显示“OK”write(0xc4, 0x01); / 保存闹钟开/关状态,以便下次开机时读取 write_com(0xc0); for(i=0;time3i!=0;i+) /用结束符来判定是否已到数组未尾 write_data(time3i); 5.2.5 延时函数和蜂鸣器设定函数创建一个1ms的延时函数,其他函数调用时只需要更改延时时间就行。延时函数主要在void hw_scan()避障函数、void di()蜂鸣器设定函数和按键防抖中起作用。延时1ms函数代码如下:void delay(uint z) /1ms延时函数 uint x,y; for(x=z;x0;x-) for(y=1;y0;y-);蜂鸣器设定函数void di(),只需要调用一个延时函数,然后在蜂鸣器工作时,主函数调用蜂鸣器设定函数来完成闹钟功能。蜂鸣器设定函数代码如下:void di() /蜂鸣设定函数 beep=0; delay(800); beep=1; 6 系统调试和功能测试6.1 系统调试系统调试包括软件调试和硬件调试。软件调试是利用本系统的开发软件进行在线仿真,能发现和解决程序错误,也可以发现硬件故障。硬件调试是排除系统硬件的故障,包括电路设计错误、元器件连接错误和焊点是否牢固等。6.1.1 软件调试Keil C52生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。软件调试可用模块程序设计技术,一个个子程序分别调试,通过检测,可以发现程序中的语句错误、死循环错误等,找到错误所在位置,然后修改代码,达到矫正程序的作用。我们将编辑好的源程序放入Keil中,通过调试发现错误,之后修改错误,从而让程序编译成功为止,通过调试让我们的代码达到实现设计的功能要求。向单片机中烧入hex文件如图6-1所示。图6-1 烧入hex文件6.1.2 硬件调试硬件调试时贯穿整个设计中。我们首先要确定元器件是否失效,使用万用表等工具确定元器件的失效与否。其次我们要确定接线的错误,在焊接前,我们都需要认真确认接线的正确性,保证不能出现极性错误或是接线短路错误。最后在完成全部的接线工作后,使用万用表等工具确认整体接线无错误。6.2 功能测试完成所有的焊接工作后,将程序烧进单片机,开始对功能逐一测试,以确保系统正常运行。整体实物图如图6-2所示。图 6-2 整体实物图1.打开开关,小车由两节在小车底部的电池带动,系统初始化,此时在LCD屏上显示当前时间和星期。测试图(一)如图6-3所示。图6-3 测试图(一)2.进入闹钟设置界面,此时在LCD屏的左侧有个字样,即为进入闹钟设置界面了。测试图(二)如图6-4所示。图6-4 测试图(二)3.闹钟设置完成后,小车前进进行5次避障,避障距离设置为20cm。测试图(三)到测试图(四)为避障完成过程,如图6-5到图6-6所示。图6-5 测试图(三)图6-6 测试图(四)4完成5次避障之后,等待闹钟到点工作。这次设置闹钟的时间是22:51分,闹钟到点后蜂鸣器准时工作。测试图(五)如图6-7所示。图6-7 测试图(五)结束语在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化。本设计就是一个智能化的缩影。传统的闹钟在床头时能随手关闭,有时达不到闹钟本身的效果,而闹钟小车在这时就能完成闹钟应有的功能,迫使人起床找到闹钟并关闭闹钟。整体设计符合家用智能的思想。在开始设计之前,需要根据理论和实际情况完成闹钟小车的整体预构,即需要的材料,需要设计的每个小部分,然后把每个小部分组合起来,完成整体的设计达到我们想要的功能。对于关键问题“删繁就简”。分解关键问题,逐一解决,然后整合。在功能实现时,先完成每个相关部分的功能,然后组合,实现整体功能。随后进行调试,达到闹钟小车应有的功能。 在实现功能的过程中,可以使用网络的便捷进行搜索,学习理论知识,借鉴别人的设计思路与方法,使功能实现的更完善。实践环节,通过不断地测试与调试,将软硬件测试系统的整合在一起,使得实现功能起到辅助理论研究和检验理论研究的作用。通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过此次设计巩固了以前所学的专业知识,让自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力。 参考文献1 蒋伟明. 中国智能家居的现状及发展趋势J. 科技视界, 2014 (18): 326-326.2 熊印国. 浅谈智能时钟控制系统设计J. 今日科苑, 2008 (24): 61-61.3 何立民. 单片机技术的现状与未来J. 中国计算机报, 1995 (30) : 41-43.4 张大波. 嵌入式系统原理设计与应用M. 北京: 机械工业出版社, 2005.5 黄明强. DS1302 在单片机系统中的应用J. 保定师范专科学校学报, 2004, 17(2): 30-33.6 赵海兰, 朱剑, 赵祥伟. DS1302 实时显示时间的原理与应用J. 电子技术, 2004, 1: 43-45.7 孙雪梅, 范久臣. 实时时钟芯片在单片机系统中的应用J. 沈阳教育学院学报, 2005, 7(2): 132-134.8 周志敏, 周纪海, 纪爱华. LED 驱动电路设计与应用M. 人民邮电出版社, 2006.9 田鹏, 李泽滔. 基于单片机的红外避障系统设计J. 自动化与仪器仪表, 2015 (6): 40-42. 10 于连国, 李伟, 王妍玮. 基于单片机的智能小车设计J. 林业机械与木工设备, 2011, 39(4): 39-40.11 陈立刚, 曲波, 陈立东. 一种车用智能电子钟的设计与实现J. 科技创新导报, 2008 (13): 10-10.附录1.作品原理图2.核心源程序代码:void di() /蜂鸣设定函数 beep=0; delay(800); beep=1; void display() /显示数据 uchar i; write_com(0x0c); /显示方式设定为:无光标,且不闪烁 if(flag2=1) time10=; /闹钟图标设定 else time10= ; if(flag1=0) /flag为0时正常显示年、月、日、时、分、秒等 write_com(0x80); /首行,第一个位 for(i=0;timei!=0;i+) /timei!=0,用结束符来判定是否已到数组未尾 write_data(timei); write_com(0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瓦工贴瓷砖合同范本
- 融资租赁公司 合同范本
- 汽车区域销售合同范本
- 按揭买车贷款合同范本
- 年药店合同范本
- 瓷砖加工合同范本
- 兼职临时协议合同范本
- ktv买卖合同范本
- 家庭饮料购买合同范本
- 智能锁供货合同范本
- 国家保安员资格考试试卷(十套)
- 注射泵操作使用课件
- 【A公司轮胎出口业务的营销策略探究开题报告8000字(论文)】
- 2024年山东省东营市中考语文试卷真题(含答案解析)
- DZ∕T 0248-2014 岩石地球化学测量技术规程(正式版)
- 基本药物临床应用管理制度
- 某某信访案件化解方案
- +【高中语文】文章修改(教学课件)+高二语文+(统编版+选择性必修下册)
- 办公用品售后服务方案
- 放射科新技术介绍
- 盆底功能障碍问卷(PFDI20)
评论
0/150
提交评论