毕业设计(论文)-基于AVR单片机万年日历的设计.doc_第1页
毕业设计(论文)-基于AVR单片机万年日历的设计.doc_第2页
毕业设计(论文)-基于AVR单片机万年日历的设计.doc_第3页
毕业设计(论文)-基于AVR单片机万年日历的设计.doc_第4页
毕业设计(论文)-基于AVR单片机万年日历的设计.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

湖南农业大学东方科技学院湖南农业大学东方科技学院 全全日日制制普普通通本本科科生生毕毕业业论论文文(设设计计) 基于基于 avravr 单片机万年日历的设计单片机万年日历的设计 design of permanent calendar based avr single chip microcomputer 学生姓名学生姓名: 学学 号:号: 年级专业及班级:年级专业及班级:2008级级信息工程(信息工程(2)班)班 指导老师及职称:指导老师及职称: 学学 部:部:理工学部理工学部 湖南长沙 提交日期:2012 年 5 月 湖南农业大学东方科技学院全日制普通本科生 毕业论文(设计)诚信声明 本人郑重声明:所呈交的本科毕业论文是本人在指导老师的指导下, 进行研究工作所取得的成果,成果不存在知识产权争议。除文中已经注 明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的 作品成果。对本文的研究做出重要贡献的个人和集体在文中均作了明确 的说明并表示了谢意。同时,本论文的著作权由本人与湖南农业大学东 方科技学院、指导教师共同拥有。本人完全意识到本声明的法律结果由 本人承担。 毕业论文(设计)作者签名: 年 月 日 目 录 摘要 .1 关键词 .1 1 前言 2 2 方案选择和论证 2 2.1 单片机的选择 2 2.2 显示模块的选择 2 2.3 时钟芯片的选择 3 2.4 温度传感器的选择 3 2.5 键盘操作方案的选择 3 2.5 总体方案的决定 4 3 系统硬件电路设计 4 3.1 系统主控模块atmega16 高速 avr 单片机4 3.1.1 atmega16 简介4 3.1.2 atmega16 的主要特性5 3.1.3 atmega16 的引脚及功能5 3.2 ds1302 时钟模块6 3.2.1 ds1302 简介6 3.2.2 ds1302 主要特性6 3.2.3 ds1302 引脚及功能6 3.2.4 ds1302 操作原理6 3.2.5 ds1302 的应用 .8 3.3 ds18b20 测温模块.8 3.3.1 ds18b20 简介.8 3.3.2 ds18b20 主要特性.8 3.3.3 ds18b20 引脚功能.9 3.3.4 ds18b20 操作原理.9 3.3.5 ds18b20 的应用11 3.4 lcd1602 显示模块12 3.4.1 lcd1602 简介12 3.4.2 1602lcd 的特性12 3.4.3 lcd1602 引脚及功能12 3.4.4 lcd1602 操作原理13 3.5 键盘接口模块 .17 3.5.1 矩阵键盘简介 17 3.5.2 按键处理 .18 3.5.3 矩阵键盘的应用 .18 3.6 闹铃模块 .18 3.7 系统主电路 .19 4 系统软件设计 .20 4.1 主程序 20 4.2 时钟函数 .21 4.2.1 时钟显示函数 .21 4.2.2 时钟调整函数 .23 4.3 温度显示 .26 4.3.1 温度读取函数 26 4.3.2 温度显示函数 27 4.4 闹铃函数 .30 4.4.1 闹铃功能主函数 .30 4.4.2 蜂鸣器启动函数 .33 5 测试运行情况 .35 6 结束语 .36 参考文献 37 致谢 38 1 基于基于 avravr 单片机万年日历的设计单片机万年日历的设计 (湖南农业大学东方科技学院,长沙 410128) 摘摘 要要:单片机以其高可靠性,低廉的价格,低电压,低功耗等一系列优点,近些年得到 了迅猛的发展和大范围推广,广泛的应用于工控系统,通讯设备及日常消费类产品中,并已深入 到工业生产和人民生活中的各个方面中。 本设计使用 atmel 公司的 atmega16 单片机作控制核心,采用 dallas 公司的实时时钟芯片 ds1302 提供时钟。ds1302 时钟芯片是美国 dallas 公司推出的具有涓细电流充电功能的低功耗实 时时钟芯片,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且 ds1302 的使用寿命长,误差小;led 显示屏,支持动态和字符显示,可同时显示年、月、日、星 期、时、分、秒等信息。另外,该电子时钟还具有时间修改校对功能。实现了时钟的显示,调整 以及断电恢复。并使用 ds18b02 提供了温度显示以及使用 atmega16 的片内 eeprom 提供闹铃等附 加功能。 关键词关键词:单片机;avr;ds1302;日历 design of permanent calendar based avr single chip microcomputer (oriental science technology college of hunan agricultural university, changsha 410128) abstract:in recent years, microcontroller has been the rapid development and large-scale promotion with its high reliability, low cost, low voltage, low power consumption and series of advantages. it has been widely used in industrial control systems, communication equipment and everyday consumer products. in addition, it has gone deep into all aspect of industrial production and our day lives. this design using atmels atmega16 microcontroller as the core for the control. time circuit which is constituted by dallass ds1302 real-time clock chip. ds1302clock chip is introduced by american dallas corporation has fine current trickle charging function low power real-time clock chip, 2 it can be years, months, days, hours, minutes, seconds for time, also has a variety of functions such as a leap year compensation, but also ds1302has long service life, small error; led display screen, support for dynamic and character display, can also show the year, month, day, week, time, minutes and seconds, and other information. in addition, the electronic clock also has time to modify the proofreading function. finally it achieved a clock display, clock adjusts and power-failure recover .it increased functionality for the temperature display by ds18b20 and the alarm by atmega16 on-chip eeprom. keywords: microcontroller; avr;ds1302;calendar 1 1 前言前言 本文设计了一种基于 avr 单片机的时钟方案。以 atmega16 单片机作为主控, 与时钟芯片 ds1302,1602lcd 显示模块,ds18b20 温度传感器,矩阵键盘等组成硬 件系统。因在硬件系统中设计有独立的键盘和 lcd 显示屏,能显示丰富的信息并能 根据使用者的需要进行时间的校准,比传统的数码管电子时钟具有读取方便,显示直 观,功能多样等优点,同时提供断电运行,温度显示,闹铃等附加功能,更加合适日 常的实际应用。 2 方案选择和论证 2.1 单片机的选择 方案一:采用传统的 at89c51 作为主控。at89c51 是一种带 4k 字节 flash 存储器, 128 字节内部 ram 的低电压 cmos 8 位微处理器。运算速度较高,接口丰富,操作简单。 且因出现年代较早,技术成熟,成本低廉,在各个领域应用广泛1。 方案二:采用 atmega16 作为主控。atmega16 是基于增强的 avr risc 结构的低功 耗 8 位 cmos 微控制器。拥有 16k 字节可擦写一万次以上的系统内可编程 flash,512 字节可擦写十万次以上的片内 eeprom,以及 1k 字节 sram。拥有 1mips / mhz 的高速 运算能力2。 由于本系统功能较多,需要更多的程序储存空间,运行临时空间。需要执行较为 复杂的数据运算,对 cpu 运算速度要求较高。所以在程序执行方面选择 atmega16 更 符合设计要求。另外由于闹铃设置需要断电后保存,内置 eeprom 的 atmega16 省去了 外接 eeprom 储存芯片的需求,使系统更加简单高效,因此选用 atmega16 作为主控单 片机。 2.2 显示模块的选择 方案一:采用点阵式 led 显示屏。点阵式 led 非常合适大屏显示格式化内容,并 3 且在广告牌,信息发布系统中已有较为广泛的应用。 方案二:采用 led 数码管。led 数码管价格低廉,易于操作,功耗低。简单的便 携式时钟显示系统上几乎都使用了 led 数码管显示的形式。 方案三:采用 lcd 液晶显示屏。液晶显示屏的功能强大,像素密度高,能显示大 量文字,图形,且无辐射,硬件连接简单,现代数码设备几乎都采用了 lcd 作为显示 设备。 本系统功能较多,需要显示的内容也比较多,一个 7 段 led 数码管只能显示一个 数字,显示大量内容需要多个数码管,成本高昂且硬件电路难以控制。点阵 led 虽然 能显示较多内容,但是大屏点阵 led 成本高昂,线路连接复杂,不适合设计应用。因 此,选用 lcd 液晶屏作为显示模块。 2.3 时钟芯片的选择 方案一:直接采用单片机内部时钟提供秒信号,使用程序实现年,月,日,时, 分,秒的计数。 方案二:采用 ds1302 芯片提供时钟,由单片机读取 ds1302 储存的时钟数据。 直接使用单片机内部时钟可以简化硬件电路设计,减少芯片的使用,节约成本。 但是断电或单片机被复位后数据会丢失,不合适实际应用。ds1302 芯片可以使用后备 电池涓流充电功能,主电源关闭的情况下依然维持时钟运行,所以本设计选用此方案。 2.4 温度传感器的选择 方案一:美国 analo g dev ices 公司的 ad590。ad590 通过输出不同的电流值反 应实时温度。能测量热力学温度、摄氏温度、两点温度差、多点最低温度、多点平均 温度的具体电路,广泛应用于不同的温度控制场合。 方案二:美国 dallas 公司的 ds18b20。ds18b20 通过单总线传输数据,可以通过 寄生电源供电,能实现单线多设备的连接。同时拥有内部 ram 进行内部温度转换并直 接通过单总线传输 bcd 码格式的数字温度数据,简化线路设计与控制端的计算需求。 由于 ad590 的输出电流和温度件的线性相关性容易受到硬件电路的影响,且读取 电流值转换为温度的程序设计复杂,因而本设计采用程序和操作简单的 ds18b20 作为 温度传感器。 2.5 键盘操作方案的选择 方案一:使用独立键盘。独立键盘是指直接连接单片机 i/o 口构成的单个案件 电路。电路配置灵活,软件操作结构简单。 4 方案二:使用矩阵键盘。矩阵键盘是由行线和列线构成,按键位于行,列的交 叉点上。可以使用较少的单片机 i/o 口操作较多的按键,简化电路设计,节约单片机 i/o 口。 本设计实现的功能较多,需要的操作多,外围硬件占用的 i/o 口也比较多,所 以选用矩阵键盘更符合设计需求。 2.5 总体方案的决定 根据以上各模块方案所述,本设计最终采用 atmega16 单片机作为主控,ds1302 提供时钟,lcd1602 作为显示模块,ds18b02 作为温度传感器,矩阵键盘提供用户所 需的操作。 3 系统硬件电路设计 根据系统设计方案和功能要求,初步确定系统由主控模块,时钟模块,显示模 块,测温模块,闹铃模块,键盘接口模块六个模块组成,电路系统构成如图 1 所示。 主控芯片使用美国 atmel 公司生产的 atmega16 单片机,时钟芯片使用美国 dallas 公 司推出的 ds1302,温度传感器采用美国 dallas 公司的 ds18b20,显示设备使用的是 lcd1602。 3.1 系统主控模块atmega16 高速 avr 单片机 3.1.1 atmega16 简介 atmega16 芯片是以 atmel 高密度非易失性存储器技术生产的基于增强的 avr risc 结构的低功耗 8 位 cmos 微控制器。片内 isp flash 允许程序存储器通过 isp 串行接口,或者通用编程器进行编程,也可以通过运行于 avr 内核之中的引导程序进 行编程。引导程序可以使用任意接口将应用程序下载到应用 flash 存储区 (applicationflash memory)。在更新应用 flash 存储区时引导 flash 区(boot flash memory)的程序继续运行,实现了 rww 操作3。 通过将 8 位 risc cpu 与系统内可编 主控模块 atmega16 时钟模块 ds1302 显示模块 lcd1602 测温模块 ds18b02 闹铃模块 键盘接口模块 图 1 系统模块结构 fig.1 system module structure 5 程的 flash 集成在一个芯片内, atmega16 成为一个功能强大的单片机,为许多嵌入 式控制应用提供了灵活而低成本的解决方案。atmega16 具有一整套的编程与系统开 发工具,包括:c 语言 编译器、宏汇编、 程序调试器/ 软件仿真器、仿真器及评估 板。 3.1.2 atmega16 的主要特性 增强的 avr risc 结构 单周期指令执行时间 16k 字节系统内可编程 flash,擦写寿命 10000 次 512 字节 eeprom,擦写寿命 10000 次 1k 字节 sram 32 个 8 位通用工作寄存器 3.1.3 atmega16 的引脚及功能 porta,portb,portc,portd 均为为 8 位双向 i/o 口,具有可编程的内部上 拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为 输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。 reset 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。 图 2 atmega16 引脚定义 fig.2 atmega16 pin definitions 6 xtal1 反向振荡放大器与片内时钟操作电路的输入端。 xtal2 反向振荡放大器的输出端。 avcc avcc 是端口 a 与 a/d 转换器的电源。不使用 adc 时,该引脚应直接与 vcc 连接。使用 adc 时应通过一个低通滤波器与 vcc 连接。 aref a/d 的模拟基准输入引脚。 3.2 ds1302 时钟模块 3.2.1 ds1302 简介 ds1302 是 dallas 推出的一种高性能、低功耗、带 ram 的实时时钟电路,采用三 线接口与 cpu 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或 ram 数据。ds1302 内部有一个 318 的用于临时性存放数据的 ram 寄存器。ds1302 是 ds1202 的升级产品,与 ds1202 兼容,但增加了主电源/后备电源双电源引脚,同时提 供了对后备电源进行涓细电流充电的能力4。 3.2.2 ds1302 主要特性 实时时钟(rtc)记录秒分小时月星期和年份信息,带闰年补偿, 有效期至 2100 年 31 x 8 带后备电池通用 ram 简易 3-wire 接口实现最小引脚数的串行 i/o 2.0v 至 5.5v 完全电压支持,2.0v 下电流需求小于 200na 触发模式,用于读写时钟/ram 中的连续地址 适应工业温度范围:-40至+85 3.2.3 ds1302 引脚及功能 vcc1:后备电源;vcc2:主电源。当 vcc2vcc1+0.2v 时,由 vcc2 向 ds1302 供电,当 vcc2 清除液晶显示器,即将 ddram 的内容全部填入“空白”的字符码 20h; 光标归位,即将光标撤回液晶显示屏的左上方,并将地址计数器(ac)的值设为 0。 表 5 光标归位指令 table 5 cursor homing command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 14 光标归位000000001x1.64 功能: 把光标撤回到显示器的左上方; 把地址计数器(ac)的值设置为 0,并保持 ddram 的内容不变 表 6 输入模式设置指令 table 6 input mode set command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 进入设置模式00000001i/os40 功能:设定每次写入 1 位数据后光标的移位方向,并且设定每次写入的一个字符是否 移动。参数设定如表 7: 表 7 输入模式设置位 table 7 input mode set bit 位名置 0置 1 i/d写入新数据后光标左移写入新数据后光标右移 s写入新数据后显示屏不移动写入新数据后显示屏整体右移 1 个字 表 8 显示开关控制指令 table 8 display switch control command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 进入设置模式0000001dcb40 功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定如表 9: 表 9 显示开关设置位 table 9 display switch set bit 位名置 0置 1 d显示功能关显示功能开 c无光标 有光标 b光标不闪烁光标闪烁 表 10 设定显示屏或光标移动方向指令 table 10 screen set or cursor move direct command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 15 设定显示屏或光 标移动方向000001s/cr/lxx40 功能:使光标移位或使整个显示屏幕移位。参数设定如表 11: 表 11 显示屏或光标移动方向设置位 table 11 screen set or cursor move direct set bit s/cr/l设定功能 00光标左移 1 格,且 ac 值减 1 01光标右移 1 格,且 ac 值加 1 s/c r/l设定功能 10显示器上字符全部左移一格,但光标不动 11显示器上字符全部右移一格,但光标不动 表 12 功能设定指令 table 12 function setting command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 功能设定00001dlnfxx40 功能:设定数据总线位数、显示的行数及字型。参数设定如表 13 表 13 功能设定位 table 13 function setting bit 位名置 0置 1 dl数据总线为 4 位数据总线为 8 位 n显示 1 行 显示 2 行 f57 点阵/每字符510 点阵/每字符 表 14 cgram 地址设置指令 table 14 cgram address set command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 功能设定0001cgram 地址(6 位)40 16 功能:设定下一个要存入数据的 cgram 的地址。 表 15 ddram 地址设置指令 table 15 ddram address set command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 功能设定00ddram 地址(7 位)40 功能:设定下一个要存入数据的 ddram 的地址。 表 16 读取忙信号或 ac 地址指令 table 16 get busy signal or ac address command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 读取忙信号或 ac 地址指令01fbac 内容(7 位)40 功能: 读取忙碌信号 bf 的内容,bf=1 表示液晶显示器忙,暂时无法接收单片机 送来的数据或指令; 当 bf=0 时,液晶显示器可以接收单片机送来的数据或指令。 读取地址计数器(ac)的内容 表 17 写入 ddram 或 cgram 指令 table 17 write ddram or cgram command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms 写入 ddram 或 cgram 指令10要写入的数据(d7-d0)40 功能: 将字符码写入 ddram,以使液晶显示屏显示出相对应的字符; 将用户自己设计的图形存入 cgram。 表 18 cgram 或 ddram 读数据指令 table 18 read from cgram or ddram command 指令编码指令功能 rsr/wdb7db6db5db4db3db2db1db0 执行时间 /ms cgram 或 ddram 17 读数据指令11要读出的指令40 功能:读取 ddram 或 cgram 中的内容。 lcd1602 基本操作时序: 读状态:输入 rs=l,rw=h,e=h,输出:db0db7=状态字 写指令:输入 rs=l,rw=l,e=下降沿脉冲,db0db7=指令码 读数据:输入 rs=h,rw=h,e=h,输出:db0db7=数据 写数据:输入:rs=h,rw=l,e=下降沿脉冲,db0db7=数据 3.5 键盘接口模块 3.5.1 矩阵键盘简介 矩阵式键盘又称行列式键盘,有 n 个行线和 m 个列线,经限流电阻接+5v 电源上, 按键跨接在行线和列线上,nm 行列结构可构成 mn 个按键,组成一个键盘。与独立 式按键相比,mn 个按键只占用 m+n 根 i/o 口线,因此适用于按键较多的场合11。 当无键闭合时,相应的 i/o 之间开路。当有键闭合时,与闭合键相连接的两条 i/o 口 线之间短路。判断有无键按下的方法是:第一步,将列线相关的 i/o 口置位为输入态, 从行线相对应的 i/o 口输出低电平,读入列线数据,若某一列线为低电平,则该列线 上有键闭合。第二步,行线相关的 i/o 口置为输出低电平,读入列线数据,若某一列 线为低电平,则该列线上有键闭合。综合一二两步的结果,可确定按键编号。但是键 图 14 lcd1602 基本操作时序 fig.14 lcd1602 base operation sequence 18 闭合一次只能进行一次键功能操作,因此须等待近按键释放后,再进行键功能操作, 否则按一次键,有可能会连续多次进行同样的键操作。 3.5.2 按键处理 由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间 接触会不稳定(如图 13) ,引起按键对应的 i/o 接口电平不稳定,键盘的抖动时间一 般为 510ms,抖动现象会引起 cpu 对一次键操作进行多次处理,从而可能产生错误, 因此必须设法消除抖动造成的不良后果12。 通常在单片机系统中,根据抖动特性,在检测到按键按下后,执行一段 510ms 的延时让前延抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认有 键按下。检测到按键释放后,也要给 510ms 的延时后再次确认才转入该键处理程序 13 。 3.5.3 矩阵键盘的应用 本设计中采用了程序控制的键盘扫描方式,利用 cpu 的正常工作周期循环检测键 盘状态,之后跳入按键处理程序。 键盘接口电路如图 14 所示: 图 13 按键抖动示意 fig.13 button jitter indicate 图 14 矩阵键盘接口电路 fig.14 matrix keyboard interface circuit 19 3.6 闹铃模块 随着闹铃的设定,当实时时钟到达闹钟设定的时间时,通过单片机的 i/o 口连续 输出高低电平,通过三极管驱动无源蜂鸣器发出响声14。 由频率计算公式 得知,当需要给蜂鸣器输出 1khz 的方波时,每次正负电 = 1/ 平的持续时间是 t/2,即 0.5ms15。 为了实现闹铃时钟的断电保存,本设计中使用了系统主控制器 atmega16 的片内 eeprom 储存时钟设定。 闹铃电路如图 15 所示: 3.7 系统主电路 主电路的功能是将所有器件连接起来,读取实时时钟的,温度数据送往 lcd 显示, 并且相应键盘操作,提供时钟的校正和功能的切换16。 电路设计如图 16 所示,pa 口提供对 1602lcd 的 8 位数据传输,pb 口控制矩阵键 盘的操作。pc0-pc2 提供 lcd1602 的控制操作,pc5-pc7 控制 ds1302,同时为 ds1302 外接一个 32768hz 晶振提供时钟震荡,并接两个 12pf 的电容接地。pd3 连接 ds18b20 单总线数据接口,pd6 为蜂鸣器输出方波信号17。 图 15 闹铃模块电路 fig.15 alarm model circuit 图 16 系统主电路设计 fig.16 system main circuit design 20 4 系统软件设计 4.1 主程序 系统主程序主要包含对主控单片机端口的初始化,外接元件的初始化,对各个模 块子程序的调用以及响应部分功能切换按键。 21 4.2 时钟函数 4.2.1 时钟显示函数 系统由 ds1302 提供时钟,所以程序只需从 ds1302 种读取 bcd 编码的时钟数据并 转换为单个字节显示在 lcd 上。在首次使用时,必须对 ds1302 进行初始化18。时钟 显示函数如图 18 所示: 时钟显示关键代码: (1)读 ds1302 unsigned char read1302(void) unsigned char i,dat; ddrb /将 dat 数据右移一位,先输入低位,再输入高位 if(pinb/将读出的 bcd 码转换成十进 制数 displaysecond(second,0x4a); /显示秒 readvalue = readset1302(0x83); min=minute=(readvalue displayminute(minute,0x47); /显示分 readvalue = readset1302(0x85); h=hour=(readvalue displayhour(hour,0x44); /显示小时 readvalue = readset1302(0x87); d=day=(readvalue displayday(day,0x09); /显示日 readvalue = readset1302(0x89); m=month=(readvalue 23 displaymonth(month,0x06); /显示月 readvalue = readset1302(0x8d); y=year=(readvalue displayyear(year,0x03); /显示年 4.2.2 时钟调整函数 调整时间使用五个按钮,k0 进入设置模式,k1 设定光标位置,k2 调整光标位的 时钟,k3 保存设置,k6 放弃设置,整个时间调整函数流程如图 19 k0 是否按下 k1 是否按下 k2 是否按下 k3 是否按下 k6 是否按下 时间调整主要代码: (1) 光标位设置 开始 显示光标跳转 是 是 否 是 当前光标位数值加一 是 将设置保存进 ds1302 否 否 放弃所有设置 回到主函数 否 是 结束 图 19 时间调整函数流程 fig.19 time adjustment function processes 24 void setcursor(unsigned char a) unsigned char i; if(a%3=0i=1; /dat 向右输入数据,使输入的数据高位在前,低位在后 if(dq_r) dat|=0x80; /如果读到的数据是 1,则将 1 存入 dat else dat|=0x00;/如果读到的数据是 0,则将 0 存入 dat /将单片机检测到的电平信号 dq 存入 ri delaynus(60); /延时 3us,两个读时序之间必须有大于 1us 的恢复期 return(dat); /返回读出的十六进制数据 4.3.2 温度显示函数 温度显示函数的主要功能是将读取来的二进制温度数据按照高低位转换为十进制 数据并调用显示函数,将数据显示在 lcd 上 开始 获取二进制格式温度数据 按照高低位分别转换为十进制 将十进制数据写入 lcd 结束 图 20 温度显示函数流程 fig.20 temperature displayfunction processes 28 温度显示函数主要代码: void displaytem(void) unsigned char const string =“ temperature “; unsigned char const string1 =“18b20 not exist!“; unsigned char i=0,j=0,flag,tltemp; unsigned char tl; /储存暂存器的温度低位 unsigned char th; /储存暂存器的温度高位 unsigned char tn; /储存温度的整数部分 unsigned char td; /储存温度的小数部分 writeinstruction(0x01); /清屏 delaynms(10); writeaddress(0x00); while (stringi!=0) writedata(stringi); i+; flag=init18b20(); if(flag=0) /若 18b20 不存在 for(j=0;j=255) th+; /如果低 8 位大于 255,向高 8 位进 1 tn=th*16+tl/16; /实际温度值=(th*256+tl)/16,即:th*16+tl/16,得出的是 温度的整数部分 td=(tl%16)*10/16; /计算温度的小数部分,将余数乘以 10 再除以 16 取整 30 tn=th*16+tl/16; td=(tl%16)*10/16; delaynms(10); writeaddress(0x45); displaytn(tn); writedata(.); displaytd(td); writedata(0xdf); writedata(c); delaynms(3000); 4.4 闹铃函数 闹铃函数主要包含了闹铃的开关和设置,对 atmega16 片内 eeprom 的操作以及蜂 鸣器的按需开启。 4.4.1 闹铃功能主函数 主函数包含了按键检测及对各子函数功能模块的调用,流程如图 21 所示: 闹铃标志位是否为 1 k4 是否五秒内按下 开始 读取单片机 eeprom 是 是 否 否 设置闹铃 结束 图 21 闹铃模式主函数流程 fig.21 alarm mode main function processes 31 闹铃函数主要代码: void alarm(void) unsigned char const string =“alarm state :“; unsigned char const string1 =“press k4 to set!“; unsigned char i=0,key,j,k=0; writeinstruction(0x01); /清屏 delaynms(10); writeaddress(0x00); while (stringi!=0) writedata(stringi); i+; alarmflag=readeeprom(0x00); if(alarmflag=1) writedata(o); writedata(n); alarmhour=readeeprom(0x01); alarmminute=readeeprom(0x02); alarmsecond=readeeprom(0x03); displayalarm(); /显示闹钟时间 i=0; while(1) /检测 k4 是否在 3 秒内按下 key=readkeybord(); if(key=4) /检测 k4 是否按下 setalarm(); 32 break; i+; delaynms(100); if(i=30) /超时,跳出 while break; else writedata(o); writedata(f); writedata(f); alarmhour=0; alarmminute=0; alarmsecond=0; i=0; while(1) /检测 k4 是否在 3 秒内按下 key=readkeybord(); if(key=4) /检测 k4 是否按下 setalarm(); break; /设置完成,跳出 while j=0; if(i%5=0 while (string1j!=0) 33 writedata(string1j); j+; k=1; else if(i%5=0 for(j=0;j16;j+) writedata( ); k=0; i+; delaynms(100); if(i=30) /超时 ,跳出 while break; writeinstruction(0x0c); /回复原有的显示参数 4.4.2 蜂鸣器启动函数 void beep(void) unsigned char const str=“alarm time“; unsigned char const str1=“press k3 to skip“; unsigned char i=0,j=0,key; portd=0xff; ddrd=0xff; writeinstruction(0x01); /清屏 34 delaynms(10); writeaddress(0x03); delaynms(10); for(i=0;i10;i+) writedata(stri); delaynms(10); writeaddress(0x40); delaynms(10); for(i=0;i16;i+) writedata(str1i); delaynms(10); i=0; while(1) key=readkeybord(); delaynms(1); /生成 500hz 的声音 fmq_1; delaynms(1); fmq_0; i+; if(key=3) /检测 k3 是否被按下 break; /若按下,停止闹铃 if (i=100) /计算 720ms i=0; 35 j+; if(j=7) break; /一段时间后,自动停止 writeinstruction(0x01); delaynms(10); ddrd=0x00; 5.测试运行情况 本实验为避免手工焊接硬件电路导致的不稳定情况,使用了较为成熟的锐志科技 rz51/avr v2.0 开发板作为硬件平台搭建测试环境。开发板上已配备 ds1302,ds18b20,矩阵键盘,蜂鸣器与 c51 单片机插槽以及相关晶振20,复位电路。 仅需插入 lcd1602 液晶模块和带有 c51-atmega16 转接架的 atmega16 单片机即可。 硬件实物图及上电运行情况如图 22 所示,黄色方框内是 atmega16 单片机,红色 方框内是 ds1302 时钟芯片,蓝色方框内为 ds18b20 测温探头插座,白色方框内是蜂 鸣器,蓝色方框内为 lcd1602 液晶显示模块。 图 22 硬件实物及上电运行状态 fig.22 hardware and power-on operation 36 为了使运行界面更加美观实用,本设计还为时钟调整,闹铃调整,温度显示等单 独设计界面,如图 23-图 26 所示: 6 结束语 本设计使用了 atmega16,ds1302,ds18b2

温馨提示

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

评论

0/150

提交评论