全国单片机程序设计师毕业论文-基于mcs-51单片机实现的万年历内容摘要:

Trans Ideal+ 3 硬件设计 本次设计的 万年历系统以单片机为主控芯片, 通过读写日历时钟芯片和温度芯片来实时的改变当前时间和温度,并通过 LED 显示实时数据,同时辅助以键盘来调节显示时间和定时时间,并带有蜂鸣器,当定时时间到时闹钟即打开。 硬件的结构和可靠性直接影响着整个系统的可靠性 ,所以合理的安排电路能提高电子产品的性能,但 任何电子产品都必须有一个 可靠的 电源为其提供能量才能工作,本设计先 介绍 电源部分,再 介绍 功能 电路。 电源的设计是电子产品的最基本模块,大部分电子产品都是用的直流电源,将 220V 的交流电转化为直流电也是我们必行的,电源的稳定性也直接影响着电子产品的性能, 现在常用的直流稳压电源有变压器式和开关式电源两种。 变压器式直 流稳压源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成, 如图 31 所示, 交流电 先经电源变压器变换成所须等级的交流电压,而后经整流电路将之整流成直流电,这时的直流电脉动量很大,经滤波电路以减小其脉动量,最后经稳压电路进行稳压,从而得出符合要求的电压。 变压器式直流稳压电源结构简单,设计容易,但体积较大,效率也较低,过负载能力也差。 图 31 变压器式直流稳压电源 开关式直流稳压电源简称开关电源( Switching Power Supply),它是指起电压调整功能的器件始终以开关方式工作的一种直流稳压电源。 50Hz 单相交流 220V 电压或三相交流 220V380V 电压 经 EMI 防电磁干扰电源滤波器,直接整流滤波, 11 然后再将滤波后的直流电压经变换电路变换为数赫或数百千赫的高频方波或准方波电压,通过高频变压器隔离并降压(或升压)后,再经高频整流、滤波电路,最后输出直流电压。 通过取样、比较、放大及控制、驱动电路,控 制变换器中功率开关管的占空比,便能得到稳定的输出电压。 开关电源具有功耗小、效率高、体积小、重量轻、稳压范围 宽 、电路形式灵活多样等诸多优点 ,但成本高, 因而本设计采用 变压器式电源。 主电路设计 主电路的功能是完成年、月、日、星期、时、分、秒之间的转换,对温度传感器进行控制并读取温度转换后的值, 再送往 LED 显示,并且接受键盘操作 ,对日期和时间进行校正, 同时 还要判断定时时间是否到, 定时到时闹铃打开。 主电路原理图如图 32 所示,显示部分用 P0 口做为输出数据接到 LED 数码管 a 到 h,并接 8 个上拉电阻做为各段 的驱动。 用 P3 口的低 3 位接译码器的A0,A1,A2 端,用 , 分别接译码器的使能端,通过控制 P3 口来控制 LED 的动态扫描。 单片机的 18和 19引脚接 12MHZ 的晶振,并接两个 22PF 的电容同时接地,单片机复位端接一极性电容并连接到电源处,在极性电容的负极接一 10K 的电阻,并连接至地做为放电用。 本设计用到四个独立式键盘分别接到P1 口的低 4 位,用 P1 口的 , 接日历时钟的使能端和时钟端及数据输入输出口,并在日历时钟上接一 的晶振,并接两个 22PF 的电容终端和地相连,用 接温度芯片的 DQ 引脚,作为温度数据或命令的读写,用单片机的 接扬声器,作为发音电路,各芯片的电源部分分别接到有开关式电源产生的+ 5V 电源上,芯片的接地端都接在公共地上,在这里接电源部分就不再一一详述,读者注意一下就行了。 设计采用动态显示,轮流扫描各个 LED 使之显示相应的数型码,当扫描频率大于人眼所能识别的频率时就看不到闪烁现象。 动态显示的亮度不如静态显示,但静态显示占用的 I/O 口资源较多,往往用移位寄存器 74LS164 等来扩充其 I/O口不足的情况,当显示位数较多时,这样势必增 加硬件开销,增大成本,不利于开阔市场。 本设计的突出之处在于硬件电路简单,大大减少了硬件开销,这样又势必增加了软件开发的难度,但降低了成本有利于市场的开阔。 12 本设计也存在的缺点是显示亮度较静态低,增加亮度方法是在 P0 口的各口分别加一放大倍数较小的三极管和一限流电阻来驱动 LED 的各段,这样就增加了 本设计没有增加这一模块,望读者加以注意。 13 4 软件设计 软件的设计是设计控制系统的应用程 序。 其任务是在整体设计和硬件设计的基础上,确定程序结构,分配内 RAM 资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整 应用 程序 ,与硬件相结合完成相应功能。 主程序设计 主程序才用模块化设计,流程图如图 41 所示。 从上面主程序看出,主程序的组成是通过分别调用各子程序组成总体系统功能,能很直观的看出主程序所要完成的功能,首先是初始化各模块,之后调用键盘完成时间的调整,调用日历子程序完成日历时钟的初始化和时间数据的读写,调用温度子程序完成温度芯片的初始化和读写,调用闹钟子程序 当时间达到定时时间时闹铃打开,一分钟后自动关闭,调用显示子程序显示数据,最后又转到键盘程序来回循环。 初始化部分主要有初始化定时器部分和和一些寄存器、标志位、初始化时间等 对定时器 T0 初始化时,首先置初值,CPU 开中断,定时器 T0 开中断,并且开始计数,而对定时器 T1 初始化时,首先置初值,定时器 T1 关中断,并且停止计数,只有收到命令时才能产结束 图 41 主程序流程图 开始 调闹钟子程序 调显示子程序 调温度子程序 调日历子程序 初始化时间 寄存器初始化 初始化 T0 并开中断 标志位初始化 初始化 T1 并关中断 调键盘子程序 14 生中断。 寄存器的初始化主要是初始化执行程序时用到的部分 RAM 空间,防止程序执行时带来混乱。 标志位初始化是对时间调整时判断是调分还是调时等而专设的位标志,初始化过程中标 志位全部置 0,即开始时是处于显示状态,而不是调整状态,这一点在程序中相当明了。 初始化时间是开机时显示的时间,并通过调用日历时钟的写程序来完成时间的置初值。 多功能键盘程序的设计是本设计的难点,也是完成本设计的重点,当有键按下时,调用 10ms 延时程序,再判断是否有键按下无则返回,若有先调用显示程序再判断是否松开,否则再转到显示程序,这样避免了在按键松开之前能正常显示。 其中 K1 键功能最多,通过判断 K1 键按下的次数来判断是调时间还是定时,并对对应的位置闪烁。 本键盘深度为 9 级,即连续按下 K1 键 10 次时则返回到原来界面。 当判断键值为 1 时则为调秒状态,对应的秒低位闪烁,为 2 时为调分状态并分闪烁,为 3 时为调时状态并时闪烁,为 4 时为调日状态并日闪烁,为 5 时为调月状态并月闪烁,为 6 时为调年状态并年闪烁,为 7 时为调星期状态并星期闪烁,为 8 时为定时器设定分状态并分闪烁,为 9 时为定时器设定时状态并时闪烁。 K2 为加 1 键, K3 为减 1 键, K4 为总返回键,即在调时见时不用只有按下K1 键值为 10 才返回,而通过按下 K4 键即可返回。 键盘子程序流程图如图 42所示。 在键盘子程序中当判断键值为 1~ 7 时是对时间秒、分、时、日 、月、年、星期调整原理和调秒相同,当判断键值为 9 时是定时器分和时调整,此时秒显示 0,分和时显示为当前定时值,但是没有送 DS1302 这点和前不同,由于键盘流程图非常复杂,在此省略了调分时等,望读者注意加以区别。 15 N 开始 有键按下。 延时 10ms K2 按下。 K3 按下。 K4 按下。 K1 按下。 调显示 K1 为 0。 键值加 1 Y 调显示 有键按下。 键值清 0 标志位清 0 返回回 N N N Y N Y N 下页 1 Y Y Y 下页 3 16 温度子程序 由于 DS18B20 采用的是单总线协议方式,即在一根数据线上实现数 据的双向传输,而对 AT89S51 单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对 DS18B20 芯片的访问。 由于 DS18B20 是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序要求。 DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。 该协议定义了几种信号的时序:初始化时序、读时序、写时序。 所有时序都是将1 键值为1。 调显示 秒闪烁 秒标志位置1 K2 按下。 K3 按下。 秒减1 秒数据送 DS1302 秒加1 3 Y N Y Y 键值为。 N。 图 42 键盘子程序流程图 17 主机作为主设备,单总线器件作为从设备。 而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机 需启动读时序完成数据接收。 数据和命令的传输都是低位在先。 与 DS18B20 间的任何通迅都要从初始化时序开始, DS18B20 的初始化时序如图 43 所示。 主机发出复位脉冲后,最多在 60us 后要收到应答信号,否则说明 DS18B20 不存在或损坏。 DS18B20 的写时序如图 44 所示。 DS18B20 的写时序分为写 “0”时序和写 “1”时序两个过程。 当要写 “0”时序时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15us 到 45us 之间内正确地采样总线上的 “0”电平;当要写 “1”时序时,单总主机发出复位脉冲 最小值: 480us 最大值: 960us 主机 接收最短时间: 480us 等待15~60us DS18B20 应答60~240us Vcc GND 图 43 DS18B20的初始化时序 Vcc GND 图 44 DS18B20 的写时序 主机写“ 0”时间隙 DS18B20 采样 最小标准 1us 15us 15us 30us 主机写“ 1”时间隙 DS18B20 采样 最小标准 1us 15us 15us 30us Vcc GND 图 45 DS18B20 的读时序 主机读“ 0”时间隙 1us 15us 45us 主机读“ 1”时间隙 1us 15us 主机采样 主机采样 18 线被拉低之后 ,在 15us 之内就要释放单总线,否则写入的是 “0”,而不是 “1”。 DS18B20 的读时序如图 45 所示。 当主机把单总线拉低之后,读时间隙开始,且最低保持低电平 1us,但在 15us 之内必须释放单总线,以让 DS18B20 把数据传输到单总线上。 DS18B20 在完成一个读时序过程,至少需要 60us 才能完成。 DS18B20 转换后的温度值以 2 字节 16 位补码形式存放在高速暂存存储器的第 2 个字节里,高位在前,低位在后。 所以读取温度时,要分两次进行。 读温度子程序如图 46 所示。 日历时钟子程计 DS1302 与 CPU 的连接需要三条线,即 SCLK(7)、 I/O(6)、 RST(5) 日历时钟 DS1302 的读写和温度芯片 DS118B20 一样,都需要 初始化时序、读时序、写时序。 所有时序都是将主机作为主设备,单总线器件作为从设备。 而每一次命令和数据的传输都是从主机启动写时序开始,如果要求单总线器件回送 初始化 DS18B20 发送读温度指令 读温度 计算温度实际值 显示温度 启动下次温度转换 图 46 DS18B20读温度流程图 结束 19 是低位在先。 读写都是 16 位数据高 8 位是地址低 8 位是数据,在读写时要。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。