基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要

上传人:M****1 文档编号:563936050 上传时间:2023-08-28 格式:DOC 页数:19 大小:865KB
返回 下载 相关 举报
基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要_第1页
第1页 / 共19页
基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要_第2页
第2页 / 共19页
基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要_第3页
第3页 / 共19页
基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要_第4页
第4页 / 共19页
基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要》由会员分享,可在线阅读,更多相关《基于μPD78F0485单片机实验板的实时时钟程序设计与实现概要(19页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上基于PD78F0485单片机实验板的实时时钟程序设计与实现 专业: 计算机科学与技术 班级: 11级 学号: 姓名: 基于PD78F0485单片机实验板的实时时钟程序设计与实现1实验环境 硬件:PC、PD78F0485单片机。 软件:Windows7 操作系统、开发环境支持软件NEC Electronics Microcomputer、 Microsoft Visio 绘图2功能描述 a)液晶屏可切换显示日期和时间。 b)具有日期和时间校对功能。 c)用LED1LED12模拟秒针走动。 d)有闹钟功能。3总体设计 3.1显示设计 a)在LCD上显示年月日,分别用两位数

2、表示年月日。年的值从0099;月的值从 0112;日的值如果是2月,闰年为0129,平年为0128,其他月份大月为0131, 小月为0130。图 3.1.1 年月日的显示 b)在LCD上显示星期时分,分别用两位数表示星期时分。星期的值从0006,其中 00表示星期天,其它的则一一对应;时采用24小时制,其值从0023;分的值从 0059。图 3.1.2 星期时分的显示 c)在LCD上显示时分秒。时采用24小时制,其值从0023;分的值从0059;秒的 值从0059。图 3.1.3 时分秒的显示 3.2时间显示切换设计 设置一个全局变量i,初值为0。每按一下KEY1,i的值加一。当i = 0,1

3、,2,3时,LCD显示年月日。当i = 4,5,6时,LCD显示星期时分。当i = 7时,LCD显示时分秒。当i 7时,i自动变为0。 3.3日期和时间校对设计 通过前面设置的全局变量i和KEY3来实现。当i = 1时,每按一下KEY3,年的值就加一,直到大于99时自动变为00。当i = 2时,每按一下KEY3,月的值就加一,直到大于12时自动变为01。当i = 3时,每按一下KEY3,日的值就加一,直到大于当月天数时自动变为01。当i = 4时,每按一下KEY3,星期的值就加一,直到大于06时自动变为00。当i = 5时,每按一下KEY3,时的值就加一,直到大于23时自动变为00。当i =

4、6时,每按一下KEY3,分的值就加一,直到大于59时自动变为00。 3.4闹钟显示设计当按下KEY2时,LCD显示闹钟设定的时间。图 3.4 闹钟的显示 3.5闹钟调整设计 当按下KEY5时,闹钟的时就加一,到23时就归零。当按下KEY6时,闹钟的分就加一,到59时就归零。 3.6闹钟开关设计 通过KEY4控制闹钟的开关,并用LED灯的亮灭来显示。将LED灯端口的输出信号 作为闹钟是否响铃的一个判断条件。按下KEY4,LED灯的输出信号取反,输出信号为 1时灯亮并且闹钟打开,为0时灯灭并且闹钟关闭。 3.7闹钟响铃设计 当闹钟设定的时分与时钟的时分相等并且闹钟处于打开状态时,蜂鸣器就会发出响声

5、。 3.8用LED1LED12模拟秒针走动设计 将端口13、14、15设置为输出模式,设置1个全局变量s,初值为-1。当1秒中断来到时s的值加一模12。根据s的值亮相应的灯,并且灭上一个灯。实现一秒亮一个灯。4功能模块设计 4.1主模块图 4.1 主模块流程图 当按键按下时,会改变KEY的值。当KEY1按下时,KEY的值就等于1,以此类推。主模块是一个无限循环,当KEY改变时,它就会转到相应的分支,执行相应的的功能。从而响应用户的操作。如KEY2被按下,则主模块就会转到分支2,然后调用闹钟显示函数,显示闹钟的当前设置值。 4.2 初始化模块 选定cpu的时钟为5.0Hz。将所有接LCD的引脚指

6、定为LCD引脚,确定LCD的显示频率,打开LCD显示。将P4的六个端口设置为输出模式,接通上拉电阻,并且允许六个按键中断。将P13、14、15的所有端口设置为输出模式。将P3.3和P3.4端口设置为输出。选择8MHz内部高速时钟作为主系统时钟,实时计数器时钟=fprs/28=32.768KHz。将周期性定时中断打开,设置为24小时制,1秒定时中断。将年的初值设置为13,月初值为01,日初值为01,星期初值为00,时初值为12,分初值为00。 4.3 实时时钟模块 利用实时计数器来实现实时时钟模块。实时计数器的秒计数寄存器、分计数寄存器、时计数寄存器、日计数寄存器、周计数寄存器、月计数寄存器、年

7、计数寄存器在开启计数模式后会自动计数。然后只要在一秒中断到来时,将寄存器中的值读入对应变量中,送到显示刷新模块刷新后显示就能实现实时时钟了。 4.4 闹钟设置模块 图 4.4 闹钟设置模块流程图 利用变量hour1和minute1来实现闹钟功能。当KEY5或KEY6被按下就会分别调用闹钟的调时、调分模块来设置闹钟的时间。Hour1的值大于23时归零,minute1的值大于59时归零。 4.5 INTRTC中断处理模块 在一秒中断到来时,将实时计数器的秒计数寄存器、分计数寄存器、时计数寄存器、日计数寄存器、周计数寄存器、月计数寄存器、年计数寄存器中的值从BCD码转换为十进制送入到相对应的变量中,

8、等待显示刷新模块调用。 4.6 显示刷新模块 主模块在循环中会不停的调用此模块,将实时时钟的最新值转换为LCD的显示码,并送入到显示的缓存中,等待显示模块调用。 4.7 时钟调时模块图 4.7 时钟调时模块流程图 此模块根据全局变量i的值,当KEY3被按下时,分别对实时时钟的年、月、日、星期、时、分、秒进行调整,达到调时目的。当各个寄存器的值达到所对应的最大值时,根据各自的性质归零或归一。 4.8 按键中断模块 根据被按下的键,将KEY设置成对应的值。KEY1对应的值为1,以此类推。 4.9 闹钟响铃模块 图 4.9 闹钟响铃模块流程图 当闹钟设置的时、分与实时时钟的时分相等并且P3.4端口的

9、输出值为1即LED灯亮时,打开蜂鸣器的输出。蜂鸣器就会发出声音提醒闹钟时间到了。 4.10 显示模块图 4.10 显示模块流程图 此模块根据全局变量i的值,将对应的显示缓存区中的内容依次显示。 4.11 流水灯模块 当一秒中断来到时,根据变量s的值,LED亮起对应的灯,并关闭上一个灯,s 的值加一模十二。5 操作说明 按下KEY1键,改变LCD的显示内容。按四下KEY1键显示从年月日变为星期时分再按三下KEY1键显示又变为时分秒。 按下KEY3键,进行调时。当按了一下KEY1键再按KEY3键时,对年进行调整;当按了两下KEY1键再按KEY3键时,对月进行调整;当按了三下KEY1键再按KEY3键

10、时,对日进行调整;当按了四下KEY1键再按KEY3键时,对星期进行调整;当按了五下KEY1键再按KEY3键时,对时进行调整;当按了六下KEY1键再按KEY3键时,对分进行调整。 按下KEY2键,显示闹钟的设定时间。再按下KEY5键,对闹钟的设定时间进行时调整;再按下KEY6键,对闹钟的设定时间进行分调整。 按下KEY4键,将P3.4 LED灯打开,并开启闹钟功能。再按一下关闭P3.4 LED灯,并关闭闹钟功能。 LED1LED12每一秒依次亮一个灯。6 总结 经过几周的单片机课程设计,已基本完成课题要求。功能上基本达标:时钟的显示,调时功能。时钟显示功能,精确度完全可以满足日常生活显示时间的需

11、要;调时功能,方便快捷。 本次设计是结合书本样例和老师给的样例,独立设计完成。 另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。 从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识

12、用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。附录 程序清单:#pragma sfr /使用特殊功能寄存器#pragma access /使用绝对地址指令#pragma EI /使用开中断关中断功能#pragma DI#pragma interrupt INTKR inter RB1 /定义按键中断#pragma interrupt INTRTC RTC_INTRTC /定义周期性定时中断char SEC_Num; /定义一个秒单元char MIN_Num; /定义一个分单元char HOUR_Num; /定义一个时单元cha

13、r DAY_Num; /定义一个日单元char WEEK_Num; /定义一个周单元char MONTH_Num;/定义一个月单元char YEAR_Num; /定义一个年单元unsigned char hour1 = 0; /初始化闹钟时单元=0unsigned char minute1 = 0;/初始化闹钟分单元=0unsigned int numbercode10 = 0x070d , 0x0600 , 0x030e , 0x070a , 0x0603 , 0x050b , 0x050f , 0x0700 , 0x070f , 0x070b ;/数字“0”-“9”的显示码unsigned char i=0;/显示转换标志,i=0,1,2,3时显示年月日;i=4,5,6时显示星期时分;i=7时显示时分秒unsigned char KEY=0; /定义全局变量keyunsigned int s=-1; /定义全局变量sunsigned int buffy_m_d6; /年月日的数码显示缓存区unsigned int buffw_h_m6; /星期时分的数码显示缓存区unsigned int buffh_m_s6; /时分秒的数码显示缓存区unsigned int buffhm16; /闹钟的数码显示缓存

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号