版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、合肥学院单片机原理与应用课程论文 课程论文题目基于AT89C51多功能电子万年历的设计院系名称计算机科学与技术系专 业(班 级)计算机科学与技术(09计本2班)姓 名(学 号) 张玉(0904012045)指 导 教 师 龙夏2012 年 6 月 10 日摘 要:随着单片机应用技术的飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些大部分都是以单片机为控制核心的。单片机是集CPU 、RAM 、ROM 、定时、计数器和多种接口于一体的微控制器。
2、它体积小,成本低,功能强,广泛应用于工业自动化和消费电子,因此具有非常现实的研究意义。本文通过对一个基于单片机实现的电子万年历设计,让我们加深了对单片机、C语言编程、Keil调试、Proteus仿真的理解。此系统由主控制器AT89C51、时钟电路模块DS1302、显示电路模块、温度采集模块DS18B20等部分构成,能实现实时年、月、日、时、分、秒、星期、温度等显示。关键词:DS1302;DS18B20;单片机;多功能万年历引言:万年历是采用数字电路实现对年、月、日、时、分、秒、星期、温度等数字显示的计时装置,广泛用于个人家庭,车站, 码头办公室等公共场所,成为人们日常生活中的必需品。由于数字集
3、成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的功能。诸如能显示周围温度,能动态显示需要的文字信息,而且配上优美的画质,动听的音乐,更有美化环境的功能。因此,研究万年历及扩大其应用,有着非常现实的意义。1 方案论证1.1 单片机芯片的选择 在单片机控制中,常用的ATMEL公司单片机种类有AT89C51、AT89C52、AT89S51、AT89S52,都兼容MCS-51单片机。对于AT89C51,是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and E
4、rasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,1288位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源等主要特性。相比而言,AT89C52有8K的ROM,256B的RAM,还增加一个定时器/计数器2,自然价格比C51略高。而相对而言,S系列的单片机具有在线编程下载(ISP)功能和看门狗,而且运行的速度的最高频率达到33MHZ,使得运行速度更快,自然价格比C 系列的要高2元左右。但是当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,S系列的不需要对芯片多次拔插,节省了调试的时间。综合考虑以上种种因素,由于考
5、虑到产品的成本,在同样能完成我们所要求的功能时,自然会选择相对便宜的AT89C51,这样更容易把产品推向市场。但是在实验室的的调试中,我们依然可以用AT89S51,这样就方便了我们的硬件调试,同样降低了开发产品的成本。 1.2 显示模块的选择常见的文字、图像显示屏主要有LED(Light Emitting Diode )显示屏,LCD(Liquid Crystal Display),LED点阵数码管显示。LED显示器与LCD显示器相比,LED在亮度、功耗、可视角度和刷新速率等方面,都更具优势。LED与LCD的功耗比大约为10:1,而且更高的刷新速率使得LED在视频方面有更好的性能表现,能提供宽
6、达160的视角,可以显示各种文字、数字、彩色图像及动画信息,也可以播放电视、录像、VCD、DVD等彩色视频信号,多幅显示屏还可以进行联网播出。但是考虑到LED的价格比LCD贵的多,一般应用在对成本不是很敏感的产品上的。对于LED点阵数码管显示,一般体积较大,适合用于机场,广场等大型屏幕显示,显然不符合袖珍型的电子万年历室内产品。LCD占用空间小,低功耗,低辐射,无闪烁,降低视觉疲劳。综合考虑,基于时代的潮流,在人们能普遍接受的价格内,我们优先考虑用LCD,这样既满足了人们的审美观,也符合世界潮流的发展,是一项新产品成功推向市场的必要条件。1.3 时钟芯片的选择可以直接采用单片机定时计数器提供秒
7、信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,而且精度不是很高。因此选用专用的DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA。1.4 电路设计最终方案综上各方案所述,对此次作品的方案选定: 采用AT89C51作为主控制系统; DS1302提供时钟;LCD液晶显示器作为显示,DS18B20用来采集温度信息,ADC0832用来实现模拟和数字信号的转换。2 系统的硬件电路设计和实现2.1
8、电路设计框图AT89C51主控DS18B20模块DS1302模块LCD模块DAC0832模块图1 原理框图2.2系统硬件概述本电路是由AT89C52单片机为控制核心,具有可编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、时、分、秒、星期进行计时,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、时、分、秒、星期等时钟所需数据,具有使用寿命长,精度高和低功耗等特
9、点,同时具有掉电自动保存功能;显示部份由LCD液晶显示屏显示。2.3 主要单元电路的设计2.3.1 单片机主控制模块的设计AT895C1单片机为40引脚双列直插芯片,有四个8位I/O口,分别P0、P1、P2、P3,每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。 如图2 所示:图2 主控制系统 2.3.2 时
10、钟电路模块的设计低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补 偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上 , 能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的 分析以及对异常数据出现的原因的查找有重要意义。采用 DS1302 作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录
11、些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用 DS1302 则能很好地解决这个问题。(1) DS1302 的性能特性实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;用于高速数据暂存的 318 位 RAM;最少引脚的串行 I/O;2.55.5V 电压工作范围;2.5V
12、 时耗电小于 300nA;用于时钟或 RAM 数据读/写的单字节或多字节(脉冲方式)数据传送方式;简单的 3 线接口;可选的慢速充电(至 VCC1)的能力。DS1302 时钟芯片包括实时时钟/日历和 31 字节的静态 RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于 31 天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用 24h 或带 AM(上午)/PM(下午)的 12h 格式。采用三线接口与 CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据。DS1302 有主电源/后备电源双电
13、源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2 在双电源系统中提供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302 由 VCC1 或 VCC2 中较大者供电。当 VCC2 大于 VCC1+0.2V 时,VCC2 给 DS1302 供电;当 VCC2 小于 VCC1 时,DS1302 由 VCC1 供电。(2) DS1302 数据操作原理DS1302 在任何数据传送时必须先初始化,把 RST 脚置为高电平,然后把 8 位地址和命令字装入移位寄存器,数据在 SCLK 的上升沿被输入。无论是读周
14、期还是写周期,开始 8 位指定 40 个寄存器中哪个被访问到。在开始 8 个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为 8 加 8,在多字节方式下为 8 加字节数,最大可达248 字节数。Vcc2 Vcc1X1 SCLK X2 I/O GND RST273645U3 DS130218图 4-3 DS1302 管脚图如果在传送过程中置 RST 为低电平,则会终止本次数据传送,并且 I/O 引脚变为 高阻态。上电运行时,在 VCC =2.5V 之前,RST 脚必须保持低电平。只有在 SCLK 为 低电平时,才能将 R
15、ST 置为高电平。DS1302 的管脚图如图 4-3 所示,内部结构图如图 4-4 所示,表 4-2 为各引脚的功能。DS1302 的控制字如图 4-5 所示。控制字节的最高有效位(位 7)必须是逻辑 1;如果它为逻辑 0,则不能把数据写入到 DS1302 中。位 6 如果为 0,则表示存取日历时 钟数据;为 1 表示存取 RAM 数据。位 51(A4A0)指示操作单元的地址。最低有 效位(位 0)如为 0,表示要进行写操作;为 1 表示进行读操作。控制字节总是从最 低位开始输入/输出.为了提高对 32 个地址的寻址能力(地址/命令位 15逻辑 1),可以把时钟/ 日历或 RAM 寄存器规定为
16、多字节(burst)方式。位 6 规定时钟或 RAM,而位 0 规定读或写。在时钟/日历寄存器中的地址 931 或 RAM 寄存器中的地址 31 不能存储数据 。在多字节方式中,读或写从地址 0 的位 0 开始。必须按数据传送的次序写最先的 8个寄存器。但是,当以多字节方式写 RAM 时,为了传送数据不必写所有 31 字节。不 管是否写了全部 31 字节,所写的每一字节都将传送至 RAM。数据读写程序如图 4-6所示。DS1302 共有 12 个寄存器,其中有 7 个寄存器与日历、时钟相关,存放的数据位 为 BCD 码形式,其日历、时间寄存器及其控制字见表 4-3,其中奇数为读操作,偶数为写操
17、作。时钟暂停:秒寄存器的位 7 定义位时钟暂停位。当它为 1 时,DS1302 停止振荡, 进入低功耗的备份方式。通常在对 DS1302 进行写操作时(如进入时钟调整程序),停 止振荡。当它为 0 时,时钟将开始启动。AM-PM/12-24小时方式:小时寄存器的位 7 定义为 12 或 24小时方式选择 位。它为高电平时,选择 12小时方式。在此方式下,位 5 是 AM/PM 位,此位是高 电平时表示 PM,低电平表示 AM,在 24小时方式下,位 5 为第二个 10小时位(2023h)。5(3)DS1302 的应用实时时钟芯片 DS1302 采用串行数据传输,可为掉电保护电源提供可编程的充电
18、 功能,也可以关闭充电功能,芯片采用 32768Hz 晶振。要特别说明的是,备用电源 BT1可以用电池或超级电容(10 万F 以上)。虽然 DS1302 在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100F 就可以保证 1 小时的正常走时 )。DS1302 在第一次加电后,需进行初始化操作。初始化后就可以按正常方法调整时间。DS1302 的时钟电路如图 4-7 所示。2.3.3显示模块的设计AMPIRE12864点阵式LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及12864全点阵液晶
19、显示器组成。可完成图形显示,也可以显示84个(1616点阵)汉字。各管脚功能说明如表3。(1)数据寄存器(DR):DR是用于寄存数据的,与指令寄存器寄存指令相对应。当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。(2)忙标志BF:BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUS READ指令,可以将BF读到DB7总线,从检验模块之工作状态。 表3 管脚功能说明管脚号管脚名称 LE
20、VER 管脚功能描述1VSS 0 电源地 2 VDD +5.0V 电源电压 3 VO - 液晶显示器驱动电源 4 D/I(RS)1/0D/I=1,表示DB7DB为显示数据D/I=0,表示DB7DB0为显示指令数 据 5 R/W 1/0 R/W=1,E=1,数据被读到DB7DB0R/W=0,E=10,数据被写到IR或DR6E 1/0R/W=0,E信号下降沿锁存DB7DB0R/W=1,E=1DDRAM数据读到DB7DB07 DB0 1/0 数据线 8 DB1 1/0 数据线 9 DB2 1/0 数据线10 DB31/0 数据线11 DB41/0 数据线12 DB5 1/0 数据线13 DB61/0
21、 数据线14 DB71/0 数据线15 CS11/0 H:选择芯片(右半屏)信号16 CS21/0H:选择芯片(左半屏)信号17 RET1/0 复位信号,低电平复位18 VOUT-10V LCD驱动负电压19 LED+ - LED背光板电源20LED- LED背光板电源 (3) 显示控制触发器DFF:此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY OFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。DDF的状态是指令DISPLAY ON/OFF和RST信号控制的。(4)XY地址计数器:XY地址计数器是一个9位计数器。高3位是X地址
22、计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。(5)Z地址计数器:Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。Z地址计数器可以用指令DISPLAY START LINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开
23、始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。(6)12864LCD的指令系统及时序:该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表4所示: 表4 12864LCD系统指令表指令名称R/WRSDB7DB6DB5DB4DB3DB2DB1DB0显示开关0000111111/0显行设置0011XXXXXX显页设置0010111XXX列地址设置0001XXXXXX读状态10BUSY0OF/OF00000写数据01 数据读数据11 数据例如设置页指令:只需令R/W=0,RS=0,指令寄存器RI=10111XXX,后三位
24、表示页码,范围是07,指令格式如表5:假如令页码page=5,则 表5 设置页码=5的指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 001 0 1 1 1 1 0 12.3.4温度采集模块设计 如图6所示。采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。 图6 DS18B20温度采集DS18B20原理简介(1) 各引脚定义:I/O为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端
25、(在寄生电源接线方式时接地)。(2)配置寄存器的8位从高到低依次为:TM R1 R0 1 1 1 1 1 ,在这8位中低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用 户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)。(3)高速暂存器:高速暂存存储器由9个字节组成,其分配如表-6所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表1所示。对应的温度计算: 当符
26、号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。第九个字节是 冗余检验字节。 表6 高速暂存器地址分布字节地址012345678寄存器内容温度低位温度高位高温限值低温限值配置寄存器保留保留保留CRC校检位根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行 复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后 释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存
27、在低脉冲,主CPU收到此信号表示复位成功。(4)ROM指令介绍:主要有5条指令,如下表7所示: 表7 ROM指令表指 令约定代码 功能读ROM33H读DS1820的ROM中的编码(即64位地址)符合ROM 55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索ROM0F0H用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。警告搜索命令0EC
28、H执行后只有温度超过设定值上限或下限的片子才做出响应。 (5)RAM指令:主要有4条指令,涉及到温度的转换到存储的一个简单过程。 表8 RAM指令表指 令约定代码 功能温度变换44H启动DS1820温度转换,结果存入9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容。写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调EEPRM0B8H将EEPROM中内容恢复到RAM中的第3 、4字节。读供电方式0B4H寄生供电DS1820发送“ 0 ”,外接电源供电DS1820发
29、送“ 1 ”。2.3.5 数据保护模块设计正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。其中的数据保护电路如图7所示。图7 ADC0832工作原理简介当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能
30、选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。如资料 所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由
31、DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。 作为单通道模拟信号输入时ADC0832的输入电压是05V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-
32、的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。这个电路的数据保护功能工作原理:当电压低于工作所需的的正常电压时,单片机就自动进入休眠模式,此时需要的功耗很低,可以由一个大的电容和的放电来维持一段比较长的时间,以致于在更换电池或是图软断电的情况下不至于从新对电子万年历进行校对。3 系统的软件设计基于对C语言的通用性和强兼容性的特点,本程序采用了C语言编程。从规范化出发,先是采取流程图的方式,描述出了这个编程的设计思想,运行模式。再是进一步的细化,从每一个模块出发,把每个模块编程一个模块,最后编主程序。3.1主程序流程框图 开始 初 始 化 读日期、时间、温度 写日期、
33、时间、温度 显 示 子 程 序开 关 控 制 子 程 序时间、日期调整子程序 更新数据 图8 总程序流程框图3.2 时间调整流程图 开 始控制键有效,进入分钟整程序等待按键程序加键 有效加键 有效分钟加分钟减控制键有效,进入小时整程序等待按键程序加键 有效加键 有效小时加小时减按键有效 ,跳出时间调整 程序 ,进入主循环程序控制键有效,进入日期整程序等待按键程序加键 有效加键 有效日期加日期减控制键有效,进入年调整程序等待按键程序加键 有效加键 有效年份加年份减控制键有效,进入月份整程序等待按键程序加键 有效加键有效月份加月份减控制键有效,进入星期整程序等待按键程序加键 有效加键 有效星期加星
34、期减 图9 调整程序流程图4 总结与致谢制作这次课程设计一切几乎是从零开始,从最简单的画流程图起步,从单片机C语言子程序设计起步,一步一步做到最后。这次课程设计从开始到制作到完成大约一个月。当电子万年历几乎到达预期效果时,那种激动和喜悦只有自己可以体会。在整个设计过程中,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了设计,基本达到了预期的目的,完了最初的设想。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,
35、不要想着走捷径,一步一脚印。也炼就了我的耐心,做什么事都要有耐心。此次课程设计中学到了很多很多东西,这是最重要的。总之,此次课设使我的能力得到了全方位的提高,使得我的操作能力和专业技能都有了很大的提高。参考文献1. 陈景初.单片机应用系统设计与实践M.北京:北京航空航天大学出版社,2006.2. 徐爱钧单片机高级语言编程与uVision2应用实践M.北京: 电子工业出版社,2004.3刘勇.数字电路M.北京:电子工业出版社,2004.4王法能.单片机原理及应用M.北京:科学出版社, 2004.5. 何立民MCS-51系列单片机应用系列设计M.北京:北京航空航天大学出版社,2006.6. 李广弟
36、,朱月秀,王秀山单片机基础M. 北京航空航天大学出版社,2004.7. 马家辰.MCS-51单片机原理与接口技术M.哈尔滨: 哈尔滨工业大学出版社,2005.8陈正振.电子电路设计与制作J. 广西交通职业技术学院信息工程系, 2007.9杨子文.单片机原理及应用M. 西安电子科技大学出版社, 2006.10.何立民MCS-51系列单片机应用系列设计M. 航空航天大学出版.2004.11.何立民单片机中级教程M. 北京:航空航天大学出版.第二版.2006.附录一:源程序24DS1302时钟模块#ifndef _REAL_TIMER_DS1302_#define _REAL_TIMER_DS130
37、2_sbit DS1302_RST = P35; /实时时钟复位线引脚sbit DS1302_IO = P36; /实时时钟数据线引脚 sbit DS1302_CLK = P37; /实时时钟时钟线引脚 sbit ACC0 = ACC0;sbit ACC7 = ACC7;typedef struct _SYSTEMTIME_unsigned char Second;/秒;unsigned char Minute;/分钟;unsigned char Hour; /小时;unsigned char Week; /星期;unsigned char Day; /日unsigned char Month
38、; /月unsigned char Year; /年unsigned char YearH; /年高位SYSTEMTIME;/定义的时间类型#define DS1302_SECOND0x80#define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH 0x88#define DS1302_YEAR0x8C#define DS1302_YEARH0xC0/利用DS1302的RAM存放年份高位数据void DS1302InputBy
39、te(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(A
40、CC); void Write1302(unsigned char Addr, unsigned char Da)/ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(Addr); DS1302InputByte(Da/10)Minute); Write1302(DS1302_HOUR, Time-Hour); Write1302(DS1302_DAY, Time-Day);Write1302(DS1302_MONTH,Time-Month);Write1
41、302(DS1302_YEAR,Time-Year); Write1302(DS1302_WEEK,Time-Week); Write1302(DS1302_YEARH,Time-YearH); DS1302_SetProtect(1); ReadValue=Read1302(DS1302_SECOND);/保持秒钟自然走钟Time-Second= (ReadValue&0x70)4)*10 + (ReadValue&0x0F);void DS1302_GetTime(SYSTEMTIME *Time)unsigned char ReadValue;ReadValue=Read1302(DS1
42、302_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 +
43、(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);ReadValue= Read1302(DS1302_YEARH
44、);Time-YearH=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);void Initial_DS1302(void)unsigned char Second=Read1302(DS1302_SECOND);DS1302_SetProtect(0); if(Second&0x80) Write1302(DS1302_SECOND,0); Write1302(DS1302_YEARH,20);DS1302_SetProtect(1);#endifDS18B20温度模块#ifndef _DS18B20_H_#define _DS18B20_H_sbit DQ
45、 = P27;void DelayDS18B20(int num)/延时函数while(num-) ;void Init_DS18B20(void)/初始化ds1820unsigned char x=0;DQ = 1; /DQ复位DelayDS18B20(8); /稍做延时DQ = 0; /单片机将DQ拉低DelayDS18B20(80); /精确延时 大于 480usDQ = 1; /拉高总线DelayDS18B20(14);x=DQ; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败DelayDS18B20(20);unsigned char ReadOneChar(void)/读
46、一个字节unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;DelayDS18B20(4);return(dat);void WriteOneChar(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;DelayDS18B20(5);DQ = 1;dat=1;unsigned int ReadTemperature(void)
47、/读取温度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器a=ReadOneChar(); /读低8位b=ReadOneChar(); /读高8位t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5
48、; /放大10倍输出并四舍五入return(t);#endifADC0832模数转换模块#ifndef _ADC0832_H_#define _ADC0832_H_/定义ADC0832接口sbit ADC_CLK=P34;sbit ADC_DI =P33;sbit ADC_DO =P33;sbit ADC_CS =P32;/ADC0832延时,脉冲void Delaysjj(unsigned char x)unsigned char i;for(i=0;ix;i+); /延时,脉冲一位持续的时间unsigned char ReadADC(unsigned char td) /把模拟电压值转换成
49、8位二进制数并返回unsigned char i,ch;ADC_CS=0; /片选,DO为高阻态ADC_DO=0;Delaysjj(2);ADC_CLK=0;Delaysjj(2);ADC_DI=1;ADC_CLK=1;/第一个脉冲,起始位Delaysjj(2);ADC_CLK=0;Delaysjj(2); ADC_DI=1; ADC_CLK=1;/第二个脉冲,DI=1表示双通道单极性输入Delaysjj(2);ADC_CLK=0;Delaysjj(2);ADC_DI=td; /第三个脉冲,DI=0表示选择通道1(CH0),DI=1时选择通2(CH1)ADC_CLK=1; Delaysjj(2);ADC_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店管理实训报告
- 电瓶车仪表通信协议书
- 小儿哮喘急性发作护理管理指南
- 高血压患者心理健康指导方案
- 弘扬中华体育精神 凝聚民族复兴力量
- 老年人风险评估及安全管理
- 2026安徽合肥热电集团春季招聘25人备考题库含答案详解ab卷
- 2026四川甘孜州泸定县人民医院编外招聘工作人员5人备考题库带答案详解(突破训练)
- 2026扬州平山堂茶业发展有限公司招聘茶饮店劳务派遣人员2人备考题库及答案详解【有一套】
- 中国精神对我们意味着
- 《机械基础(第二版)》中职全套教学课件
- 《低压电工实操及考证》全套教学课件
- 《奔富系列宣传》课件
- 《建筑碳减排量计算方法及审定核查要求》
- 专题37 八年级名著导读梳理(讲义)
- 神经科学研究进展
- 西方现代艺术赏析学习通超星期末考试答案章节答案2024年
- 新课标语文整本书阅读教学课件:童年(六下)
- CJ/T 124-2016 给水用钢骨架聚乙烯塑料复合管件
- 电影赏析绿皮书课件(内容详细)
- 2024年LOG中国供应链物流科技创新发展报告
评论
0/150
提交评论