电子日历单片机课程设计报告_第1页
电子日历单片机课程设计报告_第2页
电子日历单片机课程设计报告_第3页
电子日历单片机课程设计报告_第4页
电子日历单片机课程设计报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、. - 可修编科技大学信息与电气工程学院单片机原理与应用课程设计报告题目:电子日历专业:电子信息工程班级:*:*:指导教师:2016年 07月13日. 单片机原理与应用课程设计评阅书题目电子日历专业班级*指导教师评语:成绩评定为:指导教师签字:年月日. 可修编信息与电气工程学院课程设计任务书2015-2016学年第 2学期专业:电子信息工程*:课程设计名称:设计题目:完成期限:自 2016 年 7 月 4 日至 2015 年 7 月 15 日共 2 周设计依据、要求及主要容可另加附页:设计依据:STC15F2K60S2单片机的定时/计数器,74HC59芯片的串并输出,数码管显示。实验要求:1、

2、利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。2、利用LED分别显示当前时间和日历。3、利用尽可能少的开关实现:校正日历和时间4、定制闹钟时、分、表。主要容:本系统是用STC15F2K60S2单片机的T0定时器的16位自动重装来产生1ms节拍,程序运行于这个节拍下,通过计数1000次从而自动定时于1s,以实现时钟的仿真。另外通过STC15F2K60S2单片机的IO方式控制74HC595驱动8位数码管。数码管可以实时显示秒,分,小时,日期,月份和年等信息,并且实现闹铃功能时,数码管闪烁显示。矩阵式键盘采用编程扫描方式,可以实现秒,分,小时,日期,月份和年信息的校准。同时通

3、过STC15F2K60S2单片机的外部中断INT0实现年月日与时分秒显示的切换。指导教师签字:批准日期:年月日. 摘要本设计是基于51系列的单片机进展的实时日历和时钟显示设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论根底和外围扩展知识进展了比拟全面准备。实时日历和时钟显示的设计过程在硬件与软件方面进展同步设计。硬件局部主要由STC15F2K60S2单片机,LED显示电路,以及调时按键电路等组成,系统通过74HC595驱动8位数码管现实数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括时钟程序、键盘程序,显示程序等。本系统以单片机的汇编语言进展

4、软件设计,为了便于扩展和更改,软件的设计采用模块化构造,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及日期显示功能。所有程序编写完成后,在wave软件中进展调试,确定没有问题后,在Protel99se软件中嵌入单片机进展仿真。关键词:STC15F2K60S2;Protel99se;74HC595. 目录设计任务目的和要求.2 1.1目的.2 1.2要求.2总体的方案与论证.2 2.1计时方案.2 2.2显示方案.2 2.3功能键方案.2系统硬件设计.3 3.1主控制器.3 3.2显示驱动.4 3.3矩阵键盘扫描.4系统的软件设计.5 4.1定时实现.5 4.2实时时钟仿真实现.6

5、 4.3数码管显示实现.7 4.4矩阵键盘扫描实现.7 4.5显示切换和闹钟实现.9五.系统调试和测试结果分析.10六.结论总结和心得体会.10参考文献.12. 设计任务目的和要求1.1目的:本系统是用STC15F2K60S2单片机的T0定时器的16位自动重装来产生1ms节拍,程序运行于这个节拍下,通过计数1000次从而自动定时于1s,以实现时钟的仿真。另外通过STC15F2K60S2单片机的IO方式控制74HC595驱动8位数码管。数码管可以实时显示秒,分,小时,日期,月份和年等信息,并且实现闹铃功能时,数码管闪烁显示。矩阵式键盘采用编程扫描方式,可以实现秒,分,小时,日期,月份和年信息的校

6、准。同时通过STC15F2K60S2单片机的外部中断INT0实现年月日与时分秒显示的切换。1.2要求:1、利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。2、利用LED分别显示当前时间和日历。3、利用尽可能少的开关实现:校正日历和时间4、定制闹钟时、分、表。总体的方案和实现2.1计时方案:本次课程设计中可以通过两种方案实现计时,一是通过STC15F2K60S2单片机部的定时器实现计时计数功能;二是通过PCF8653芯片实现计时功能。在这里我选择使用STC15F2K60S2单片机部的定时器来实现电子日历的计时功能。另外,通过STC15F2K60S2单片机部的中断系统来实现年

7、月日和时分秒的切换。2.2显示方案:本次课程设计中提供了8个数码管显示年月日和时分秒信息。数码管工作原理分为共阳和共阴两种。其中共阳极数码管的8个发光二极管的公共阳极接高电平,当*段驱动电路的输出段为低电平时,则该端所连接的字段导通点亮;而共阴极数码管的8个发光二极管的公共阴极接低电平,当*段驱动电路的输出段为高电平时,则该端所连接的字段导通点亮。数码管显示分为静态显示和动态显示两种。静态显示是指数码管显示*一字符时,相应的发光二极管恒定导通或恒定截止,各数码管相互独立;动态显示是指一位一位通过扫描方式点亮各位数码管。在这里我选定的是数码管共阴级工作状态,使用动态显示方式。另外,使用74HC5

8、95芯片实现串并转换,从而驱动数码管工作。2.3功能键方案:本次课程设计要现通过按键进展校正日历和时间。键盘按照工作方式可以分为独立式键盘和矩阵式键盘。其中独立式键盘是直接用I/O口线构成单个按键电路,其特点是每个按键单独使用一根I/O口线,按键间的工作是相互独立的;矩阵式键盘是由行数和列数组成,按键位于行、列数的穿插点上,通过扫描法进展键盘按键的识别。本次课程设计我选用的是矩阵式键盘,选择50ms扫描一次。通过扫描后的键码值来选择按键的作用,以实现按键对日历和时间的校正工作。系统的硬件设计3.1主控制器STC15F2K60S2单片机部产生时钟周期,并检测外部中断执行指令本次课程设计用的是ST

9、C15F2K60S2单片机部的定时器。此时就会涉及到三个时钟问题。分别为晶振时钟,系统时钟,和计数脉冲周期。晶振时钟是STC15F2K60S2单片机实现定时功能的真正原因,而系统时钟是STC15F2K60S2单片机在现实工作中的工作频率,系统时钟和晶振时钟的关系为:,由时钟分频器CLK_DIV设置。而计数脉冲周期则是在定时过程中计数时的频率,由辅助存放器AU*R的T0*12或T1*12来设置。硬件连接图如下:. 3.2显示驱动74HC595芯片来驱动8位数码管来现实数据,本次课程设计中,我们使用的是共阴极数码管,所以可以通过查找资料,提前定义好一个数码管显示状态的数组t_display。之后就

10、是考虑如何使数码管显示我们所需要的信息。硬件连接图如下:3.3矩阵键盘扫描:实现在本次课程设计中,我选用的是矩阵式键盘,选用扫描法得到键码值,设定为50ms扫描一次。原理图如下:. 可修编系统软件设计:4.1定时实现本次课程设计用的是STC15F2K60S2单片机部的定时器。此时就会涉及到三个时钟问题。分别为晶振时钟,系统时钟,和计数脉冲周期。晶振时钟是STC15F2K60S2单片机实现定时功能的真正原因,而系统时钟是STC15F2K60S2单片机在现实工作中的工作频率,系统时钟和晶振时钟的关系为:,由时钟分频器CLK_DIV设置。而计数脉冲周期则是在定时过程中计数时的频率,由辅助存放器AU*

11、R的T0*12或T1*12来设置。通过软件检测,可知系统时钟为11.0592MHZ,另外选择使用定时器T0来定时,因此将AU*R = 0*80,将T0*12置1使得计数脉冲等于系统时钟周期,即无频。之后就是定时器的工作方式的设定,由工作方式存放器TMOD设置。按照实验的需求,选择TO定时/计数器,选择工作方式0的自动重装初始值的16位定时,功能选择为定时工作模式,要软件控制TRO置1即可以启动定时器。综上所述:将TMOD = 0*00;默认情况即可。而后就是定时的初始值的设定。这是因为定时器的核心电路是一个加1计数器,计数器在每输入一个脉冲,计数值加1。当计数到计数器全为1时,再输入一个脉冲使

12、计数值回0同时使计数器计满溢出标志位TF0置1,并向CPU发出中断请求。所以在这里需要一个初始值开场计数,从而实现定时。初始值的的公式为:*=M-设定时间*计数脉冲频率,其中M=65536,定时时间为1ms,之后就是将初始值赋给THO和TLO。相应的设置程序如下:#define MAIN_Fosc 11059200L /定义系统时钟#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000) /定义定时1ms的初始值AU*R = 0*80; /T0*12=1 ,设置计数脉冲位1TTH0 = (u8)(Timer0_Reload / 256);/将初始值高

13、8位给TH0TL0 = (u8)(Timer0_Reload % 256);/将初始值低8位给TL0ET0 = 1; /定时器T0中断允许TR0 = 1; /启动定时器T0EA = 1; /翻开总中断4.2实时时钟仿真实现因为定时器最大是16位的原因,使得最大累加次数为65536,无法做到定时1s,所以在本次课程设计中,我们是定时1ms,通过定时1000次1ms来定时1s。之后,就是通过软件来实现时钟的仿真。以1s为根底,实现秒的计数,接着就是完成秒的60进制,实现分的计数;完成分的60进制,实现时的计数这样一步一步实现时钟仿真。相应的设置程序如下:while(1)if(B_1ms) /1ms

14、到,通过定时中断改变标志位 B_1ms = 0;if(+msecond = 1000) /1S到 msecond = 0;RTC();/1s到进入时钟仿真函数/* Timer0 1ms中断函数 */void timer0 (void) interrupt 1 B_1ms = 1;/1ms改变标志位/* RTC演示函数*/void RTC(void)/时钟仿真函数if(+second = 60) /秒-分,60进制second = 0;if(+minute = 60)minute = 0;if(+hour = 24)/分-时,60进制hour = 0, +day; /时-天,24进制if(mon

15、=1|mon=3|mon=5|mon=7|mon=8|mon = 10|mon=12)if (day = 31) day =1;if(+mon = 12)mon = 1; +year;/大月if(mon=4|mon=6|mon=9|mon=11)if (day = 30) day =1;+mon;/小月if(year%4 = 0)if(mon = 2)if(day = 29)day = 1; +mon;/闰年if(year%4 != 0)if(mon = 2)if(day = 28)day = 1; +mon;/平年4.3数码管显示实现在本次课程设计中,我们使用的是共阴极数码管,所以可以通过查

16、找资料,提前定义好一个数码管显示状态的数组t_display。之后就是考虑如何使数码管显示我们所需要的信息。在这里我们选用74HC595芯片来驱动8位数码管。这是因为数据在STC15F2K60S2单片机中是以串行数据传输的,而数码管显示却是要求输进的为8位并行数据,这样才能使数码管显示一个信息。而74HC595芯片的作用就是实现串并转换的功能。STC15F2K60S2单片机将数据以串行形式输进74HC595芯片的SER引脚,而后又通过输送上下电平,依次给74HC595芯片的SRCLK,RCLK上升沿,实现串行数据转变为并行数据输进数码管。另外,因为本次实验中用到了8个数码管,要实现点亮的顺序,

17、还要定义一个数码管位码的数组T_,在这个数组中,通过位索引变量display_inde*,确定亮的数码管位数。相应的设置程序如下:/* 向HC595发送一个字节函数*/void Send_595(u8 dat) u8 i;for(i=0; i8; i+)dat = 8) display_inde* = 0; /8位完毕回04.4矩阵键盘扫描实现在本次课程设计中,我选用的是矩阵式键盘,选用扫描法得到键码值,设定为50ms扫描一次。通过查看实验原理图,可知由P0口控制一个4*4的矩阵键盘,其中,控制行的读入,控制列的读入。另外,因为这里设定了P0口是准双向口工作模式P0M1 = 0; P0M0 =

18、 0,因此需要将P0的8个端口置1时候,才能从端口引脚读入数据。所以要允许读入列时,要使P0 = 0*f0,同理,要允许读入行时,要使P0 = 0*0f。之后,就是得到键盘行列的状态。此时要注意,在键盘扫描中,读行是输出列的状态,读列是输出行的状态。所以通过IO_KeyState1 =P0&0*f0;IO_KeyState1 |= (P0 & 0*0f);将矩阵的行列状态赋给IO_KeyState1,且高4位是行状态,低4位是列状态。而后,就是通过右移四位,得到行数;通过与0*0f相与,得到列数,最后通过计算得到键码值,而后在主函数中,用if语句判断键码值来确定其按键的功能。另外,因为当按键按

19、下或释放释放,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳点下来。为了减少在触点抖动期间检测按键的通与断状态的出错,要设置一个延时程序。相应的设置程序如下:u8 code T_KeyTable16 = 0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0;void IO_KeyDelay(void) /延时程序 u8 i; i = 60; while(-i) ;void IO_KeyScan(void) /50ms call u8 j;j = IO_KeyState1; /保存上一次状态 P0 = 0*f0; /将P04P07置高电平 *低,读Y IO_K

20、eyDelay(); IO_KeyState1 = P0 & 0*f0; /使 IO_KeyState1 = 0*f0P0 = 0*0f; /将P00P03置高电平 Y低,读* IO_KeyDelay(); IO_KeyState1 |= (P0 & 0*0f); /使 IO_KeyState1 = 0*ff IO_KeyState1 = 0*ff; /取反 if(j = IO_KeyState1) /相等 j = IO_KeyState; IO_KeyState=IO_KeyState1;if(IO_KeyState != 0)/有键按下 F0 = 0; if(j = 0) F0 = 1;

21、lse if(j = IO_KeyState) if(+IO_KeyHoldt = 20) /1S 重键 IO_KeyHoldt = 18;F0 = 1; if(F0) j = T_KeyTableIO_KeyState 4; /得到 j=*if(j != 0) & (T_KeyTableIO_KeyState& 0*0f != 0) KeyCode=(j-1)*4+T_KeyTableIO_KeyState & 0*0f+16; /得到键码值/ else IO_KeyHoldt = 0;P0 = 0*ff;4.5显示切换和闹钟实现本次课程设计,我选用外部中断INT0来实现显示切换,而闹钟功能

22、,则是选了if语句实现,表示现象为小数点闪烁。所谓中断是指程序执行过程中,允许外部或部事件通过硬件打断程序的执行,使其转向为处理外部或部事件的中断效劳程序中去,完成中断效劳程序后,CPU返回继续执行被打断的程序。我就是通过外部中断INT0程序,改变标志位intflag0,而后在显示时钟函数中,用if语句判断标志位intflag0来选择使用的程序语句。同时也是在显示时钟函数中设置闹钟的naoH,naoM,用if语句来判断时间是否到了设置的闹钟时间,到了时,就执行小数点闪烁语句。相应的设置程序如下:/* 外部中断函数*/void int0() interrupt 0intflag0 =!intfl

23、ag0; /标注位取反IE0 = 0;/外部中断0中断请求标志清0/* 显示时钟函数 */void DisplayRTC(void) naoH = 17; naoM = 30;if(intflag0=1) /外部中断0,切换 LED80 = year / 1000; LED81 = year / 100% 10; LED82 = year / 10% 10; LED83 = year % 10; if(mon = 10) LED84 = mon /10;else LED84 = DIS_BLACK;LED85 = mon % 10;if(day = 10) LED86 = day /10; e

24、lse LED86 = DIS_BLACK;LED87 = day % 10; else if(hour = 10) LED80 = hour /10;else LED80 = DIS_BLACK;LED81 = hour % 10;LED82 = 17; if(minute = 10) LED83 = minute /10;else LED83 = DIS_BLACK; LED84 = minute % 10;LED85 = 17; if(second = 10) LED86 = second /10;else LED86 = DIS_BLACK; LED87 = second % 10;

25、if(naoH=hour & naoM=minute) if(msecond = 500) LED80 |= DIS_DOT;LED81 |= DIS_DOT;LED83 |= DIS_DOT;LED84 |= DIS_DOT;五系统调试和测试结果分析根据系统设计方案,本系统的调试共分为三大局部:硬件调试,软件调试和软硬件联调。由于在系统设计中采用模块设计法,所以方便对各电路模块功能进展逐级测试:LED驱动模块的调试,数据存储模块的调试,PC机通信模块的调试等,最后将各模块组合后进展整体测试。硬件调试:对各个模块的功能进展调试,主要调试各模块能否实现指定的功能。软件调试:软件调试采用单片机仿真器WAVE6000L及微机,将编好的程序进展调试,主要是检查语法错误。硬件软件联调:将调试好的硬件和软件进展联调,主要调试系统的实现功能。测试结果:此次系统设计结果较好,LED显示屏能很好的显示信息。LED显示屏由八块8*8的LED小模块组成,整个显示屏可以显示正确的时间日期,也可以对时间进展校正,显示亮度也正好总结和心得体会制作这次课程设计一切都是从零

温馨提示

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

评论

0/150

提交评论