版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE7PAGE基于单片机的液晶万年历设计摘要二十一世纪单片机技术发展迅速,从民用到军用的各种仪器,从日常生活到学习生活中的各种工具,这些都离不开单片机,比如红绿灯、车上的仪表盘、机器人等。单片机是集中央处理器、计数器和定时器、随机存储器、只读存储器等于一体的微型计算机。虽然它体积微小,但却可以完成许多功能。电子万年历是一种日常计时工具,在现代社会越来越流行。它可以直观的显示秒、分、时、日、月、周、年和温度等信息。如果时间不正确,可以通过按键进行调整。在万年历的设计当中,由于功能较多,所以采用模块化的的设计。程序方面采用C语言编写。C语言的特点就是编写简单且层次分明清晰,它就有结构化的控制语句,很适合用于单片机的设计。在Keil软件上编写好程序后会生成一个后缀为“.hex”的文件,将其烧入单片机即可。本设计涉及到许多本科课程当中的基本知识。在程序编写方面有C语言基础知识,在CPU方面有单片机原理相关知识,在外围器件上有数字电子技术基础知识。每项功能实现时需要哪种硬件,程序应该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。本文设计了一个基于单片机的液晶万年历,该万年历的CPU采用的是STC89C52单片机,通过DS1302来获取实时信息,DS18B20温度采集模块将温度转换为数据,通过LCD1602液晶显示模块将时间和温度数据显示在屏幕上。这部分要写你具体做的东西,要客观的,不要这种心得式的东西通过独立3个独立按键对时间信息进行调整。这部分要写你具体做的东西,要客观的,不要这种心得式的东西关键词:单片机;万年历;时间信息;温度检测ABSTRACTInthe21stcentury,thedevelopmentofsingle-chiptechnologyisrapid.Fromciviltomilitaryinstruments,fromdailylifetolearningtools,theseareinseparablefromsingle-chipcomputers,suchastrafficlights,cardashboards,robots,andsoon.Thesinglechipmicrocomputerisamicrocomputerthatintegratesacentralprocessor,acounterandatimer,arandomaccessmemory,andaread-onlymemory.Althoughitissmall,itcanperformmanyfunctions.Electronicperpetualcalendarisadailytimingtool,whichisbecomingmoreandmorepopularinmodernsociety.Itcanintuitivelydisplayinformationsuchasseconds,minutes,hours,days,months,weeks,yearsandtemperature.Ifthetimeisincorrect,youcanadjustitbypressingthekey.Inthedesignoftheperpetualcalendar,becauseofitsmanyfunctions,itadoptsamodulardesign.TheprogramiswritteninClanguage.ThecharacteristicofClanguageisthatitissimpletowriteandclearinlayers.Ithasstructuredcontrolstatements,whichisverysuitableforthedesignofsinglechipmicrocomputer.AfterwritingtheprogramontheKeilsoftware,afilewiththesuffix".hex"willbegeneratedandburnedintothemicrocontroller.Thisdesigninvolvesbasicknowledgeinmanyundergraduatecourses.BasicknowledgeofClanguageinprogramming,basicknowledgeofMCUprincipleinCPU,andbasicknowledgeofdigitalelectronictechnologyinperipheraldevices.Whatkindofhardwareisneededtoimplementeachfunction,howtowritetheprogram,howtoimplementthealgorithm,etc.,withoutacertainbasis,itisimpossibletoachieveagoodrealization.ThisarticledesignsaLCDperpetualcalendarbasedonasingle-chipmicrocomputer.TheCPUoftheperpetualcalendarusesaSTC89C52single-chipmicrocomputertoobtainreal-timeinformationthroughtheDS1302.TheDS18B20temperatureacquisitionmoduleconvertsthetemperatureintodata.TheLCD1602liquidcrystaldisplaymoduledisplaysthetimeandtemperaturedataonthescreenon.Adjustthetimeinformationthrough3independentkeys.Keywords:singlechip;calendar;timeinformation;temperaturedetection目录26014摘要 I1539ABSTRACT II7163目录 IV20624第1章绪论 1316241.1.1课题背景 1235271.1.2课题研究的意义 193811.2液晶万年历研究现状 291671.3本文完成的主要工作 35456第2章系统硬件设计 5169552.1系统结构 530422.2STC89C52单片机 5326792.2.1单片机最小系统 6113562.2.252单片机的电平特性 6244772.2.352单片机I/O介绍 7259642.3时钟模块 8210492.4温度采集模块 9149342.5LCD1602液晶显示模块 9150692.6独立按键模块 103552.7本章小结 1115733第3章系统软件设计 12252183.1DS1302时钟模块 1238403.1.1DS1302的工作原理 12663.1.2DS1302的读写 12110653.1.3DS1302的控制寄存器 13177433.1.4日历、时钟寄存器 1383313.2DS18B20温度采集模块 14253623.3LCD1602显示模块 15278373.452单片机的中断系统 16128443.5系统总程序 18307183.6KeiluVision4软件 19276133.6.1KeiluVision4开发软件简介 19269263.6.2KeiluVision4的结构 19111643.7Proteus仿真软件 2096303.8本章小结 2125190第4章系统的调试 2280894.1软件调试 22293034.2硬件调试 224375结论 2411参考文献 251510致谢 268866附录 27第1章绪论1.1课题背景及研究的意义1.1.1课题背景万年历是中国古代传说中最古老的太阳历。LCD万年历是使用数字电路技术实现小时,分钟和秒的手表。与机械表相比,它具有更高的精度和直觉性,更长的使用寿命,并且被广泛使用。LCD万年历以直观的图像和语音提示的形式向人们发送信息,以达到准确记录时间的目的。LCD万年历按其功能大致分为两类:一种是语音型,可以通过触摸或声音提供时间信号功能;另一种是阅读型,还具有在显示时间和时间时的照明功能。其他信息,更适合于夜间的公共场所,例如车站大道,走廊和候车厅等,需要全天候24小时为人们提供服务。在21世纪,随着数字技术的迅速发展,大规模集成电路和单片机的技术也已经成熟。该单片机具有体积小,成本低的特点。它可以广泛地嵌入玩具,机器人,家用电器,仪器和汽车电子系统中。工业控制单元,办公自动化设备,金融电子系统,个人信息终端和电子设备,已成为现代电子产品的重要组成部分。纸质万年历打开起来很麻烦,而且浪费纸张。更重要的是,它体积大且不易携带,因此诞生了基于单片机的液晶万年历。电子万年历的问世代表着钟表业的飞跃。他不仅是技术上的进步,而且为人们的生活提供了许多便利。与纸质万年历相比,电子液晶万年历不仅可以清晰,准确地显示日期,时间,星期等,方便了需要使用的人,而且体积小,携带方便,省电。节能环保,在查看日历的同时,还可以看到时间,温度等信息。1.1.2课题研究的意义由于主要去说电子万年历现在做到什么程度,以引出自己的设计随着电子计数的迅速发展,特别是大规模集成电路出现,给人类生活带来了根本性的变化,尤其是单片机计数的应用产品已经走进了千家万户。近年来,我国科技不断发展,我国经济发展的支柱产业——电子产业获得了长足的发展,各种电子产品琳琅满目,随处可见,随着电子产品的更新速度不断加快,各种功能越来越强大,款式新颖的电子产品不断问世。万年历便是这一发展趋势中的代表,万年历则顺应了人们对时间方面的要求。它的出现给人们的生活带来许多方便,在时间极其宝贵的现代生活中,起作用更是不言而喻的。他在学校、车站、医院、电影院、公司等公共场所的应用非常广泛。但传统的万年历除了显示时间之外,功能较为单一。为了顺应技术发展和人们生产生活需求,各种功能的新式万年历不断涌现,且功能不断更新。万年历作为电子类的小产品以其方便、实用等优势成为市场上的宠儿,同时也成为单片机设计培训中一个很实用的课题。因为这个课题有很好的开发性和可挥发性,因此对设计者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且要求设计的万年历在操作上力求简洁,功能上尽量齐全,显示界面也要出色。所以万年历不论从实用角度还是培养能力角度都很有价值。主要去说电子万年历现在做到什么程度,以引出自己的设计1.2液晶万年历研究现状随着科技快速发展,单片机方面的技术也在不断进步。美国DALLAS公司推出的具有直流充电功能的低功耗实时时钟电路DS1302具有许多优点,例如使用寿命长,误差小和直观的数字表示。2012年,许昌学院的吴宏宇提出了基于AT89S51单片机和DS12C887时钟芯片的电子万年历的电路设计和软件设计。在时间调整方面,使用了遥控器形式。2014年,巢国强发文简要介绍了单片机万年历的工作原理,包括系统功能和主要硬件两大部分。2015年,山西省广播电视局张志梅提出了一种基于单片机的多功能万年历设计方法。其中,硬件部分使用AT89C52作为控制核心,分别使用DS18B20和时钟芯片DS1302进行温度检测和设置时钟。LCD1602上显示,另外增加了闹钟功能。软件部分用C语言编程,以实现时间和日期设置过程,温度显示过程和闹钟设置过程。同年,林志谋研究了基于单片机的红外遥控万年历和温度指示仪。它由STC90C516RD+单片机控制模块,DS1302时间生成模块,DS18B20温度采集模块,CHQ1838红外接收器模块和LCD1602液晶显示模块组成。遥控器和温度显示可以解决壁挂式万年历的时间和日期调整不便的问题。2016年,东营技术学院的徐欣设计了一款单芯片智能数字时钟,并提出利用GPS全球定位系统的时间同步功能实现时钟自动调整和校准。它对钟表的自动时间调整也有一定的局限性,不能广泛使用。同年,王玉元和张欣设计了基于单片机的万年历,可以同时显示万年历,温度和湿度,并集成了多种功能,包括校准时间,查询农历等。日期,设置闹钟等,具有很好的实用性。2017年,黄磊,雷正荣等人申请了用于自动计时Wi-Fi网络的数字万年历的专利。2018年,天津三星电子的张银辉设计了以AT89C51微控制器为核心的LCD万年历,采用DS1302时钟芯片和LCD1602液晶显示模块,通过软硬件结合简化硬件电路,改善系统的稳定性。2019年,张春雨对万年历芯片DS1302进行了功能测试方法研究。经过长期的实验测试,证实该测试系统可以缩短集成电路芯片DS1302的测试时间,提高测试精度,达到预期的目的,并具有一定的便携性。综合上述研究,可以得出,第一,电子万年历的设计包括软件设计和硬件设计两部分,其中硬件设计包括电源电路设计、单片机最小系统设计、液晶显示电路设计及时钟电路设计等,而软件设计主要解决编程相关问题;第二,当前的万年历不仅仅可以显示年、月、日、星期、时、分、秒和温度,还可以接入语音报时。随着AI,物联网技术的不断发展,万年历或将与他们结合。1.3本文完成的主要工作本文要设计一个基于STC89C52单片机的使用方便、电路简单、低功耗、便于携带的液晶万年历。主要的功能是在液晶屏幕上显示秒、分、时、日、月、周年和温度,并通过独立按键可以调节时间。按下独立按键1,可以触发中断,使单片机停止走时并进入调试状态;按下独立按键2可以选择调整秒还是分或者时等;按下独立按键3可以对目标进行加1。本文所要完成的主要内容包括以下几个方面:第一章为绪论。主要介绍了课题的研究背景,国内外的研究现状等,并对各个章节的内容做了简要的概括。第二章介绍了单片机STC89C52的工作原理,单片机最小系统的组成,单片机的引脚以及中断函数的使用等。第三章介绍系统的硬件部分,包括DS1302的使用,LCD1602的使用和DS18B20的使用。先概述了各个部分的原理及管脚功能,最后将所有模块汇总,介绍系统整体框架结构。第四章介绍系统程序,同第三章的方法类似,先介绍各个模块的程序及流程图,再介绍总的程序流程。第五章描述实物的制作以及系统焊接,调试。
第2章系统硬件设计这里面缺少关于芯片或者是模块选择的原因就是模块很多,为什么要选这个,比如说你为什么选51单片机你这个设计自己设计的电路很少,得把模块选择这种东西写的详细点这里面缺少关于芯片或者是模块选择的原因就是模块很多,为什么要选这个,比如说你为什么选51单片机你这个设计自己设计的电路很少,得把模块选择这种东西写的详细点2.1系统结构本设计分为硬件设计和软件设计两大部分。硬件设计由STC89C52单片机、DS1302时钟芯片、DS18B20温度采集模块、LCD1602液晶显示模块和独立按键模块组成。单片机作为主控制器,通过C语言编写的程序来驱动单片机的I/O口输出高低电平,这个输出的高低电平变化会控制外接芯片或者电路进行读写或显示等操作。此项目采用模块化设计的方法,共分为DS1302程序模块、LCD1602程序模块、DS18B20程序模块、和主程序模块四个模块。在Keil软件上进行编译,编译成功后会生成一个后缀为.hex文件。将hex文件烧入单片机后就可以驱动单片机的管脚,使各个模块对数据进行收发,以此来实现单片机的功能。系统结构图如图2-1所示。图2-SEQ图3-\*ARABIC1系统硬件结构2.2STC89C52单片机微型计算机由主板和外设构成。主板里面含有CPU、RAM和总线控制器。外设包括键盘、鼠标、显示器和打印机等。主板和外设是通过I/O接口相连接的。单片机也是一种微型计算机,将CPU、接口电路、RAM和ROM等固化在一个芯片中,就构成了单片机,它可以完成微型计算机的基本功能。STC89C52的内部结构如图2-2所示,它是以8位CPU为核心,片内有256字节的数据存储器和8K字节的程序存储器,4个并行传输的I/O口分别是P0、P1、P2、P3,一个全双工的串行接口。与51单片机不同的是,52单片机具有3个定时计数器和6个中断源。图2-2单片机内部结构2.2.1单片机最小系统单片机最小系统由电源电路、晶振电路、CPU和复位电路组成,是使单片机能够运行的最少的部件。电源电路为单片机提供5V电源,晶振电路一般采用晶振频率为12Mhz或11.0592Mhz。若采用12Mhz则系统完成一条指令恰好为1us,便于进行调试,故本设计采用12Mhz的晶振频率。复位电路能够使单片机运行瘫痪时重新运行。2.2.252单片机的电平特性单片机中的电路为数字电路,与模拟电路不同。模拟电路的电平取值是连续的,可以有无穷多个。数字电路的电平取值是离散的,只能取到有限个值。单片机中的电平只有高电平和低电平,高电平为+5V低电平为0V。二进制数字只有0和1,故单片机电平能和二进制数字相符。52单片机与计算机进行串口通信时采用的标准是RS232,高电平为-12V,低电平为+12V。由于此电平特性和单片机电平特性有一定的差异,在串口通信时需要外接一个芯片进行电平转换。2.2.352单片机I/O介绍单片机的I/O口,即“input,output”数据输入与输出管脚。对单片机操作实质上就是对I/O口进行操作,若令P1.0口等于0,则P1.0口就输出一个低电平。单片机的管脚图如图2-3所示:图2-3单片机管脚图P0-P3:为4组8位的数据管脚,默认输出高电平。P1-P3内置上拉电阻,P0外接上拉电阻使其输出高电平。P3.0和P3.1:这两个管脚第二功能为串口通信,P3.0为读,P3.1为写。P3.2和P3.3:这两个管脚的第二功能为外部中断0和外部中断1,配置好中断函数后,低电平可以触发中断。P3.4和P3.5:第二功能为计数器T0和T1。P3.6和P3.7:52单片机几乎用不到,在内存不够时,可以外扩内存进行读写。18和19:将晶振接到XTAL1和XTAL2管脚,每个管脚接晶振的一个边。晶振频率一般为11.0592mhz,本设计采用12mhz晶振。2.3时钟模块DS1302时钟芯片是美国达拉斯公司推出的低功耗且性能强的一款芯片。它采用SPI3线接口进行数据通信。DS1302可以记录2100年以前的时间,具有闰年补偿的功能。该芯片有两个电源接口,其中一个作为主电源供电,另一个作为备用电源。当主电源突然没电时,备用电源可以继续供电使时钟继续走时。图2-4为DS1302内部结构图。图2-4DS1302内部结构VCC1、VCC2、GND三个电源端口接的使DS1302内部的电源控制器。时钟引脚接内部的输入移位寄存器控制数据的输入输出移位。CE端为使能引脚,接内部的命令控制逻辑寄存器。最右边是实时时钟寄存器,寄存器的上方接外部晶振为它提供频率,一般为32.768khz。DS1302的外部管脚图如图2-5所示。图2-5时钟模块电路DS1302时钟芯片、外部晶振、电容按照图3-3的接法就构成了时钟模块。图中VCC1和VCC2分别接主电源和备用电源。VCC2可以接入电池供电,也可以接一个大电容来供电。SCLK是串行时钟的输入管脚。X1和X2为晶振管脚,外接一个晶振(一般为32768hz)。RST为复位引脚,低电平有效,进行操作时一般令它为高电平。I/O为数据输入和输出的管脚。2.4温度采集模块温度采集模块使用的是DS18B20温度传感器,于DS1302的传输方式不同,DS18B20在进行数据传输时只需要1条数据线,为单总线传输方式。在一条传输线路上可以挂接多个DS18B20,很适合进行大面积测温。温度传感器有很多,本设计为什么选用了DS18B20呢?相对于其他器件,DS18B20的明显优势就是电路简单、精度高,能实现本设计需要的功能。在使用时,无需任何外接器件,只需要一个DS18B20就可以实现温度的测量及转换。在日常生活的温度当中,精度为0.5℃,分辨率可达0.0625℃。DS18B20在实际应用中有两种接法。一种为工作在寄生电源下的接法,这种方法不需要接外部电源。另一种是工作在外部电源下的接法,本设计采用的这种接法。DS18B20温度传感器实物如图2-6所示,DQ为数据管脚。图2-6DS18B20温度转换器2.5LCD1602液晶显示模块选LCD1602的原因就是在保持体积小的同时,该显示模块可以恰好显示完本设计中的所有字符,显示效率极高并且操作较为简便。这款液晶显示模块为什么叫1602呢?原因在于该液晶显示屏横着能显示16个字符,竖着能显示2个字符。每个字符都是一个5×7的点阵,由LCD控制哪个亮,哪个不亮就可以显示出对应的字符。与前面器件的传输方式不同,162采用8位数据并行传输的方式,并行传输可以大大提高传输效率。其各引脚的功能如下:VSS:电源地;VDD:接电源正极;V0:用于调节对比度。该管脚不能直接接地或直接接VCC,通常时外接一个电位器来调节对比度,对比度过高或者过低时都会影响显示效果。RS:高电平时选择数据,低电平时选择命令。RW:此引脚为高电平时从1602读数据,为低电平时向1602写数据;E:使能端。若为高电平就可以对1602进行读写,为低电平时对1602的操作无效;DB0-DB7:8位数据管脚;A:背光源正极;K:背光源负极;图2-71602管脚图2.6独立按键模块单本设计在展示时间信息的同时还要进行时间调节,对时间调节部分就是通过独立按键来实现的。在通常情况下,由于单片机的P1-P3口内置了上拉电阻,输出为高电平。P0口的8位数据管脚也会外接一个上拉电阻使其输出高电平。独立按键一端接单片机的数据管脚,另一端接地。当某个按键被按下时,就会使单片机的管脚由高电平变为低电平,系统程序会根据电平变化来判断是否进行调节。硬件电路如图2-8所示:P3.2PP3.2P3.0P2.2P3.1图2-8按键部分电路图2.7本章小结这一章对系统的整体结构和外围器件进行了介绍,外围器件包括DS1302时钟芯片,LCD液晶显示模块,DS18B20温度转换模块和独立按键,主控制器为STC89C52。每一个模块都对他们的特性或管脚功能做了介绍。第3章系统软件设计3.1DS1302时钟模块3.1.1DS1302的工作原理DS1302在每次读写程序前都要先初始化。初始化的过程就是先打开写保护,然后向DS1302写入初始数据(该初始数据可用作初始时间,在本设计中我写入的初始时间为2020年5月7日22点37分周4),写入初始数据后关闭写保护。打开写保护和关闭写保护是通过向DS1302的控制寄存器写入数据来实现的,写入初始数据是通过向DS1302的日历、时钟寄存器写入数据来实现的。在完成初始化,向DS1302写入初始数据后,DS1302就开始走时。最后,为了将DS1302的信息显示到液晶显示屏上,应将秒、分、时、日、月、周、年的信息存放在一个数组里面。其时间读取流程如图3-1所示图3-1时间读取流程3.1.2DS1302的读写DS1302在进行读写操作时至少应该读写两个字节,第一个字节是控制字节,告诉DS1302是要进行读操作还是写操作,第二个就是要读或者写的数据了。DS1302读写的时序图如下,由时序图我们可以看出:当SCLK产生上升沿时进行写操作,当SCLK产生下降沿时进行读操作。在进行操作之前应先将SCLK置低电平,然后再将CE置高电平。DS1302的读写时序如下图所示:图3-2DS1302的读写时序3.1.3DS1302的控制寄存器可以将DS1302的8位控制命令存放在控制命令寄存器当中,DS1302的RST管脚回到高电平后就可以向其写入控制命令,比如打开或者关闭写保护。它的格式如表3-1所示。表3-1控制寄存器D7D6D5D4D3D2D1D01RAM/CKA4A3A2A1A0RD/WD7:固定为1。D6:为1时选选择片芯片内的31个RAM,为0时选择日历时钟寄存器。D5-D1:若为00000则选择秒寄存器,若为000001则选择分寄存器,若为000010选择小时寄存器,若为000011选择日寄存器,若为000100选择月寄存器,若为000101选择星期寄存器,若为000110选择年寄存器。D0:为1时读,为0时写。3.1.4日历、时钟寄存器DS1302有7个跟日历有关的寄存器,他们各自的范围和所占位数如表3-2所示:表3-2时间寄存器寄存器名称取值范围D7D6D5D4D3D2D1D0秒寄存器0-59CH秒的十位秒的个位分寄存器0-590分的十位分的个位小时寄存器0-23240A/PHR小时的个位日寄存器1-3100日的十位日的个位月寄存器1-120000月的个位周寄存器1-70000星期几年寄存器1-99年的十位年的个位数据都以BCD码的形式存储在时间寄存器当中。小时寄存器有两种形式,一种位12小时制,另一种为24小时制。本设计采用的是24小时制。3.2DS18B20温度采集模块DS18B20有3个接口,其中一个接VCC,另一个接GND,只有一个管脚用于数据传输,为单线传输。单总线上最基本的操作有初始化、写和读3种,所有其它的操作都由这3种基本操作组合而成,初始化用于对总线上的器件进行状态复位,写用于主节点向总线上写入一位数据,读用于主节点从总线上读取一位数据。在这3种操作中,只有写操作是单向的,初始化操作和读操作都是双向的。由时序图可知:1.在本设计中,初始化的过程为先将数据管脚DQ赋值为低电平,延时642us,然后再将其赋值为高电平。如果DS18B20作出响应将会在一定时间后拉低DQ管脚的电平,根据有没有拉低DQ的电平值来判断初始化是否成功。2.在进行DS18B20的写数据时,先将数据管脚DQ赋值为低电平,延时1us后将数据的最低为放置数据管脚DQ,最少延时60us之后将数据管脚DQ电平拉高,这就完成了一位的传送。传送1个字节此过程应循环8此。3.首先应该发送温度转换指令,使DS18B20将采集到的温度转化为数据存储到寄存器当中,然后发送DS18B20读取温度的命令,读取RAM中的数据。最后再将RAM中的数据以0.0625的精度转换成十进制数。图3-3DS18B20读时序图3-4DS18B20写时序3.3LCD1602显示模块LCD1602的写函数可以分为写数据和写命令,写数据是告诉LCD1602显示什么,写命令是对LCD1602的功能进行设置比如打开显示或关闭显示、光标左移或右移等。在对LCD1602进行初始化时应为写命令函数而不是写数据函数。同前面两个器件一样,LCD1602在使用之前也需要进行初始化,用于对液晶显示屏进行功能设置。前面说过,DS1302的时间信息都存放在了一个数组,所以在显示部分只需将数组的值显示出来即可。温度显示同样,也将采集到的温度信息存放在数组中进行显示。LCD1602液晶显示模块的流程图如下图所示:图3-51602液晶显示流程图3.452单片机的中断系统3.4.1中断的概念在日常生活中会有许多突发情况,迫使我们不得不放下手上的工作去处理另一件事。程序运行也是如此,当CPU在运行程序时突然有另一个程序请求运行,CPU就会先运行紧急程序,完成后再继续运行原来的程序,这一过程称为中断。具体过程如图所示。有了中断,就可以对CPU进行一些实时操作。52单片机有6个中断源,2个中断优先级。图3-6中断的过程3.4.2中断允许控制CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。其格式如表3-1所示表3-1IE的格式位76543210A8HEAESET1ET0EX1EX0IEEX0:外部中断0允许位;ET0:定时/计数器T0中断允许位;EX1:外部中断1允许位;ET1:定时/计数器T1中断允许位;ES:串行口中断允许位;EA:CPU中断允许(总允许)位。3.4.3中断请求标志表3-2TCON的格式位7654321088HTF1TR1TF0TR0IE1IT1IE0IT0TCONIT0:为低电平时只有低电平才能触发中断申请,为高电平时只有下降沿才能触发中断申请IE0:若为低电平说明此时没有外部中断0的请求,若为高电平说明有外部中断0的请求。IT1:同IT0。IE1:若为低电平说明此时没有外部中断1的请求,若为高电平说明有外部中断1的请求。TF0:定时/计数器T0溢出中断请求标志位。TF1:定时/计数器T1溢出中断请求标志位。3.4.4中断响应的条件要想使用中断首先应该配置好终端服务特殊功能寄存器。包括三个步骤:打开外部中断总开关,外开外部中断0或1,设置外部中断的触发方式为低电平或下降沿。三者应该同时满足,所以主程序中应该有以下代码:(以外部中断0为例)3.5系统总程序因为本程序所采用的模块较多,所以程序编写采用了模块化设计。在第四章的前面三节中已经将各部分模块程序编写好,将他们汇成一个主程序也是极其重要的一部分。主程序流程图如下:图3-7系统流程图3.6KeiluVision4软件3.6.1KeiluVision4开发软件简介如图所示是KeiluVision4开发软件的操作界面图。该软件是专为单片机设计的在线编程开发和设计系统软件。与汇编语言系统相比,C语言在功能实现,程序读写,软硬件调试等方面具有很大的优势,并且C语言指令集简单明了,初学者可以快速上手,掌握基础知识。概念和一些简单的编程。KeiluVision4开发环境包括强大的开发工具,例如ANSIC语言编译器,宏定义汇编,软件和硬件链接,组件管理仿真调试在线系统,固件和实时操作系统核心。这些强大的功能是集成开发环境(μVision4)平台之间的集成。Ceil语言和汇编语言教学系统相互包含在keil中,但并不相互排斥。这使设计人员可以在普通的软件和硬件设计和生产中以更少的精力做更多的事情,节省很多弯路,并节省不必要的时间。即,该软件方便实用,并且在生产编程系统中受到许多微控制器开发人员的青睐。同时,语言编译器在其开发环境中不仅得到了普及,而且甚至已经成为行业标准。此外,新开发的MCU系列和具有改进扩展的MCU均支持软件编译。图3-8keil软件界面3.6.2KeiluVision4的结构KeiluVision4开发环境可以同时编写和编译C语言程序,调用接口以及模拟一系列操作。设计人员可以使用编辑器在线编辑C语言程序或汇编语言源文件。编译并检查程序后,keil将生成相应的目标文件。可以在存储位置找到特定文件。文件的后缀是.obj。也就是说,目标文件可以由开发环境的LIB51生成,也可以由LIB51连接。查找并生成后缀.abs的绝对目标文件。后缀的.hex文件是从开发环境OH51转换而来的。转换的基础是绝对目标文件。生成.hex文件的目的是将其用于调试器,以方便源代码的编辑和编译。如果是这样,如果过程太麻烦,则还可以使用仿真器功能来执行仿真调试的特定部分,或者将正确的程序直接写入程序存储器。由于仿真芯片的接口在使用过程中连接到高电平,因此要求在仿真过程中不能使用片外只读存储器,而只能使用片上只读存储器,并且CPU引脚连接到低电平。3.7Proteus仿真软件PROTEUS绘制示意图后,将其加载到已编译的目标代码文件.HEX中,可以在PROTEUS示意图中查看模拟的物理运行状态和过程。Proteus软件在单片机系统仿真设计中的应用是虚拟仿真技术与计算机多媒体技术相结合的综合应用,有利于培养学生的电路设计能力和仿真软件的操作能力;我们使用Proteus开发环境来培训学生。在不需要硬件投资的情况下,学生通常会反映出,与简单地学习书籍知识相比,学习单片机更容易接受并且更容易改进。实践证明,使用Proteus成功开发系统仿真程序后,可以大大提高实际生产效率,进而大大提高单片机系统的设计效率。图3-9Proteus仿真图3.8本章小结本章先介绍了每个模块的工作原理,它的初始化以及读写函数。随后介绍了系统整体流程,本设计采用的是多文件编程在附录里给出了每个模块的程序和主程序。最后对编程软件Keil和仿真软件Proteus进行了介绍。第4章系统的调试这章写的不好,内容太少比如硬件调试那部分,可以写写各功能实现的情况,调整前后怎么进行变化的有关于软件部分在第四章可以画一些程序实现的流程图这章写的不好,内容太少比如硬件调试那部分,可以写写各功能实现的情况,调整前后怎么进行变化的有关于软件部分在第四章可以画一些程序实现的流程图4.1软件调试软件调试采用的软件是Keil和Proteus,Keil软件采用的是C语言编程。在编程之前首先对单片机引脚进行定义,方便后续的操作。由于此设计涉及的模块较多,所以采用了多文件编程的方法,每一个文件对应一个模块。程序编写完成之后点击编译,若没有错误,编译框中会出现“0warning(s),0error(s)”的字样,并且会生成一个hex文件。在利用Proteus软件搭建好电路之后,将Keil软件生成的hex文件导入到Proteus里的单片机中,开始仿真,仿真结果无错即可。4.2硬件调试根据先前画好的原理图,将实物焊接到万用板上。检查之前的焊接系统,应确保在没有电的情况下,检查时可以先看电路焊接是否有遗漏焊点、虚焊或线路有交叉等问题,然后用万用表检查主要的接口电位点,是否有短路现象。在电源断开下检查无任何问题或接通电源再进行二次检查。系统电源一般是采用普通直流移动电源通过稳定的电压电路维持在+5V左右。电源接通后,再对各个模块引脚的电位进行检查,每一处的电位与实际的电路需求电位必须一致,当检查出现问题时,立即停止电源供应,而后排查故障处并重新设计线路,确定故障问题已排除后再通电调试。在硬件调试过程中,主要目的是为了避免传感器模块或单片机由于高电势而造成的损坏。然后,在软件调试已经完成的基础上,向已查看无误系统中的单片机内导入源程序,然后通电检测,再检查各个模块是否正常运行。将实物通电,实物应显示秒、分、时、日、月、周、年和温度,由于在软件设计方面,将初值为2020年5月7日22点37分周四,故液晶显示屏上同样应该显示上述的数据。显示后的结果如图5-1所示,按下独立按键1,万年历停止走时,进入时间调试状态。按下独立按键2,由秒的个位调试进入十位调试。按下独立按键3,数值加1。图5-SEQ图5-\*ARABIC1实物结论社会在进步,科学在发展。人们设计的各种设备都为每个人的生活带来便利。本系统以AT89S52为核心组件,并使用串行时钟芯片DS1302实现计时功能。系统的设计和调试完成后,将分析最终的成功,并结合调试过程中发生的错误进行综合分析,以总结实际系统设计和调试过程中的经验。在进行系统硬件设计之前,必须结合系统的当前发展趋势和系统现状来定位系统功能,以使系统在实际应用中具有竞争力。该系统的最大特点是其友好的界面和准确的行程时间。与当前的使用LED显示数据的万年历相比,它的尺寸更小,可以用作车载显示设备。该系统使用液晶显示器,可以使该系统应用于更现代的场所。该系统采用模块化编程方法,同时保留了许多微控制器的I/O端口,这非常便于扩展。为了使用LED显示数据实现以前万年历的功能扩展,除了需要修改系统程序外,还必须增加或减少LED数字管,硬件变化较大。系统显示部分的界面非常灵活。只能通过更改程序来修改接口。用户还可以选择自己喜欢的界面,使用LED作为显示设备的数字万年历无法实现。毕业设计旨在测试您是否可以利用过去学到的理论知识将其与实践联系起来。在设计警报的过程中,我也遇到了很多麻烦。从原理图的设计,框图的构造,组件的购买,程序的编写,系统的焊接到物理对象的调试,过程中出现了各种问题,但是他们终于解决了,尽管过程是曲折的,但是结果是完美的。论文的主要工作如下。介绍了单片机的工作原理,单片机最小系统。介绍了DS18B20、LCD1602、DS1302、独立按键的工作原理,并编写了程序。将各个模块或芯片的程序耦合到一起,成为一个新的主函数,能够实现万年历的相关功能。不仅对软件方面实现,也对硬件电路图进行了搭建。参考文献[1]任琴,刘毅,李瑛,等.基于单片机的可测温笔筒式万年历的系统设计[J].电脑迷,2017(9):70-71.[2]许亮,刘通.基于51单片机的新型万年历设计[J].枣庄学院学报,2017,34(5):81-84.[3]陈礼桃.基于单片机的电子万年历设计[J].科技经济导刊,2016(32):59-60.[4]王语园,张鑫.基于51单片机的电子万年历系统的设计[J].科技创新与应用,2016(32):59-60.[5]兰聪花.基于单片机的多功能数字万年历设计[J].无线互联科技,2016(7),21-22.[6]赵尹.万年历语音播报系统[J].电脑知识与技术,2019,15(06):237-241.[7]刘建辉,冀常鹏.单片机智能控制技术[M].北京:国防工业大学出版社,2007.[8]邹建波.基于单片机的电子万年历设计[J].计算机产品与流通,2019(02):122.[9]陈炜.基于单片机的实时日历时钟的设计[J].科技经济导刊,2018,26(30):85.[10]郭占苗.基于STC89C52万年历的仿真与设计[J].微型电脑应用,2017,33(02):30-34.[11]SkandaV.PowerFactorCorrectioninPowerConversionApplicationsUsingthedsPICDSC[J].MicrochipTechnologyInc.2007.[12]BarryMather,BhaskarRamachandranandDraganMaskimovic,ADigitalPFCControllerwithoutInputVoltageSensing[J].IEEEAppliedPowerElectronicsConference(APEC)pp.198-204,2007.[13]MuhammadAliMazidi,JaniceGillispie,RolinMckinlay[M].The8051MicrocontrollerandEmbeddedSystems:UsingAssemblyandC,SecondEdition.PearsonEducation,2006.致谢从一定意义上说,这篇论文的完成也代表了我大学生涯的终结。在这里,我要感谢学校给我带来的一切。没有学校提供的平台,我将无法成功完成大学学习。无法完成该毕业项目。当我第一次遇到这个话题时,我很困惑,根本找不到这个主意,也不知道从哪里开始。因为每个人都是第一接触者,所以在查阅了大量文献后,根本没有任何经验,并慢慢找到了这个主意。在我的老师王艳娇和姐姐的帮助下,许多问题得以解决。他认真的科学态度,严谨的学术精神以及卓越的工作作风深深地感染并启发了我。王彦娇老师不仅为我的学习提供了认真的指导,而且在我的思想和生活中给予了我细致的照顾,并始终教会我们不要思考很长的时间,所有的进步都必须前进,更不要说懒惰了,当你走出社会,没有人会纵容你。如果你想成为一个好人,你必须一直努力。如果您努力工作,不一定会成功,但是如果您不努力工作,则失败。确实,在这个平凡的世界中,只有让自己变得与众不同,您才能脱颖而出。做事前,不要给自己机会后悔。做好一切并前进,以便在社会中立足。只有以快节奏的生活方式生活,我们才能步入社会而不适应社会,而且我们有更多的时间来弥补自己的不足。我的论文工作还不是很成熟,仍然有很多缺点,但是这种做论文的经验使我受益匪浅。我觉得做一篇论文就是真正地做一件事。这是我自己学习和研究的过程。没有学习,就没有研究潜力,没有我自己的研究,就不会有突破。我不再称其为论文。我希望这种经历能激励我在以后的学习中取得更大的进步。最后,我要对所有负责的老师表示感谢。在这所大学的四年中,您为我们提供了知识,力量和踏足社会的能力。当论文即将完成时,我无法冷静下来。我从来不知道怎么写毕业论文,然后我开始进入完成论文的主题,然后成功地完成了毕业论文答辩。为您的帮助,请在这里接受我的衷心感谢!
附录时钟模块的程序为:#include"ds1302.h"//DS1302写入和读取时分秒的地址命令////秒分时日月周年最低位读写位;//ucharcodeREAD_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};ucharcodeWRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//DS1302时钟初始化2013年1月1日星期二12点00分00秒。////存储顺序是秒分时日月周年,存储格式是用BCD码//ucharTIME[7]={0,0x37,0x22,0x07,0x05,0x04,0x20};voidDs1302Write(ucharaddr,uchardat)//写函数{ ucharn; RST=0; _nop_(); SCLK=0;//先将SCLK置低电平。 _nop_(); RST=1;//然后将RST(CE)置高电平。 _nop_(); for(n=0;n<8;n++)//开始传送八位地址命令 { DSIO=addr&0x01; addr>>=1; SCLK=1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK=0; _nop_(); } for(n=0;n<8;n++)//写入8位数据 { DSIO=dat&0x01; dat>>=1; SCLK=1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK=0; _nop_(); } RST=0;//传送数据结束 _nop_();}ucharDs1302Read(ucharaddr)//读函数{ ucharn,dat,dat1; RST=0; _nop_(); SCLK=0;//先将SCLK置低电平。 _nop_(); RST=1;//然后将RST(CE)置高电平。 _nop_(); for(n=0;n<8;n++)//开始传送八位地址命令 { DSIO=addr&0x01;//数据从低位开始传送 addr>>=1; SCLK=1;//数据在上升沿时,DS1302读取数据 _nop_(); SCLK=0;//DS1302下降沿时,放置数据 _nop_(); } _nop_(); for(n=0;n<8;n++)//读取8位数据,读和写不一样写比较简单 { dat1=DSIO;//从最低位开始接收 dat=(dat>>1)|(dat1<<7); SCLK=1; _nop_(); SCLK=0;//DS1302下降沿时,放置数据 _nop_(); } //RST=0; _nop_(); //以下为DS1302复位的稳定时间,必须的。 SCLK=1; _nop_(); DSIO=0; _nop_(); DSIO=1; _nop_(); returndat; }voidDs1302Init()//初始化DS1302{ ucharn; Ds1302Write(0x8E,0X00); //禁止写保护,就是关闭写保护功能 for(n=0;n<7;n++)//写入7个字节的时钟信号:秒分时日月周年 { Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]); } Ds1302Write(0x8E,0x80); //打开写保护功能}voidDs1302ReadTime()//读取时间信息{ ucharn; for(n=0;n<7;n++)//读取7个字节的时钟信号:秒分时日月周年 { TIME[n]=Ds1302Read(READ_RTC_ADDR[n]); } }#include"temp.h"voidDelay1ms(uinty)//延时1ms{ uintx; for(;y>0;y--) { for(x=110;x>0;x--); }}温度采集模块为:ucharDs18b20Init(){ uchari; DSPORT=0; //将总线拉低480us~960us i=70; while(i--);//延时642us DSPORT=1; //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低 i=0; while(DSPORT) //等待DS18B20拉低总线,I/O口为低电平返回1,表明18b20存在为高电平进入循环 { Delay1ms(1); i++; if(i>5)//等待>5ms最少480us { return0;//初始化失败 } } return1;//初始化成功}voidDs18b20WriteByte(uchardat){ uinti,j; for(j=0;j<8;j++) { DSPORT=0; //每写入一位数据之前先把总线拉低1us i++; DSPORT=dat&0x01;//然后写入一个数据,从最低位开始 i=6; while(i--);//延时68us,持续时间最少60us DSPORT=1; //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值 dat>>=1; //将当前位右移变成低位 }}ucharDs18b20ReadByte()//DS18B20读取一个字节{ ucharbyte,bi; uinti,j; for(j=8;j>0;j--) { DSPORT=0;//先将总线拉低1us i++; DSPORT=1;//然后释放总线 i++; i++;//延时6us等待数据稳定 bi=DSPORT; //读取数据,从最低位开始读取 byte=(byte>>1)|(bi<<7); i=4; //读取完之后等待48us再接着读取下一个数 while(i--); } returnbyte;}voidDs18b20ChangTemp()//开始温度转换{ Ds18b20Init(); Delay1ms(1); Ds18b20WriteByte(0xcc); //跳过ROM操作命令,向18b20发送温度转换的指令 Ds18b20WriteByte(0x44); //让18b20启动12位温度变换 //Delay1ms(100); //等待转换成功,而如果你是一直刷着的话,就不用这个延时了}voidDs18b20ReadTempCom()//读取采集到的温度{ Ds18b20Init(); Delay1ms(1); Ds18b20WriteByte(0xcc); //跳过ROM操作命令 Ds18b20WriteByte(0xbe); //发送读取温度命令 读取RAM中的数据}intDs18b20ReadTemp(){ inttemp=0; uchartmh,tml; Ds18b20ChangTemp(); //先写入转换命令 Ds18b20ReadTempCom(); //然后等待转换完后发送读取温度命令 tml=Ds18b20ReadByte(); //读取温度值共16位,先读低字节 tmh=Ds18b20ReadByte(); //再读高字节 temp=tmh; temp<<=8; temp|=tml; returntemp;}液晶显示模块程序#include"lcd.h"voidLcd1602_Delay1ms(uintc)//延时函数误差0us{uchara,b; for(;c>0;c--) { for(b=199;b>0;b--) { for(a=1;a>0;a--); } } }voidLcdWriteCom(ucharcom) //写入命令{ LCD1602_E=0;//使能 LCD1602_RS=0; //选择发送命令 LCD1602_RW=0; //选择写入 LCD1602_DATAPINS=com;//放入命令 Lcd1602_Delay1ms(1); //等待数据稳定 LCD1602_E=1; //写入时序 Lcd1602_Delay1ms(5); //保持时间 LCD1602_E=0;} voidLcdWriteData(uchardat) //写入数据{ LCD1602_E=0; //使能清零 LCD1602_RS=1; //选择输入数据 LCD1602_RW=0; //选择写入 LCD1602_DATAPINS=dat;//写入数据 Lcd1602_Delay1ms(1); LCD1602_E=1;//写入时序 Lcd1602_Delay1ms(5);//保持时间 LCD1602_E=0;}voidLcdInit() //LCD初始化子程序{ LcdWriteCom(0x38);//开显示 LcdWriteCom(0x0c);//开显示不显示光标 LcdWriteCom(0x06);//写一个指针加1 LcdWriteCom(0x01);//清屏 LcdWriteCom(0x80);//设置数据指针起点}主程序部分主程序如下:#include<reg52.h>#include"lcd.h"#include"ds1302.h"#include"temp.h"sbitK1=P3^1;sbitK2=P3^0;sbitK3=P3^2;voidInt0Configuration();voidLcdDisplay();unsignedcharSetState,SetPlace;voidDelay10ms(void);//误差0usvoidtempdisplay(int);voidmain(){ unsignedchari; SetState=0; Int0Configuration(); //打开中断 LcdInit(); Ds1302Init(); while(1) { if(SetState==0) //为0时读取数据不为0时说明进入调整阶段 { Ds18b20Init(); Ds1302ReadTime(); } else { if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) { SetPlace++; // if(SetPlace>=7) SetPlace=0; } while((i<50)&&(K1==0)) //检测按键是否松开 { Delay10ms(); i++; } i=0; } if(K2==0) //检测按键K2是否按下 { Delay10ms(); //消除抖动 if(K2==0) { TIME[SetPlace]++; if((TIME[SetPlace]&0x0f)>9) { TIME[SetPlace]=TIME[SetPlace]+6; } if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x13)&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年机动车驾驶人科目一新版模拟题库讲解及参考答案详解【预热题】
- 2026年国际商务英语一级练习题练习题及完整答案详解【全优】
- 2026年MBA组织行为学通关练习题附答案详解【模拟题】
- 2026年实验室化验员培训综合练习附答案详解【研优卷】
- 2026年转正考核综合检测模拟卷带答案详解(能力提升)
- 2026年通信专业技术试题及答案详解【名师系列】
- 2026年人体解剖生理学考前冲刺练习题库带答案详解(A卷)
- 2026年检验(中级)专业知识模拟题库及答案详解(名校卷)
- 2026年正营培训心得体会深度解析
- 2026年开通科创板知识目考前冲刺测试卷(培优)附答案详解
- 非遗泥塑传承与创新:传统色彩·现代技艺·实践探索【课件文档】
- 城管队伍建设考核制度
- 2026年高级经济师宏观经济学实务操作题集
- 护理礼仪与沟通:构建和谐医患关系
- 炎症性肠病精准医疗:生物标志物与治疗响应
- 酒店防偷拍安全制度规范
- 箱式变压器安装施工技术要求
- 2026年《必背60题》党校教师高频面试题包含详细解答
- TCEC低压用户供电可靠性评估导则2024
- 乳房包块护理查房
- 2025至2030中国碳纤维增强塑料(CFRP)复合材料行业产业运行态势及投资规划深度研究报告
评论
0/150
提交评论