单片机课程设计--基于stc15f2k60s的电子万年历--大学毕业设计论文.doc

上传人:可****阿 文档编号:93369278 上传时间:2023-07-03 格式:DOC 页数:17 大小:128KB
返回 下载 相关 举报
单片机课程设计--基于stc15f2k60s的电子万年历--大学毕业设计论文.doc_第1页
第1页 / 共17页
单片机课程设计--基于stc15f2k60s的电子万年历--大学毕业设计论文.doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《单片机课程设计--基于stc15f2k60s的电子万年历--大学毕业设计论文.doc》由会员分享,可在线阅读,更多相关《单片机课程设计--基于stc15f2k60s的电子万年历--大学毕业设计论文.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、湖南科技大学信息与电气工程学院 单片机微机原理课程设计报告课 程: 单片机微机原理及接口技术 题 目: 基于STC15F2K60S的电子万年历 专 业: 通信工程 班 级: 通信一班 姓 名: 孟 焱 学 号: 1204040101 指导教师: 宋 芳 目 录任务书3一、引言4二、设计任务和要求4三、设计方案4三、程序设计51、 显示时钟函数62、 RTC演示函数73、 外部中断0子程序74、 外部中断1子程序85、 主函数96、 向HC595发送一个字节函数117、 显示扫描函数118、 Timer0 1ms中断函数119、 修改模式下显示函数1210、闹钟设定模式函数13四、原理图设计15

2、1、矩阵键盘模块152、单片机及电源模块153、数码管显示模块164、外部中断0,1脉冲输入模块165、led7模拟蜂鸣器模块16五、心得体会16 任务书题 目基于STC15F2K60S单片机的电子万年历时间安排2015年6月66月19日(第15、16周)目 的:通过单片机原理与应用这门课的课程设计,学生应能对STC15F2K60S单片机有一个全面的认识,掌握以STC15F2K60S单片机为核心的电子电路的设计方法和应用技术。1.进一步掌握矩阵键盘电路的编程方法。 2.进一步掌握定时器的使用和编程方法。 3.进一步掌握中断处理程序的编程方法。总体方案实现:1、利用STC15F2K60S作为主控

3、器组成一个电子日历和电子钟。2、利用LED分别显示当前时间和日历。3、利用开发板上自带的24个按键作为输入按钮(实际用到13个),实现手动输入时间信息。4、利用开关k1,k2作为两个外部中断触发装置,利用两个中断子程序分别实现被修改位的选择和进入修改模式。5利用扫描法实现对键盘矩阵的扫描,确定被按下的按键。要求:1、利用STC15F2K60S作为主控器组成一个电子日历和电子钟2、利用开发板上提供的矩阵键盘电路,数码显示电路,设计一个电子钟(日历),用矩阵键盘控制电子钟(日历)的模式转换及修改时间。指导教师评语: 评分等级:【 】指导教师签名:一、 引言 单片机因将其主要组成部分集成在一个芯片上

4、而得名,就是把中 央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如

5、此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。二、 设计任务和要求1、利用STC15F2K60S作为主控器组成一个电子日历和电子钟2、利用开发板上提供的矩阵键盘电路,数码显示电路,设计一个电子钟(日历),用矩阵键盘控制电子钟(日历)的模式转换及修改时间。 三、 设计方案1、利用STC15F2K60S作为主控器组成一个电子日

6、历和电子钟。2、利用LED分别显示当前时间和日历。3、利用开发板上自带的24个按键作为输入按钮(实际用到13个),实现手动输入时间信息。4、利用开关k1,k2作为两个外部中断触发装置,利用两个中断子程序分别实现被修改位的选择和进入修改模式。5利用扫描法实现对键盘矩阵的扫描,确定被按下的按键。注:电子钟做成如下两种格式(按B键两种格式可以切换): XX -XX-XX 由左向右分别为: 时、分、秒 XX -XX-XX 由左向右分别为: 年、月、日(1) 矩阵键盘上09键分别对应数字09用于时间的输入(2) 矩阵键盘上A键用于两种模式之间转换,两种模式下分别显示年月日和时分秒(3) 矩阵键盘上B键用

7、于对输入数字进行确认(4) 矩阵键盘上C键用于进入闹钟时间设定模式(5) 独立按键k1用于对被修改位的选择(6) 独立按键k2用于进入日历修改模式三、 程序设计#define MAIN_Fosc22118400L/定义主时钟#includeSTC15Fxxxx.H/* 用户定义宏 */#defineTimer0_Reload(65536UL -(MAIN_Fosc / 1000)/Timer 0 中断频率, 1000次/秒#define DIS_DOT0x20#define DIS_BLACK0x10#define DIS_0x11/*本地常量声明*/u8 code t_display=/标准

8、字库/ 0 1 2 3 4 5 6 7 8 9 A B C D E F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,/black - H J K L No P U t G Q r M y0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46;/0. 1. 2. 3. 4.

9、 5. 6. 7. 8. 9. -1u8 code T_COM=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/位码/*IO口定义*/sbitP_HC595_SER = P40;/pin 14SERdata inputsbitP_HC595_RCLK = P54;/pin 12RCLkstore (latch) clocksbitP_HC595_SRCLK = P43;/pin 11SRCLKShift data clocksbitled7 = p17;/*本地变量声明*/u8 LED88;/显示缓冲u8display_index;/显示位索引bitB_1ms

10、;/1ms标志u8 ch;u8 mod;u8hour,minute,second,day,month,year,one,two,three;/时间变量u16msecond;u8 ahour,aminute,aa,ab,ach,atem;/闹钟时间变量/-键盘相关变量-u8 IO_KeyState, IO_KeyState1, IO_KeyHoldCnt;/行列键盘变量u8KeyHoldCnt;/键按下计时u8KeyCode;/给用户使用的键码, 116有效u8cnt50ms;u8 a;u8 b;u8 tem;u8 code T_KeyTable16 = 0,1,2,0,3,0,0,0,4,0,

11、0,0,0,0,0,0;/*本地函数声明*/voidIO_KeyScan(void);/50ms callvoid IO_KeyDelay(void);void play(u8 ch,u8 a,u8 b);void alarm();/-延时子程序-void delay(unsigned int t )unsigned int k,j;for(k=0;kt;k+)for(j=0;j10000;j+);if(0=0) for(j=0;j10000;j+);for(j=0;j= 60)minute = 0;if(hour =24)hour = 0;if(day = 30)day = 0;if(mon

12、th = 12)month = 0;if(year = 99)year = 0;if(mod = 0)one = hour;two = minute;three = second;elseone = year;two = month;three = day;LED80 = one / 10;LED81 = one % 10;LED82 = DIS_;LED83 = two / 10;LED84 = two % 10;LED85 = DIS_;LED86 = three / 10;LED87 = three % 10;/* 2、RTC演示函数 */voidRTC(void)if(+second

13、= 60)second = 0;if(+minute = 60)minute = 0;if(+hour = 24)hour = 0;if(+day 30)day = 0;if(+month 12)month = 0;if(+year = 99)year = 0;/*3、外部中断0子程序*/void int0() interrupt 0ch+;if(ch =6)ch = 0;delay(8);IE0 = 0;/*4、外部中断1子程序*/ void int1() interrupt 2a = 0;b = 0; KeyCode = 0;while(KeyCode != 28) /输入被修改位的高位,

14、按下B键确认 if(+cnt50ms = 50)/50ms扫描一次行列键盘cnt50ms = 0;IO_KeyScan();if(KeyCode !=28)a = KeyCode-17;play(ch, a, 0);RTC();DisplayRTC();KeyCode = 0;delay(8);while(KeyCode != 28) /输入被修改位的低位,按下B键确认 if(+cnt50ms = 50)/50ms扫描一次行列键盘cnt50ms = 0;IO_KeyScan();if(KeyCode !=28)b = KeyCode-17;play(ch, a, b);tem = a*10+b

15、; /被修改后数据寄存在tem变量中 if(ch = 0) /判断被修改的是哪一位,并赋予修改后值hour = tem;else if(ch = 1)minute = tem;else if(ch = 2)second = tem;else if(ch = 3)year = tem;else if(ch = 4)month = tem;else if(ch = 5)day = tem;elsealarm();KeyCode = 0;DisplayRTC();delay(8);IE1 = 0; /* 5、主函数 */void main(void)u8i,k;ch = 0;IP = 0x03; /

16、将定时器0中断赋予高优先级,使修改模式下能够正常显示修改结果P0M1 = 0;P0M0 = 0;/设置为准双向口P1M1 = 0;P1M0 = 0;/设置为准双向口P2M1 = 0;P2M0 = 0;/设置为准双向口P3M1 = 0;P3M0 = 0;/设置为准双向口P4M1 = 0;P4M0 = 0;/设置为准双向口P5M1 = 0;P5M0 = 0;/设置为准双向口P6M1 = 0;P6M0 = 0;/设置为准双向口P7M1 = 0;P7M0 = 0;/设置为准双向口AUXR = 0x80;/Timer0 set as 1T, 16 bits timer auto-reload, TH0

17、= (u8)(Timer0_Reload / 256);TL0 = (u8)(Timer0_Reload % 256);ET0 = 1;/Timer0 interrupt enableTR0 = 1;/Tiner0 runEA = 1;/打开总中断EA = 1;EX0 = 1;IT0 = 1;EX1 = 1;IT1 = 1;display_index = 0;year = 90;month = 01;day = 01;hour = 11;/初始化时间值minute = 59;second = 59;KeyCode = 0;a = 0;b = 0;mod = 0;/for(i=0; i8; i+

18、)LED8i = DIS_BLACK;/上电消隐for(i=0; i= 50)/50ms扫描一次行列键盘cnt50ms = 0;IO_KeyScan();if(KeyCode = 27) /改变显示模式if(mod = 0)mod = 1;elsemod = 0;RTC();DisplayRTC();delay(8);KeyCode = 0;if(ahour = hour|aminute = minute) /判断是否到闹钟时间决定是否响铃led7 = 0; /使用led7代替蜂鸣器,灯亮表示蜂鸣器响else led7 = 1;if(KeyCode = 29)alarm();KeyCode =

19、 0;if(B_1ms)/1ms到B_1ms = 0;if(+msecond = 500)/1秒到msecond = 0;RTC();DisplayRTC(); /* 6、向HC595发送一个字节函数 */void Send_595(u8 dat)u8i;for(i=0; i8; i+)dat = 8)display_index = 0;/8位结束回0/*8、 Timer0 1ms中断函数 */void timer0 (void) interrupt TIMER0_VECTORDisplayScan();/1ms扫描显示一位B_1ms = 1;/1ms标志void IO_KeyDelay(vo

20、id)u8 i;i = 60;while(-i);voidIO_KeyScan(void)/50ms callu8j;j = IO_KeyState1;/保存上一次状态P0 = 0xf0;/X低,读YIO_KeyDelay();IO_KeyState1 = P0 & 0xf0;P0 = 0x0f;/Y低,读XIO_KeyDelay();IO_KeyState1 |= (P0 & 0x0f);IO_KeyState1 = 0xff;/取反if(j = IO_KeyState1)/连续两次读相等j = IO_KeyState;IO_KeyState = IO_KeyState1;if(IO_Key

21、State != 0)/有键按下F0 = 0;if(j = 0)F0 = 1;/第一次按下else if(j = IO_KeyState)if(+IO_KeyHoldCnt = 20)/1秒后重键IO_KeyHoldCnt = 18;F0 = 1;if(F0)j = T_KeyTableIO_KeyState 4;if(j != 0) & (T_KeyTableIO_KeyState& 0x0f != 0) KeyCode = (j - 1) * 4 + T_KeyTableIO_KeyState & 0x0f + 16;/计算键码elseIO_KeyHoldCnt = 0;P0 = 0xff

22、;/*9、修改模式下显示函数*/void play(u8 ch,u8 a,u8 b)u8 tea,teb;tea = a;teb = b;if(a 9)tea = 0;if(b 9)teb = 0;if(ch = 0|ch = 3)LED80 = tea;LED81 = teb;if(ch = 0)LED82 = DIS_;elseLED82 = DIS_BLACK; LED83 = DIS_BLACK;LED84 = DIS_BLACK;if(ch = 0)LED85 = DIS_;elseLED85 = DIS_BLACK;LED86 = DIS_BLACK;LED87 = DIS_BLA

23、CK;else if(ch = 1|ch = 4)LED80 = DIS_BLACK;LED81 = DIS_BLACK;if(ch = 1)LED82 = DIS_;elseLED82 = DIS_BLACK;LED83 = tea;LED84 = teb;if(ch = 1)LED85 = DIS_;elseLED85 = DIS_BLACK;LED86 = DIS_BLACK;LED87 = DIS_BLACK;elseLED80 = DIS_BLACK;LED81 = DIS_BLACK;if(ch = 2)LED82 = DIS_;elseLED82 = DIS_BLACK;LED8

24、3 = DIS_BLACK;LED84 = DIS_BLACK;if(ch = 2)LED85 = DIS_;elseLED85 = DIS_BLACK;LED86 = tea;LED87 = teb;/*10、闹钟设定模式函数*/void alarm() for(ach = 0; ach= 50)/50ms扫描一次行列键盘cnt50ms = 0;IO_KeyScan();if(KeyCode !=28)aa = KeyCode-17;play(ach, aa, 0); RTC();DisplayRTC();KeyCode = 0;delay(8);while(KeyCode != 28) i

25、f(+cnt50ms = 50)/50ms扫描一次行列键盘cnt50ms = 0;IO_KeyScan();if(KeyCode !=28)ab = KeyCode-17;play(ach, aa, ab);atem = aa*10+ab;if(ach = 0)ahour = atem;else if(ach = 1)aminute = atem; 四、 原理图设计1、矩阵键盘模块2、单片机及电源模块3、数码管显示模块4、外部中断0,1脉冲输入模块5、led7模拟蜂鸣器模块五、 心得体会通过这次单片机电子日历的课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。这个设计过程中,我们通过在原有的系统进行了改进,使之增添了年、日等的三个显示功能,使之成为一个更加适用,功能更加完备的属于自己的一个日历系统。设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。收获颇多,达到了实验的目的。

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁