毕业设计(论文)基于单片机的万历的设计.doc

上传人:laozhun 文档编号:3980555 上传时间:2023-03-30 格式:DOC 页数:60 大小:9.54MB
返回 下载 相关 举报
毕业设计(论文)基于单片机的万历的设计.doc_第1页
第1页 / 共60页
毕业设计(论文)基于单片机的万历的设计.doc_第2页
第2页 / 共60页
毕业设计(论文)基于单片机的万历的设计.doc_第3页
第3页 / 共60页
毕业设计(论文)基于单片机的万历的设计.doc_第4页
第4页 / 共60页
毕业设计(论文)基于单片机的万历的设计.doc_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《毕业设计(论文)基于单片机的万历的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于单片机的万历的设计.doc(60页珍藏版)》请在三一办公上搜索。

1、基于单片机的万年历的设计摘 要 单片机也称为单片微计算机。单片机在很多领域上都得到了广泛的应用,其功能也越来越强大。由于单片机操作简便,简单易学,不仅许多大专、本科院校都开设了有关单片机方面的课程,社会上也出现了很多单片机爱好者。本设计就是根据单片机的原理来进行万年历的设计的。设计的主控制器采用的是一款使用起来较方便的STC89C52RC单片机,采用了带中文字库的12864液晶作为显示器,时间和日历的功能采用DS1302时钟芯片来实现,并采用DS18B20温度传感器来对温度的实时传输。本设计在公历显示完成的基础上添加了农历显示,使万年历的功能更加完善。本设计在进行公历和农历的转换时实现得很困难

2、,但最终还是成功了。随着科技的进步,单片机的功能越来越强大,越来越方便用户的使用。关键词: 单片机,万年历,DS1302时钟芯片,12864液晶ABSTRACTMicrocontroller is also a single chip microcomputer. It have been used widely in many areas, and its function has become more powerful. Because microcontroller easy in using and learning, many colleges have opened the co

3、urses about the Principle and application of microcontroller. There are also many lovers of microcontroller in society.The design of calendar is based on the principle of single-chip microcomputer. The main controller of my design is a microcontroller of STC89C52RC that used conveniently. And the di

4、splay is 12846LCD that has chinese word stock. The functions of the time and calendar will be realized by using the clock chip of DS1302. The temperature sensor of DS18B20 is used to transmit temperature. On the basis of the display of calendar, I add a function that can display the lunar in my desi

5、gn. And the functions of calendar looks more perfect. It is very hard to realize the conversion of the Gregorian calendar and the lunar calendar by using program.But I complete it at last. With the progress of technology, the microcontroller function has become more powerful and it will be convenien

6、t to the users. Key Words: Microcontroller, Calendar, The clock chip of DS1302, 12864Lcd 目 录1. 绪论11.1 设计目的11.2 发展现状11.3 解决问题22. 硬件系统设计32.1本设计所需的元器件32.2 STC89C52RC单片机42.2.1单片机主要特性42.2.2单片机引脚说明52.3 MAX232电平转换芯片72.4 DS1302时钟芯片82.5 DS18B20温度传感器102.6 12864液晶112.7 独立按键123. 软件设计133.1阳历与阴历转换143.2 DS1302时钟芯片

7、程序设计143.3 DS18B20程序设计213.4 12864液晶显示程序设计224. 调试26总结30参考文献31答 谢32附录一33附录二341. 绪论1.1 设计目的古人依靠日冕,漏刻记录时间。从古至今,人们的日常生活和工作都离不开对时间的准确把握。而随着科技的发展,电子万年历成为了日渐流行的日常计时工具。目前市场上的万年历功能强大,简单直观,给人们带来很大的方便。对于万年历设计有很多实现的方法,本设计主要是采用51单片机来实现。自己动手设计与制作可以对硬件的结构和功能有更深的认识,并与软件结合,以达到理论与实践更好的结合,进一步提高综合运用所学知识进行设计的能力。这是对自己大学四年的

8、学习的检验,具有重要的意义。1.2 发展现状据了解,目前市场上的电子万年历并不是采用51单片机作为主控制器的,基于单片机的万年历一般是学生和单片机爱好者在进行设计,谈不上占有市场。也许就是这样,研究单片机万年历的人不在少数,并且都在努力。努力不是单方面的,单片机的功能也应该要提高,STC89C52单片机就是这样的例子,其功能虽然没有大幅度提高,但使用起来更方便了。我相信,在不久的将来肯定会有功能更强大成本更低的单片机出现,给我们的设计带来更多的便利。1.3 解决问题本课题主要通过单片机的功能和应用,利用Keil1编程软件和Proteus仿真2软件进行设计,并制作实物。设计要达到预期的效果要解决

9、以下问题:(1)认真设计好万年历的逻辑原理图3;(2) 熟练使用C语言4,运用Keil编程软件进行软件设计; (3) 在Proteus仿真平台上,对程序进行编译仿真; (4) 认真仔细地对万年历进行组装焊接5; (5) 在确认没有问题的硬件实物上进行程序下载调试,以达到预期的效果要求;2. 硬件系统设计本设计将最小系统与所有用到的模块元件集合在一块万能板上,最小系统和其它模块均由自己动手焊接。首先是在万能板上布局,以达到合理的规划,保证设计的美观性。然后为了保证设计的质量,我将各元件的Vcc电源口与GND接地口再一次规划,用焊锡分别将Vcc电源线和GND接地线固定在了特定的位置,以降低线路的复

10、杂度,让人一目了然。最后各模块元件与单片机之间均用电线直接由引脚处连接(万能板的焊点处)。为了保护各模块元件,本设计使用到的一些重要元件都使用的IC插槽或排母进行焊接,连线(见实物图4.1)。本设计的系统框架如图2.1所示:12864液晶模块单片机STC89C52RCDS1302时钟芯片模块独立按键模块块DS18B20温度传感器模块 内部时钟、复位模块图2.1万年历的系统框架图2.1本设计所需的元器件单片机:STC89C52RC;电平转换芯片:MAX232;时钟芯片:DS1302;温度传感器:DS18B20;液晶:QC12864B汉字图形点阵液晶;按钮开关;2.2 STC89C52RC单片机本

11、设计采用STC89C52RC单片机6,8K字节可编程闪烁存储器。STC89系列单片机是MCS-51系列单片机的派生产品,它们在指令系统、硬件结构和片内资源上与标准8052单片机完全兼容。STC89系列是以8051为基核开发出的CMOS工艺单片机,DIP封装系列与8051为pin-to-pin(引脚对引脚)兼容。STC89系列单片机高速,低功耗,其程序写入时可通过串口采用STC-ISP.exe软件下载,不占用用户资源,学习单片机时较好的选择。2.2.1单片机主要特性(1) CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器。中央处理器(CPU)是整个单片机的核心部件,是8位

12、数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。(2) RAM:用于存放要读写的数据,如运算的中间结果、最终结果以及欲显示的数据。8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。(3) ROM:8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。(4) I/O口:四组8位并行I/O口(P0、 P

13、1、P2和P3),既可用作输入,也可用作输出。(5) T/C定时/计数器:两个16位的可编程定时/计数器,既可以工作在定时模式,也可以工作在计数模式。(6) 5个中断源的中断控制系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。(7) 全双工串行口:一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;(8) 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。2.2.2单片机引脚说明图2.2 STC89C52RC封装引脚图

14、STC89C52RC的引脚封装和8051的引脚封装是一样的,均采用40Pin封装的双列直插DIP结构。下图是它们的引脚配置,40个引脚中,Pin40为正电源,Pin20为地线;外置石英振荡器的时钟线Pin18和Pin19两根;4组8位共32个I/O口(P0、P1、P2和P3),中断口线与P3口线复用。本设计只是实现简单的读写功能,不需要用到I/O口的第二功能。这里就不对单片机的引脚作出太详细的介绍,简单介绍一些专用引脚,其它引脚用到时再介绍。单片机引脚封装如图2.2所示。(1) Pin9:RST复位信号复用脚,当STC89C52RC通电,时钟电路开始工作,在RST引脚上出现24个时钟周期以上的

15、高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RST由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,STC89C52RC的初始态。STC89C52RC的复位方式可以是自动复位,也可以是手动复位(按键电平复位和按键脉冲复位)。此外,RST还是一个复引脚,Vcc掉电期间,此引脚可接上备用电源,以保证单片机内部RAM的数据不丢失。本设计采用的是手动复位电路:按键电平复位。复位电路如图2.3所示。图2.3 按键电平复位电路(2) Pin

16、18、19:XTAL1和XTAL2时钟产生电路引脚,这里使用的石英晶体振荡频率为11.0592MHz。时钟振荡电路如图2.4所示。图2.4 时钟振荡电路(3) Pin29:当访问外部程序存储器时,此引脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。(4) Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。它还有一个特点是,当访问外部程序存储器时,AL

17、E会跳过一个脉冲。(5) Pin31:/Vpp程序存储器的内外部选通线,对于STC89C52RC来说,内置有8kB的程序存储器,当为高电平并且程序地址小于8kB时,读取内部程序存储器指令数据,而超过8kB地址则读取外部指令数据。如为低电平,则不管地址大小,一律读取外部程序存储器指令。当使用到外部程序存储器时,要使用到一些特定功能的引脚,本设计中没有使用外部存储器。2.3 MAX232电平转换芯片当我们用STC-ISP.exe这个软件给STC89C52RC下载程序时,采用的是计算机串口(RS-232电平:高 -12V 低+12V)通信,所以计算机与单片机之间进行通信时需要电平转换芯片MAX232

18、7。MAX232含有两个RS-232发送驱动器和接收驱动器,其中发送器的输入为TTL/CMOS电平,输出为RS-232电平。MAX232接收器的输入为RS-232电平,输出为TTL/CMOS电平。不使用的输入输出端可以悬空。MAX232的工作温度范围为0至70。MAX232的Pin14(T1OUT)引脚与串行口的2引脚连接,Pin13(R1IN)引脚与串行口的3引脚连接。Pin12(R1OUT)引脚和Pin11(T1IN)引脚分别与单片机的P3.0 /RXD(串行输入口)、P3.1 /TXD(串行输出口)连接。这样单片机所需要的程序就可以从计算机下载了。计算机与单片机通信如图2.5所示。图2.

19、5 计算机与单片机通信连接图2.4 DS1302时钟芯片市场上可以选择的时钟芯片很多,功能也不尽相同,价格各异。DS13028 是美国DALLAS 公司推出的一种串行接口实时时钟芯片。芯片内部具有可编程日历时钟和31个字节的静态RAM,它可以对年、月、日、星期、时、分、秒进行计时,日历时钟可自动进行闰年补偿,及时准确,接口简单,使用方便,工作电压范围宽,功耗低,芯片自身还具有对备份电池进行涓流充电功能,可以有效地延长备份电池的使用寿命。DS1302引脚封装如图2.6所示。图2.6 DS1302封装引脚图DS1302时钟芯片的引脚功能如下:(1) Pin1:Vcc2为主电源。(2) Pin8:V

20、cc1为后备电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。(3) Pin2、3:X1、X2是振荡源,外接32.768kHz晶振。(4) Pin5:是复位/片选线,通过把输入驱动置高电平来启动所有的数据传送。输入有两种功能:首先,接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,提供终止单字节或多字节数据的传送手段。当为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中置为低电平,则会终止此次

21、数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,必须保持低电平。只有在SCLK为低电平时,才能将置为高电平。(5) Pin6:I/O为串行数据输入输出端(双向),在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。(6) Pin7:SCLK为时钟输入端。DS1302与单片机连接图如图2.7所示,具体的读写操作在第3部分软件设计中介绍。 2.7(a) DS1302 2.7(b) 单片机图2.7 单片机与DS1302的连接

22、引脚图2.5 DS18B20温度传感器温度是一个基本的物理量,自然界中的一切过程与温度密切相关。设计里加入DS18B209温度传感器可以使万年历的功能更齐全,可以随时了解温度的变化。DS18B20的封装引脚如图2.8和单片机与DS18B20的连接如图2.9。DS18B20温度传感器的I/O(DQ)引脚连接的是单片机的P3.3引脚。 图2.8 DS18B20封装引脚图 图2.9 单片机与DS18B20的连接图DS18B20温度传感器是美国DALLS公司推出的DS1820的替代产品,其主要特性如下。(1) 适应电压范围更宽,电压范围:3.05.5V,Vcc为外接供电电源输入端,在寄生电源方式下可由

23、数据线供电,GND为电源地。(2) 独特的单线接口方式,DS18B20在与单片机连接时仅需要一个引脚(DQ)即可实现微处理器与DS18B20的双向通讯。 (3) DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内。(4) 温范围:55125,在-10+85时精度为0.5。(5) 可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(6) 负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。2.6 12864液晶在本设计中,要显示阳历、阴历、星期、时间、生肖、温度及节日提醒,因

24、此对显示器的要求较高。在这里我采用QC12864B汉字图形点阵液晶10作为显示模块,它可显示汉字及图形,内置 8192 个中文汉字(16X16 点阵)、128 个字符(8X16 点阵)。可同时显示汉字个数为4x8=32个,同时显示字符的个数为4x16=64个。它与单片机连接如图2.10所示。 2.10(a) LCD12864引脚 2.10(b) 单片机图2.10 12864液晶引脚电路图在进行进行这个模块的设计时,考虑到12864液晶的显示方向,而单片机的P2引脚刚好与其它的引脚排列顺序相反(可看图2.2),所以本设计中单片机与液晶进行数据传输时,用单片机的P2引脚与液晶的8位双向三态数据线(

25、DB0-DB7)进行连接,这样大大简化了线路的复杂度。2.7 独立按键本设计采用的4个独立按键,分别是:“设置”、“确认”、“加”、“减”。判断“设置”键是否按下及第几次按下可以分别对日期、时间、星期选定,然后按“加”、“减”即可进行设置,“确认”键按下后,新数据即写入时钟芯片。例如,“设置”键按1下,即可以对年份进行设置,按4下,即是可以对小时进行设置。其电路设计如图2.11所示。图2.11 时间设置电路3. 软件设计本设计利用Keil(C51) 软件进行程序的编写。C语言是一种编译型程序设计语言,它兼顾了许多种高级语言的特点,并且具备汇编语言的功能,C 语言可以像汇编语言一样对位、字节和地

26、址进行操作。目前,使用C语言进行程序设计已经成为软件开发的一个主流。C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。用C语言开发系统可以大大缩短开发周期,明显增强程序的可读性,便于改进、扩充和移植。而针对8051的C语言日趋成熟,成为了专业化的实用高级语言。虽然汇编语言效率高,对硬件的可操控性更强,体积小,但是不易维护,可移植性差。本设计程序实现了阳历日期、阴历日期、时间、星期、温度、节日提醒等功能。图3.1是主程序流程图。开始LCD、DS1302、DS18B20及相关变量初始化调液晶显示程序 设置键是否按下 N Y调用设置子程序刷新图3.1 主程序流程图

27、3.1阳历与阴历转换阳历与阴历的转换,这部分程序是参考杜阳老师的程序,程序中总共有199(1901-2099)年的阳历对应阴历数据。阳历对应的阴历数据(每年占用单片机三字节)格式:第一字节BIT7-4位表示闰月月份,为0,则无闰月;BIT3-0位对应阴历第1-4月的大小。第二字节BIT7-0位对应阴历第5-12月大小。第三字节BIT7位表示阴历第13月大小(月分对应的位为1,表示农历月大(30天)为0表示小(29天);第三字节BIT6-5位表示春节的阳历月份,BIT4-0位表示春节公历日期。例:阳历2011年对应阴历2011年数据为:0X0B,0X4A,0X43。0X0B和0X4A的二进制数表

28、示为:00001011,01001010,这两个字节表示阴历2011年没有闰月,也就是没有第十三个月。一,三,四,六,九,十一月都是月大(30天),其它都是月小(29天)。0X43的二进制数表示为:01000011,这里的BIT6-5位为10(2位可表示4个月),表示阴历2011年的春节在阳历2011年的2月份。BIT4-0位为00011(00000-11111,5位最大数为31),表示3日。整个字节就表示阴历2011年的春节在阳历2011年的2月3日。3.2 DS1302时钟芯片程序设计在本设计中,要实现万年历的功能,DS1302时钟芯片是少不得的,虽然只用单片机也可以实现,但是将会造成时间

29、误差较大,不好调节。用DS1302时钟芯片不仅可以大大的避免那样的问题,还可以减小程序的编写量。这个模块是本设计中是很重要的模块。如图3.2是DS1302时钟芯片工作的流程图。开始相关变量初始化DS1302去保护复位端产生一个高电平复位端产生一个高电平写DS1302地址写DS1302地址延时一段时间延时一段时间向该地址写数据将该地址数据读出地址增加地址增加数据写完否数据读完否 NN YY显示数据图3.2 DS1302时钟芯片工作流程图通过流程图我们对DS1302时钟芯片是如何工作的有了个大概的了解,现在进一步了解DS1302时钟芯片关于日历、时间的存储器,先看表3.1。表3.1 读写寄存器地址

30、读寄存器写寄存器bit7 bit6bit5bit4bit3bit2bit1bit0 范围81H80HCH10秒秒005983H82H10分分005985H84H 1/0 010时时112/ 023AM/PM87H86H0010日日13189H88H00010月月1128BH8AH00000星期178DH8CH10年年0998FH8EH WP 0000000由表可以看出存放秒到年的7个寄存器的地址是固定且有规律的。写寄存器都是偶数(80H8Ch),读寄存器都是奇数(81H8Ch),存放的数据格式为BCD码形式。秒寄存器(写80H、读81H)的bit7位定义为时钟暂停标志(CH)当该位置为1时,时

31、钟振荡器停止,DS1302时钟芯片处于低功耗状态,为0时,时钟开始运行。时寄存器(写84H、读85H)的bit7位为1时,DS1302时钟芯片运行于12小时模式,bit7位为0时,DS1302时钟芯片运行于24小时模式(本设计是24小时模式)。当运行于12小时模式时,bit5位为0时,表示AM,bit5位为1时,表示PM。当运行于24小时模式时,bit5位和bit4位一起表示24小时的10位。控制寄存器(写8EH、读8FH)的bit7位是写保护位(WP),其它7位均置0,在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。也就是说在电路上电的初

32、始态WP为1,这时不能改写表中任何一个时间寄存器,只有将WP改写为0,才能进行寄存器的写操作。下面举例整体说明:void InitDS1302() WriteDs1302(0x8e,0x00); /控制命令,bit7位WP为0,写入不保护指令 delay(5);/延时给DS1302准备时间,以下相同 WriteDs1302(0x80,0x30); /写入秒 30秒 delay(5); WriteDs1302(0x82,0x30); /写入分钟 30分 delay(5); WriteDs1302(0x84,0x12); /写入小时 12点 delay(5); WriteDs1302(0x86,0

33、x15); /写入日期 15日 delay(5); WriteDs1302(0x88,0x05); /定入月分 5月 delay(5); WriteDs1302(0x8a,0x07); /写入星期日 delay(5); WriteDs1302(0x8c,0x11); /写入年份11年 delay(5); WriteDs1302(0x8e,0x80); /控制命令,bit7位WP为1,禁止写操作DS1302写操作时序: 只要有数据操作,就要拉高,否则不能操作。SCLK是一个命令字节和一个写数据字节的时钟脉冲(上升沿),前8个是负责命令字节的,后8个负责数据字节。在命令字节第8个时钟之后紧接着的这

34、个上升沿(D0),数据就会写入。I/O就是要传输的一个命令字节(数据要存入的地址,如:秒的写寄存器地址80H)和一个数据字节,数据由低位(D0)开始写入。程序实现说明:(1) 此程序为写字节程序:void WriteDs1302Byte(unsigned char temp) unsigned char i;for (i=8;i0;i-) DS1302_IO=temp&0x01;/取出temp的第0位数据写入1302 DS1302_CLK=0; 将SCLK置于低电平,为上升沿写入做准备DS1302_CLK=1; /上升沿写入数据 temp=1; (2) 此程序为写数据程序:void Write

35、Ds1302( unsigned char address,unsigned char dat ) DS1302_RST=0; /禁止数据传递DS1302_CLK=0; /确保写数据前SCLK被拉低DS1302_RST=1; /启动数据传输delay(1); WriteDs1302Byte(address); /写地址WriteDs1302Byte(dat); /写数据DS1302_RST=0; /禁止数据传递DS1302读操作时序: SCLK在读操作时,在写命令字节第8个时钟之后紧接着的变成了下降沿,开始读数据。程序实现说明:(1) 读字节程序:unsigned char read_byte

36、() unsigned char i;for(i=8;i0;i-) if(DS1302_IO)temp0=temp0|0x80;/将数据取出,写在temp0的最高位DS1302_CLK=1;/将SCLK置于高电平,为下降沿读出做准备DS1302_CLK=0;/拉低SCLK,形成脉冲下降沿temp0=temp01;return temp0;(2) 读取数据程序:unsigned char ReadDs1302(unsigned char address) unsigned char temp;DS1302_RST=0; DS1302_CLK=0; DS1302_RST=1; WriteDs130

37、2Byte(address);/写入命令字 temp=read_byte();/读出数据 DS1302_RST=0;/禁止数据传递 DS1302_CLK=1;/将时钟电平置于已知状态 return temp;3.3 DS18B20程序设计DS18B20温度传感器在本设计中负责实时传输当前温度,在液晶上显示出来。DS18B20温度传感器操作简单,一个引脚就可以进行双向传输。这里就简单说一下,它是如何工作的,先看看DS18B20工作流程图,再看看在程序上的实现。DS18B20工作流程图如图3.3所示。开始发出读温度命令延时DS18B20初始化数据读出跳过ROM匹配发出温度转换命令温度转换常数显示数

38、据延时图3.3 DS18B20工作流程图程序上的实现:int GetTemp() float tt;unsigned char a,b;DS18B20Init(); /DS18B20初始化 TempWriteByte(0xcc); / 跳过ROM匹配 TempWriteByte(0x44);/发出温度转换命令delayb(100); DS18B20Init();/DS18B20初始化 TempWriteByte(0xcc); /跳过ROM匹配 TempWriteByte(0xbe);/发出读温度命令delayb(200); a=TempRead(); /数据读出 b=TempRead(); t

39、emp=b; temp=8; temp=temp|a; tt=temp*0.0625; /温度转换常数 temp=tt*10+0.5; return temp; DS18B20温度传感器就介绍到这里了,具体的读写操作就不介绍了,原理和DS1302时钟芯片的读写操作差不多,可以参考,当然DS18B20的资料介绍得更清楚一些。3.4 12864液晶显示程序设计下面先看一下12864液晶并行连接的读写时序:LCD的写时序:RS引脚有H(高)L(低)两种状态,RS=H时,单片机将进行写数据操作;RS=L时,单片机将进行写指令操作。R/W引脚要与RS的状态结合,具体操作看表3.2,R/W在这里不管RS是

40、高低都是进行写操作。E引脚为使能信号,E=HL时,配合R/W进行写数据或指令;E=H时,配合R/W进行读数据或读指令。程序操作时注意延时,延时的大小很重要。LCD的读时序:读时序与写时序差不多,区别是R/W在读操作时是拉高的,与写操作相反,其它都一样。同样要注意延时。12864液晶与单片机通信时,可以采用串行数据通信和并行数据通信,我这里将液晶的DB0DB7引脚对应的接上单片机的P2.0P2.7引脚,因此采用的是并行数据通信。部分基本指令介绍见表3.2。表3.2 部分基本指令介绍RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清除显示LLLLLLLLLH显示状态LLLLLLHDCB写

41、RAMHLD7D6D5D4D3D2D1D0读RAMHHD7D6D5D4D3D2D1D0读忙状态LHBFAC6AC5AC4AC3AC2AC1AC0表中的RS=H表示DB0-DB7为显示数据,RS=L表示DB0-DB7为显示指令数据。R/W=H且E(使能信号)=H表示数据被读到DB0-DB7,RW=L且E=HL表示DB0-DB7的数据被写到RAM。DB0-DB7表示数据口。H表示高电平,L表示低电平。(1) 清除显示功能:清除显示屏幕,把DDRAM位地址计数器调整为“00H”。(2) 显示状态功能:D=1表示整体显示开(ON),C=1表示游标开,B=1表示游标位置开。(3) 写RAM(写资料到RA

42、M)功能:写资料到内部的RAM。(DDRAM/CGRAM/TRAM/GDRAM)。(4) 读RAM(读出RAM的值)功能:从内部RAM读取资料(DDRAM/CGRAM/TRAM/GDRAM)。(5) 读忙状态(读取忙碌状态和位址)功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值。字符显示RAM在液晶模块中的地址为80H9FH,字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表3.3所示。表3.3 RAM地址与显示区域对应关系80H81H82H83H84H85H86H87H90H91H92H93H94H95H96H97H88H89

43、H8AH8BH8CH8DH8EH8FH98H99H9AH9BH9CH9DH9EH9FH由表3.3可以看出,液晶显示内容时可以在相应的地址上进行操作,要注意选择显示的地址,避免地址重复选择,不然可能出现显示混乱或者不显示的结果。4. 调试在本设计中采用的是带有中文字库的的液晶显示器,而Proteus仿真软件里的库里没有带中文字库的液晶,功能也与带中文字库的有一定区别,所以在采用Proteus仿真软件进行调试时出现了很多问题,比如不显示或显示乱码等等。因此我主要采用硬件直接进行调试。直接采用硬件调试难度不比先采用软件调试的难度低,直接采用硬件进行调试一定要保证硬件是没问题的,所以硬件焊接时一定要小心,尽量做到一次能完成,不然修改起来会很麻烦,元件也容易损坏。本设计是焊接与调试一起进行的,每一个元件焊接好后都用万用表进行测量,确认每条线路都通路。每个模块完成后要下载程序进行调试。例如:计算机与单片机通信用到的串行口模块,焊接好以后先进行程序下载,如果可以下载成功,说明该模块没问题。测试单片机各引脚是否正常,我是用点亮发光二极管进行测试,下载程序逐个驱动看发光二极管

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号