基于单片机的时钟设计_毕业论文(编辑修改稿)内容摘要:

2 键切换到分钟位,按 K1 键进行分钟调整,分位设置好后,再按 K2 键保存时间设定值,并返回显示时间,按所设定的时间值进行计时。 ( 3)连续按 K3 键显示 3路定时及其开关状态,当显示某一路定时时, 3 秒后自动返回时间显示, 3 秒内按 K2 键进入定时设置,设置同日期( 6位显示00 为当路定时关,显示 01为当路定时开)。 当路定时设置完后按 K2 键保存定时设定值并返回时间显示。 ( 4)按 K4 键显示实时温度和湿度, 5 秒后自动返回时间显示。 4 系统硬件设计 芯片的选择 本设计选用 AT89S52 芯片,它是一种低功耗、高性能 CMOS 8 位微控制器,具有 8K( 0000H~ 1FFFH)在线系统可编程 Flash 存储器。 片上 Flash 允许程序存储器在线编程,也适于常规编程器。 在单芯片上,拥有灵巧的 8 位 CPU 和在线系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供灵活、高效的解决方案。 AT89S52 具有以下标准功能: 8K( 0000H~ 1FFFH) Flash, 256 字节( 00H~FFH)数据存储器( RAM), 64K( 0000H~ FFFFH)程序存储器( ROM), 32 位 I/O口线,看门狗 定时器, 2 个数据指针,三个 16 位定时器 /计数器,一个 6 向量 2级中断结构,全双工串行口内晶振及时钟电路。 其中,数据存储器( RAM)用于存放各种运算的中间结果,作缓存和数据暂存,以及设置特征标志等。 AT89S52 的片内数据存储器用位寻址方式,最大寻址范围为 256 字节( 00H~ FFH)。 按使用情况不同可分成低 128 字节( 00H~ 7FH)和高 128 字节( 80H~ FFH)。 其中低 128 字节为真正的 RAM 存储器,高 128 字节为特殊功能寄存器( SFR)区,如累加器 ACC、程序状态字 PSW、数据指针 DPTR、程序计数器 PC等。 整个片内 RAM 区分布如图 41所示。 7 图 41 片内 RAM 区 实验板电路原理图 实验板电路结构框图如图 42所示,原理电路图如图 43 所示。 图 42 实验板结构框图 图 43 实验板原理图 8 功能电路分析 时钟电路 实验板的时钟振荡源电路如图 44 所示。 其中 JT 为 的晶振,改变两电容 CB 的值即可对此晶振频率进行调节。 该电路提供单片机工作所需的振荡频率,计算定时器初值即需此晶振频率,在通信时也需知道晶振频率,以对波特率进行计算。 图 44 时钟电路 复位电路 如图 45 所示为实验板的复位电路,当 RESET 信号为低电平时,实验板为工作状态,当 RESET 信号为高电平时,实验板为复位或下载程序状态。 由于AT89S52 具有 ISP 的功能,即可以通过并口线直接将程序下载到单片机内,因此, AT89S52 具有两种状态,下载程序状态和运行状态。 该复位电路能实现上电自动复位,也能手动复位,一般复位时 RESET 应保持 20毫秒以上高电平,此复位时间由接地电容控制。 图 45 复位电路 键盘电路 如图 46所示为阵列按键电路, 各设置及转换信号由此电路输入,实验板提供了 16 个按键,由 P1口经 SN74F244(驱动芯片)输出扩展成 4 4的阵列按键,~ 为行线, ~ 为列线。 SN74F244 有一片选信号线 G ,当此口线为低电平时, A1~ A4 与 Y1~ Y4接通,反之, A1~ A4 与 Y1~ Y4 断开。 此键盘用扫描工作方式,若有键按下,则相应位端口被拉低为低电平,由于本系统只用了 4 个按键,所以只需对 4 个按键进行扫描。 扫描时,先置 口为高电平,向 P1 口送 0EFH( MOV P1, 0EFH),再置 口为低电平,读 P1口( MOV A, P1),最后判断 P1 口低 4 位哪位是低电平,若某位为低电平,则相应按键被按下,如 为低电平( =0),则 K1键被按下。 9 图 46 阵列按键 数码显示电路 如图 47 所示为数码显示电路,实验板使用了 6 个共阳数码管, P0 口为段码信号线, B1~ B6为位控线,是 P1 口经 SN74F573(反向驱动芯片,即输入为高电平,则输出为低电平,反之则输出为高电平,该芯片也有一片选信号 C,当此信号为高电平时有效)反向得到,再 由 B1~ B6 控制晶体管 Q1~ Q6,以达到控制每位数码管的目的。 系统采用动态显示,先向 P0 口送第一位数码管需要显示的段码值,再给 P1口送 0FEH,延时 1毫秒使第一位数码管显示,又向 P0 口送第二位数码管需要显示的段码值, P1 口送 0FDH,延时 1 毫秒,使第二位数码管显示。 依次递推,直到最后一位数码管,然后再循环。 改变延时时长可以调节数码管显示的亮度,由于单片机执行速度很快(微秒级),所以看上去数码管一直亮着。 图 47 数码显示电路 蜂鸣器电路 其硬件原理图如图 48所示。 此电路用于定时时发出 提示音。 SPEAKER与 口相连,当 SPEAKER 输出高电平时蜂鸣器不响,而 SPEAKER 输出低电平时蜂鸣器发出响声。 只需控制 SPEAKER 输出高低电平的时间和变化频率,就可以让蜂鸣器发出不同的声音。 此电路用于产生定时器提示音。 图 48 蜂鸣器电路 10 5 系统软件设计 系统的软件设计也是工具系统功能的设计。 单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。 单片机的软件设计通常要考虑以下几个方面的问题: ( 1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设 计出合理的总体结构,使软件开发清晰、简洁和流程合理; ( 2)培养良好的编程风格,如考虑结构化程序设计、实行模块化、子程序化。 既便于调试、链接,又便于移植和修改; ( 3)建立正确的数学模型,通过仿真提高系统的性能,并选取合适的参数; ( 4)绘制程序流程图; ( 5)合理分配系统资源 ; ( 6)为程序加入注释,提高可读性,实施软件工程; ( 7)注意软件的抗干扰设计,提高系统的可靠性。 数据单元分配 数据存储单元分配 数据存储单元分配如下表所示: 项目 秒 分 时 日 月 年 存储单元 30H 31H 32H 33H 34H 35H 项目 定时1:开关 定时 1:分 定时 1:时 定时2:开关 定时 2:分 定时 2:时 存储单元 36H 37H 38H 39H 3AH 3BH 项目 定时3:开关 定时 3:分 定时 3:时 存显示首地址 堆栈起始单元 存储单元 3CH 3DH 3EH 3FH 50H 标志位单元分配 标志位单元( 20H)分配如下表所示: 位单元 项目 位单元 项目 01H 2 位数码管闪烁标志位 08H 定时 1 显示标志位 02H 09H 定时 2 显示标志位 03H 4 位数码管闪烁标志位 0AH 定时 3 显示标志位 04H 0BH 定时 1 响铃标志位 05H 6 位数码管显示标志位 0CH 定时 2 响铃标志位 06H 0DH 定时 3 响铃标志位 07H 日期显示标志位 0EH 总响铃标志位 计时时钟实现的基本方法 时钟的最小计时单位是秒,使用定时器的方式 1,最大的定时时间也只能达 11 到 131 毫秒。 可把定时器的定时时间定为 50 毫秒,这样,计数溢出 20 次即可得到时钟的最小计时单位─秒。 计数 20 次可以用软件实现,对定时器溢出次数进行计数,计满 20 次 即为 1秒。 从秒到分,从分到时,以及日、月、年都是通过软件累加并进行比较的方法实现的。 实现时钟程序设计步骤 系统采用模块化结构,主程序只需调用各个子程序模块即可实现相应功能。 其模块结构图如图 51所示。 图 51 程序各模块方框图 主程序模块设计 整个程序进行模块化设计,主程序只需调用相应的程序即可。 主程序流程如图 52所示。 图 52 主程序流程图 计时子程序模块的实现 当 T0 中断时,执行本程序,因 T0 设为 50 毫秒中断,故中断 20次为 1秒。 中断程序分别有 20 次计数( 1秒), 60 次计数( 1 分), 60 次计数( 1 小时), 24次计数( 1 天), 2 2 31 次计数( 1 个月), 12 次计数( 1 年)。 当前位到设定数值时写 0 或 1,下一位加 1。 由于本世纪是 21 世纪,年位前两位是 4的倍数,故判断闰年时只需对年的后两位进行计算,能被 4 整除为闰年,否则为平年,年位只进行加 1,大于 99 时又重新开始。 计时中断流程图如图 53 所示。 12 图 53 计时子程序流程图 图 54 显示子程序流程图 显示子程序模块的实现 显示原理在前面已给予了说明,流程图如图 54所示。 时钟设定子程序模块的实现 当设定时间时,断开 T0 中断,秒单元清 0,进入时、分单元设定。 设定好后重装 T0 初值,开 T0中断。 流程图如图 55所示。 图 55 时钟设定子程流程图 日期、定时设定子程序模块的实现 日期、定时的设定同时钟设定。 定时设定时,把时钟的秒位换成定时标志位,“ 00”为当路定时关,“ 01”为当路定时开 ,流程图与时钟设定程序相似。 程序说明 定时器初值计算 因定时器工作于方式 1,需要 50ms 的中断,所以计数初值 : 13 χ =216 t fosc/ 12=65536 50 103 106/ 12=19456 表示成十六进制为χ =4C00H,故( TH0) =4CH,( TL0) =00H。 程序初始化 程序初始化时,清相应内存单元( 20H~ 4FH 共 48 个单元),送时间( 00 时00 分 00 秒)、日期( 07 年 10 月 01 日)初值,送定时器 T0、 T1 初值, TH0= TH1=4CH,TL0= TL1=00H,特殊寄存器( SP=50H、 TMOD=11H)值等。 误差分析及校正 当 T0 中断时,需重装定时初值,且要加上从断开 T0中断到允许 T0中断共有 13 个周期,以减小误差,故理论重装定时初值为( TH0) =4CH,( TL0) =13H。 但该外接晶振电路的晶振频率可调,可能出现误差,所以实际不是这个值。 经调试,当定时初值为( TH0) =4CH,( TL0) =06H 时, 24小时约慢 2秒,所以每当计时 24 小时之后,给秒单元( 30H)送 02H,使秒累加时从 2 加起, 24小时就少加 2秒,即可使 时间得到校正。 实现闪动设定 闪动可选用段码送 00H 实现,也可禁止当前位显示,选通位送 0实现。 本设计选用后者实现闪动,用定时器 T1 进行控制。 实现连续加 1 先判断键是否松开,若松开,则只执行一次加 1程序段,进行单次加 1;若未松开则连续执行加 1程序段,实现连续加 1。 每执行一次加 1程序段就调用显示子程序进行延时,以对调节速度进行控制。 本系统以 5Hz 的速度连续加 1,这样能快速对时间、日期、定时进行设定。 定时音与显示相冲突问题及解决方案 由于蜂鸣器响时 口的电平呈高频变化 ,频率 1K~ 2K,其间隙时间为~ 1毫秒,小于 6 毫秒,因显示时每个数码管显示 1毫秒,至少需要 6 毫秒,故蜂鸣器响时无法进行显示。 为解决此问题,可增加锁存器,采用静态显示;也可增加一语音芯片,既可解决此问题,也可把定时音换成音乐或语音提示,或增加其它功能,使系统功能更强。 6 设计程序 ORG 0000H LJMP START ORG 000BH LJMP INTT0。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。