毕业设计0901应用电子 蒋冬冬.doc_第1页
毕业设计0901应用电子 蒋冬冬.doc_第2页
毕业设计0901应用电子 蒋冬冬.doc_第3页
毕业设计0901应用电子 蒋冬冬.doc_第4页
毕业设计0901应用电子 蒋冬冬.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

扬州工业职业技术学院2011 2012学年第 一 学期毕业设计课题名称: 基于液晶显示的智能万年历的设计 设计时间: 2011 年09月2011年12月 系 部: 电子信息工程系 班 级: 0901应用电子 姓 名: 蒋冬冬 指导教师: 唐菲 总目录第一部分 任务书 第二部分 开题报告 第三部分 毕业设计正文 第 一 部 分任务书扬州工业职业技术学院毕业设计任务书系 部电子系指导老师唐菲职称助教学生姓名蒋冬冬班级0901应用电子学号0905120121设计题目基于液晶显示的智能万年历的设计设计内容目标和要求一、设计内容目标:本毕业设计用单片机AT89C51、时钟芯片DS1302、温度芯片DS18B20、液晶LCD1602、蜂鸣器、按键、晶振电路和复位电路构成智能万年历。通过本设计旨在让学生将单片机的软硬件知识和社会实践应用相结合,设计出有一定实用性的单片机应用系统。培养学生学会独立分析问题,运用所学知识解决实际问题的能力,培养学生包含专业能力、方法能力和社会能力在内的综合职业能力。二、设计要求:1) 收集、整理与毕业设计有关领域的信息资料; 2) 完成本毕业设计方案和结构框图的设计; 3) 完成本毕业设计电路原理图设计;4) 完成本毕业设计程序流程图和C语言程序设计;5) 完成软件和硬件系统的调试,达到技术要求;6) 形成符合学校规定的毕业设计书面文档;教研室审核系部审核第 二 部 分开题报告扬州工业职业技术学院 电子信息工程 系12届毕业设计(论文)开题报告书(表1)学生姓名蒋冬冬专业应用电子技术班级0901应用电子学号0905120121题 目基于液晶显示的智能万年历的设计指导教师唐菲职称助教学 位学士题目类别 工程设计 基础研究 应用研究 其它【课题的内容与要求】本次毕业设计是以AT89C51为主控芯片,用C语言编程使单片机实现万年历的液晶显示,以达到能显示出时间、星期、温度的效果。这种控制电路结构简单,可靠性高,应用性强;软件程序适应范围广。【前言】目前,电子领域正朝着集成化,微型化的方向飞速发展。微电子技术的快速更新和工业测量的大量需求。给人类生活带来了根本性的改变,尤其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。其具有一些突出优点:体积小、重量轻、耗电少、电源单一、功能强、价格低、运行速度快、抗干扰能力强、可靠性高,所以在交通灯、广告、工业控制、仪器仪表、密码锁等产品中都可以看到单片机的身影。【方案的比较与评价】因为单片机是个体积小、重量轻、功能强大、使用方便而且可靠性高的系统,所以把单片机作为本设计硬件电路的主体,即以AT89C51芯片为核心,设计并安装电路,实现显示时间日期温度的功能。方案一:用EDA技术及VHDL语言控制来实现显示及测温度,且显示也可用数码管,但是数码管屏幕有限不是很方便的显示很多的数据及文字等。对于VHDL语言也不够了解,故不采用此方案。方案二:用C语言编程来控制单片机让它在液晶上显示数据及文字。由于单片机结构简单、控制功能强、可靠性高、体积小、价格低等优点,以及液晶屏幕可以完整的同时显示数据及文字等内容,综合上述方案的选择和比较,选择方案二。【预期的效果及指标】1、保存产品设计过程中相关资料2、完善各部分原理图3、实现时、分、秒、年、月、日、星期、温度的显示以及调整的功能4、在设计过程中的编写的程序以及调试的记录5、实现仿真效果【进度安排】2011年 9 月 10日 - 2011 年 9月 30 日 选题、调研、收集资料2011年 9 月 30日 - 2011 年 10月 16日 论证、开题2011年 10 月 17日 - 2011 年 12月 10日 设计(写作初稿)2011年 12 月 11日 - 2011 年 12月 30日 修改、定稿、打印【参考文献】1 苏平.单片机的原理与接口技术M.北京:电子工业出版社,2006:1-113.2 纪宗南.单片机外围器件使用手册M.北京:北京航空航天大学出版社,622-655.3 尹勇.单片机开发环境Vision2的开发指南M. 北京:北京航空航天大学出版社,2004:173-199.4 张斌武.单片机系统Proteus设计与仿真M. 北京:电子工业出版社,2005:52-89.【指导教师意见】(有针对性地说明选题意义及工作安排是否恰当等) 同意提交开题论证 修改后提交 不同意提交(请说明理由)指导教师签章: 年 月 日 【系部意见】同意指导教师意见 不同意指导教师意见(请说明理由) 其它(请说明)系(部)主任签章: 年 月 日 第 三 部 分毕业设计正文基于液晶显示的智能万年历的设计蒋冬冬 0901应用电子 摘 要 本设计以数字集成电路技术为基础,单片机技术为核心。软件设计采用模块化结构、C语言编程。系统通过LCD1602显示数据,可以显示年、月、日、时、分、秒、星期、温度。硬件由主控器、时钟电路、温度检测电路、显示电路、按键电路、蜂鸣器6个模块组成。主控模块用AT89C51、时钟电路用时钟芯片DS1302、显示模块用LCD1602、温度检测采用DS18B20温度传感器、按键电路用普通按键接上拉电阻完成。关键词 单片机AT89C51 DS1302 DS18B20 液晶显示 LCD-based design of intelligent calendarJiangdong Dong 0901 Applied ElectronicsAbstract: The design of digital integrated circuit technology, chip technology as the core. Modular structure of software design, C programming language. System through the LCD1602 display data, you can display year, month, day, hour, minute, second, week, temperature. Hardware by the master, the clock circuit, the temperature detection circuit, display circuit, key circuit, buzzer 6 modules. Control module with the AT89C51, clock circuit with a clock chip DS1302, display module with the LCD1602, the temperature detected by temperature sensor DS18B20, key circuit with pull-up resistor connected to an ordinary button to complete.Key words: MCUAT89C51 DS1302 DS18B20 LCDdisplay目 录 第一章 前言11.1本课题研究的背景以及现实意义11.2 本课题对于专业知识的综合应用情况1第二章 智能万年历的工作概述以及原理分析22.1智能万年历的工作概述22.2各单元电路模块介绍32.2.1 单片机最小系统模块32.2.2 1602液晶显示模块32.2.3 DS18B20温度传感器模快42.2.4 DS1302时间检测模块52.2.5蜂鸣器模块72.2.6按键控制模块72.3 应用Protel绘制系统总原理图82.3.1 Protel简介82.3.2万年历电路总原理图9第三章 应用KEIL编程以及Proteus仿真103.1 KEIL软件的介绍103.2 Proteus软件的介绍103.3 KEIL的模块化编程103.4 万年历系统的软件程序调试113.5 液晶显示程序及仿真133.5.1 1602液晶显示程序133.5.2 液晶的仿真效果153.6 温度传感器程序及仿真153.6.1 温度传感器程序153.6.2温度传感器仿真183.7 时钟芯片程序及仿真193.7.1时钟芯片程序193.7.2 时钟芯片仿真253.8 蜂鸣器程序及仿真263.8.1蜂鸣器程序263.8.2蜂鸣器仿真263.9 按键程序及仿真273.9.1按键程序273.9.2 按键仿真383.10 主程序383.11万年历系统总体仿真效果40小 结42致 谢43参考文献44扬州工业职业技术学院毕业设计第一章 前言1.1本课题研究的背景以及现实意义随着微电子技术和超大规模集成电路技术的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,单片微型计算机体积小、性价比高、功能强、可靠性高等独有的特点,在各个领域得到了广泛的应用。电子万年历是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用。但通过我们对各种电子钟表、历的不断观察总结发现目前市场的钟、历都存在一些不足之处,比如:时钟不精确、产品成本太高、无环境温度显示等,这都给人们的使用带来了某些不便。为此设计了一种功能全面、计时准确、成本低廉的基于51单片机的万年历。1.2 本课题对于专业知识的综合应用情况由于学习的知识深度的限制以及实际情况的考虑,对于时间系统的电路设计采用了以Protel99se软件进行了电路原理图设计。电路上参考了扬州工业职业设计的单片机开发板进行设计。在设计中力求以最简单的电路来可靠完成时间系统的功能。在设计中严格按照工艺要求进行元器件的布局以及布线等设计,力求使得所设计的产品符合工艺化以及工程化的要求。在设计中综合应用了大学期间所学习的模拟电子产品的安装与测试、数字电子产品的安装与测试以及电子产品的安装与调试等多门专业课程。本课题的选题难度适中,能够对应用电子技术专业学习的专业课程有较为全面的应用与掌握,同时作为一个综合的应用,也与自己的专业能力符合。第二章 智能万年历的工作概述以及原理分析2.1智能万年历的工作概述本设计是以AT89C51单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。温度检测电路由DS18B20提供,当温度高于35度时会报警。显示模块由LCD1602提供,1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号。按键电路由普通的按键和上拉电阻组成。晶振电路单片机AT89C51 液晶显示 复位电路温度检测按键电路 时间检测图2-1 智能万年历的系统原理框图2.2各单元电路模块介绍2.2.1 单片机最小系统模块利用单片机本身的资源外加时钟电路、复位电路及电源电路可以构成单片机的最小系统。在最小系统的基础上连接需要的控制接口电路以及向程序存储器中下载相应的控制程序才能正常工作 。如下图2-2 图2-2单片机最小系统模块2.2.2 1602液晶显示模块液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低消耗应用系统中得到越来越广泛的应用。LCD1602液晶模块的容量为2行16个字,是一种5*7点阵图形来显示字符的液晶显示器,LCD1602模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,每一个字符都有一个固定的代码,如A的代码是010000001B。其工作电压是4.5V-5.5V,工作电流是2.0mA,模块最佳工作电压是5V。液晶电路如下图2-3 图2-3液晶显示模块2.2.3 DS18B20温度传感器模快DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。图 2-4 温度传感器DS18B20的外形图DS18B20的主要特性如下:适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数 据线供电 。独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 ,DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 。DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内,芯片的测温范围55+125,在-10+85时精度为0.5 。在正常工作的时候,可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温 。芯片具有较高的转换速度,在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 最重要的是,测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 当电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。其结构如下图2-5图2-5 DS18B20温度传感器模块2.2.4 DS1302时间检测模块DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。时钟/RAM的读/写数据以一字节或多达31字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时,功耗小于1mW。引脚功能图如图2-7图2-6 时钟芯片外形 图2-7 引脚功能图DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。其原理图如下图2-8图2-8 DS1302时间检测模块2.2.5蜂鸣器模块在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。本设计中用于报警,当温度高于35度时,发出声音。由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动的,一般用三极管来驱动它。如图2-10图2-9蜂鸣器外形图2-10蜂鸣器模块2.2.6按键控制模块每一个按键的电路是独立的,占用一条数据线,上拉电阻保证了按键断开时,I/O口线有确定的高电平。当其中任意一键按下时,它所对应的数据线的电平就变成低电平,若无键闭合,则所有数据线都是高电平。这种键盘电路配置灵活,占用I/O口多,适合少量按键的情况,按下S2未设置时间,按下S3为加时间,按下S4为减时间,按下S5为退出设置。如图2-11图2-11 按键模块2.3 应用Protel绘制系统总原理图2.3.1 Protel简介Protel99SE是澳大利亚ProtelTechnology公司推出的一个全32位的电路板设计软件。该软件功能强大,人机界面友好,易学易用,使用该软件设计者可以容易设计电路原理图、画元件图、设计电路板图、画元件封装图和电路仿真,是夜内人士首选的电路板设计工具。使用电脑设计电路原理图和电路板图是把电子技术从理论运用到实际的第一步。只有会设计电路原理图和电路板图才能进行电子产品的研发与开发。本软件就是从理论走向实际,掌握电子产品开发的基本技术。绘制电路原理图的主要步骤有:进入Protel 99SE环境;使用菜单File/New建立新设计数据库文件;使用菜单File/New在打开窗口选择Schematic Document图标,建立新原理图文件;将原理图打开;设置画图环境;添加元件库;将所需元件从元件库中取出来,放置在图纸上,并且调整好位置;使用连线工具将元件连起来,设置元件属性,对元件进行编号;进行电气规格检查(ERC);建立网络表,为制作电路板图做准备。绘制完成的电路原理图,除了保证电路原理图的正确性以外,同时要注意原理图绘制中的工艺要求。原理图的绘制首先注意的就是原理图的标题栏的设置,在标题栏中一定注意按照工程的规则,对电路的各个属性进行详细的标注。在实际的工作岗位中,不同的公司对于标题栏的填写都具有一定的要求。整体原理图的绘制要求布局均匀,电路按照功能模块进行分布,符合信号流向等一系列的工程规则。在电路图中,要综合使用网络标号、总线、总线入口等对象力求原理图实现结构化走线。在原理图中可以使用文本等对电路进行一定的阐述,增强电路的可读性以及可理解性。2.3.2万年历电路总原理图单片机采用AT89C51芯片,通过该芯片连接各模块电路,从而形成完整的万年历系统,总原理图如下图2-12 图2-12万年历电路总原理图第三章 应用KEIL编程以及Proteus仿真3.1 KEIL软件的介绍KEIL C51是美国KEIL Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用.KEIL C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KEIL C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。. 通过一个集成开发环境(vision)将这些部分组合在一起。运行KEIL软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么KEIL几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。3.2 Proteus软件的介绍Protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,在编译方面,它也支持IAR、keil和MPLAB等多种编译。3.3 KEIL的模块化编程在使用 KEIL 的时候,我们习惯上在一个C 的文件中把自己要写的东西按照自己思路的顺序进行顺序书写。这样是很普遍的写法,当程序比较短的时候比如几十行或者一百多行,是没有什么问题的。但是当程序很长的时候,比如你要用到 LCD 显示数据,就有几个 LCD 相关的函数,然后你想在 LCD 上显示温度,那么就要有 DS18B20 相关的操作,这又有几个相关的函数, 如果你还想加上去 DS1302的时间显示功能,那么又要多很多函数。这样的话一个程序下来几百行是很正常的事情,对于自己写的程序可能在自己的脑海中比较清晰,不会太乱,但是当把自己写的程序交给别人来看的时候,别人往往会看的云里雾里,经常会看着看着就不知道你写的是什么了。于是,我们就想到了用模块化编程的方法,把一个大项目分割成若干个小项目,然后每一个小项目写一个.C文件,最后在一个主函数中把这些小程序组合在一起。这样写的好处是可读性比较强,以及可移植性比较好,可以方便以后的编程。3.4 万年历系统的软件程序调试 1.单击项目窗口中Target1前面“+”号展开目录。在Source Group 1目录上单击鼠标右键,选中弹出菜单项Add files to Group “Source Group 1”。最后在弹出的对话框中按文件类型找到要添加的源程序文件(例如text1.asm),点击add将源程序文件添加到目录。如图3-1所示。图3-1 添加源程序后效果图 2.在添加源程序到项目后,在项目工作界面点击Project菜单,在下拉菜单中选中Translate,将编译当前文件;选中Build target,将编译当前文件并生成应用;选中Rebuild all target files,将重新编译所有文件并生成应用。若无错误,如图3-2所示。图3-2编译后输出效果图 3.通过如图3-2所示的对话框,选择刚才编译生成的.HEX文件。如图3-3所示。图3-3 参数设置图3.5 液晶显示程序及仿真3.5.1 1602液晶显示程序#include#include #include sbit LcdRs= P20;/定义端口sbit LcdRw= P21;sbit LcdEn = P22;sfr DBPort = 0x80;unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;return DBPort;void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();LcdEn=1;_nop_();LcdEn=0;_nop_();LCD_Wait();void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);void LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;这是液晶的驱动程序,在这个程序中根据数据手册对该液晶进行初始化,然后根据时序图读液晶的程序,以及写液晶的程序。重要的就是要把握好延时的时间,对液晶的忙检测可以延长一点时间来解决。3.5.2 液晶的仿真效果图3-4 液晶显示3.6 温度传感器程序及仿真3.6.1 温度传感器程序#includeds18b20.h#includedelay.h#include#define uint unsigned int#define uchar unsigned charsbit DQ = P10; int temp_value; unsigned char TempBuffer5; void delay_18B20(unsigned int i)while(i-);void Init_DS18B20(void) unsigned char x=0; DQ = 1; delay_18B20(8); DQ = 0; /单片机将DQ拉低 delay_18B20(80); /精确延时 大于 480us DQ = 1; /拉高总线 delay_18B20(14); x=DQ; delay_18B20(20);unsigned char ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4); return(dat);void WriteOneChar(uchar dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat=1; void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0x44); delay_18B20(100); Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0xBE); delay_18B20(100);a=ReadOneChar(); /读取温度值低位b=ReadOneChar(); /读取温度值高位temp_value=b4; void temp_to_str() /温度数据转换成液晶字符显示 TempBuffer0=temp_value/10+0; /十位 TempBuffer1=temp_value%10+0; /个位 TempBuffer2=0xdf; /温度符号 TempBuffer3=C; TempBuffer4=0;DS18B20温度传感器的驱动程序是根据数据手册,先对传感器进行初始化。然后根据时序图写读字节的程序和写字节的程序,最后把写读温度的程序,把检测到的温度开始转换为数字量,然后显示在液晶上。3.6.2温度传感器仿真图3-5 温度显示DS18B20检测到的温度实时体现到液晶上。3.7 时钟芯片程序及仿真3.7.1时钟芯片程序#includeds1302.h#includedelay.h#includesbit DS1302_CLK = P16; sbit DS1302_IO = P17; sbit DS1302_RST = P15; sbit ACC0 = ACC0;sbit ACC7 = ACC7;unsigned char week_value2;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; , typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString11;unsigned char TimeString9;SYSTEMTIME; SYSTEMTIME CurrentTime;#define AM(X)X#define PM(X)(X+12) #define DS1302_SECOND0x80 #define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C void DS1302InputByte(unsigned char d) unsigned char i; ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa) , DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); DS1302InputByte(ucDa); DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr) unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); ucData = DS1302OutputByte(); DS1302_CLK = 1; DS1302_RST = 0; return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time-Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Time-Minute = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time-Hour = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time-Day = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time-Week = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time-Month = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time-Year = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time) if(hide_yearDateString0 = 2; Time-DateString1 = 0; Time-DateString2 = Time-Year/10 + 0; Time-DateString3 = Time-Year%10 + 0; else Time-DateString0 = ; Time-DateString1 = ; Time-DateString2 = ; Time-DateString3 = ;Time-DateString4 = /;if(hide_monthDateString5 = Time-Month/10 + 0; Time-DateString6 = Time-Month%10 + 0; else Time-DateString5 = ; Time-DateString6 = ; Time-DateString7 = /;if(hide_dayDateString8 = Time-Day/10 + 0; Time-DateString9 = Time-Day%10 + 0; else Time-DateString8 = ; Time-DateString9 = ; if(hide_weekWeek%10 -1 + 0; else week_value0 = ; week_value1 = 0;Time-DateString10 = 0; void TimeToStr(SYSTEMTIME *Time) if(hide_hourTimeString0 = Time-Hour/10 + 0; T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论