




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖南科技大学信息与电气工程学院单片机微机原理 课程设计报告课 程:单片机微机原理及接口技术题目: 基于stc15f2k60s勺电子万年历专业:通信工程班级:通信一班姓名:孟炎学号:1204040101指导教师:宋芳任务书 3一、引言 4二、设计任务和要求4.三、设计方案4.三、程序设计5.1、 显示时钟函数6.2、 rtc演示函数 7.3、 外部中断0 子程序 7.4、 外部中断1 子程序 8.5、 主函数 9.6、 向hc595发送一个字节函数 1 17、 显示扫描函数1.18、 timer0 1ms 中断函数 1.19、 修改模式下显示函数1.210、闹钟设定模式函数1.3四、原理图设计1
2、.5.1、矩阵键盘模块1.5.2、单片机及电源模块1.53、数码管显示模块1.64、外部中断0, 1 脉冲输入模块1.65、 led7模拟蜂鸣器模块 1.6五、心得体会1.6.任务书基于stc15f2k60单片机的电子万年历时间安排2015年6月66月19日(第15、16周)目 的:通过单片机原理与应用这门课的课程设计,学生应能对stc15f2k60曲片机有一个全面的认识,掌握以 stc15f2k60曲片机为核心的电子电路的设计方 法和应用技术。1 .进一步掌握矩阵键盘电路的编程方法。2 .进一步掌握定时器的使用和编程方法。3 .进一步掌握中断处理程序的编程方法。总体方案实现:1、利用stc1
3、5f2k60并为主控器组成一个电子日历和电子钟。2、利用le的别显示当前时间和日历。3、利用开发板上自带的24个按键作为输入按钮(实际用到13个),实现手动 输入时间信息。4、利用开关k1, k2作为两个外部中断触发装置,利用两个中断子程序分别实 现被修改位的选择和进入修改模式。5利用扫描法实现对键盘矩阵的扫描,确定被按下的按键。要求:1、利用stc15f2k60s作为主控器组成一个电子日历和电子钟2、利用开发板上提供的矩阵键盘电路,数码显示电路,设计一个电子钟(日历), 用矩阵键盘控制电子钟(日历)的模式转换及修改时间。指导教师评语:评分等级:【 指导教师签名:1、 引言单片机因将其主要组成
4、部分集成在一个芯片上而得名,就是把中 央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及i/o 接口电路等部件集成在一个芯片上。 基于单片机设计的数字钟精确度较高, 因为在程序的执行过程中, 任何指令都不影响定时器的正常计数, 即便程序很长也不会影响中断的时间。数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用, 使得数字钟的精度, 远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便, 而且大大地扩展了钟表的报时功能。 数字钟已成为人们日常生活中的必需品, 广泛应用于家庭、车站、 码头、 剧院、 办公室等场所
5、, 给人们的生活、 学习、 工作带来极大的方便。不仅如此, 在现代化的进程中, 也离不开电子钟的相关功能和原理, 比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。2、 设计任务和要求1、利用 stc15f2k60s 作为主控器组成一个电子日历和电子钟2、 利用开发板上提供的矩阵键盘电路,数码显示电路, 设计一个电子钟 (日历) ,用矩阵键盘控制电子钟(日历)的模式转换及修改时间
6、。三、 设计方案1、利用stc15f2k60s 作为主控器组成一个电子日历和电子钟。2、利用led 分别显示当前时间和日历。3、 利用开发板上自带的 24 个按键作为输入按钮 (实际用到 13 个) , 实现手动输入时间信息。4、 利用开关 k1, k2 作为两个外部中断触发装置, 利用两个中断子程序分别实现被修改位的选择和进入修改模式。5 利用扫描法实现对键盘矩阵的扫描,确定被按下的按键。注:电子钟做成如下两种格式(按b 键两种格式可以切换) :xx -xx-xx由左向右分别为: 时、分、秒xx -xx-xx由左向右分别为: 年、月、日( 1) 矩阵键盘上09 键分别对应数字 09 用于时间
7、的输入( 2) 矩阵键盘上a 键用于两种模式之间转换,两种模式下分别显示年月日和时分秒( 3) 矩阵键盘上b 键用于对输入数字进行确认( 4) 矩阵键盘上c 键用于进入闹钟时间设定模式( 5) 独立按键k1 用于对被修改位的选择( 6) 独立按键k2 用于进入日历修改模式22118400l/ 定义主时钟三、 程序设计#define main_fosc#include "stc15fxxxx.h/*用户定义宏*/#define timer0_reload (65536ul -(main_fosc / 1000)#define dis_dot0x20#define dis_black0x
8、10#define dis_ 0x11/timer 0 中断频率 , 1000 次/秒/*本地常量声明*/u8 code t_display=/01234/标准字库56789a 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 n o p u t g q r m y0x00,0x40,0x76,0x1e,0x70,0x38,0x37,0x5c,0x73,0x3e,0x78,0x3d,0x67,0x50,0x37,0x6e,0xbf,0
9、x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x46;/0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1u8 code t_com=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/位码/*io 口定义sbit p_hc595_ser= p4a0;sbit p_hc595_rclk= p5a4;sbit p_hc595_srclk = p4a3;sbit led7= p1a7;本地变量声明/*/pin 14serdata input/pin 12rclkstore (latch) clock/pin 1
10、1srclkshift data clock*/u8 led88;/显示缓冲u8 display_index; /显示位索引bit b_1ms;/1ms 标志u8 ch;u8 mod;u8 hour,minute,second,day,month,year,one,two,three;/ 时间变量 u16 msecond;u8 ahour,aminute,aa,ab,ach,atem;/ 闹钟时间变量/ 键盘相关变量u8 io_keystate, io_keystate1, io_keyholdcnt;/行列键盘变量u8u8u8u8u8u8keyholdcnt;/键按下计时keycode; /
11、给用户使用的键码, 116 有效cnt50ms; a; b; tem;u8 code t_keytable16 = 0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0;/*本地函数声明 */void io_keyscan(void); /50ms call void 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;k<t;k+) for(j=0;j<10000;j+); if(0=0)
12、for(j=0;j<10000;j+);for(j=0;j<10000;j+);/*/1、显示时钟函数void displayrtc(void) 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;if(mod = 0)one = hour;two = minute;three = second; elseone = year;two = month;three = da
13、y;led80 = one / 10;led81 = one % 10;led82 = dis_;led83 = two / 10;led84 = two % 10;led85 = dis_;led86 = three / 10;led87 = three % 10; /*2、rtc 演示函数 */ void rtc(void)if(+second >= 60) second = 0;if(+minute >= 60) minute = 0;if(+hour >= 24)hour = 0;if(+day > 30)day = 0;if(+month > 12)mo
14、nth = 0;if(+year >= 99)year = 0;/* void int0() interrupt 0 3、外部中断0 子程序*/ch+;if(ch >=6)ch = 0;delay(8);ie0 = 0;/*4、外部中断1 子程序*/void int1() interrupt 2a = 0;b = 0;/ 输入被修改位的高位,按下b 键确认keycode = 0;while(keycode != 28) if(+cnt50ms >= 50)/50ms 扫描一次行列键盘cnt50ms = 0;io_keyscan();if(keycode !=28)a = ke
15、ycode-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;/被修改后数据寄存在tem 变量中if(ch = 0)/判断被修改的是哪一位,并赋予修改后值hour = tem;else if(ch = 1)minute
16、 = 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)u8 i,k;ch = 0;ip = 0x03;/将定时器0 中断赋予高优先级,使修改模式下能够正常显示修改结果p0m1 = 0p1m1 = 0p2m1 = 0p3m1 = 0p4m1 = 0p5m1 = 0p6m1
17、= 0p7m1 = 0p0m0 = 0;/设置为准双向口p1m0 = 0;/设置为准双向口p2m0 = 0;/设置为准双向口p3m0 = 0;/设置为准双向口p4m0 = 0;/设置为准双向口p5m0 = 0;/设置为准双向口p6m0 = 0;/设置为准双向口p7m0 = 0;/设置为准双向口auxr = 0x80; /timer0 set as 1t, 16 bits timer auto-reload,th0 = (u8)(timer0_reload / 256);tl0 = (u8)(timer0_reload % 256);et0 = 1; /timer0 interrupt enab
18、letr0 = 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; i<8; i+) led8i = dis_black; / 上电消隐 for(i=0; i<8; i+) led8i = i;/显示01234567k = 0;while(1)if(+
19、cnt50ms >= 50)/50ms 扫描一次行列键盘cnt50ms = 0;io_keyscan();if(keycode = 27)/ 改变显示模式if(mod = 0)mod = 1; else mod = 0;rtc();displayrtc();delay(8);keycode = 0;if(ahour = hour|aminute = minute) /判断是否到闹钟时间决定是否响铃led7 = 0;/使用 led7 代替蜂鸣器,灯亮表示蜂鸣器响 else led7 = 1;if(keycode = 29)alarm();keycode = 0;if(b_1ms) /1ms
20、 到b_1ms = 0;if(+msecond >= 500)/1 秒到msecond = 0;rtc();displayrtc();*/6 、向 hc595 发送一个字节函数void send_595(u8 dat)u8 i;for(i=0; i<8; i+)dat <<= 1;p_hc595_ser = cy;p_hc595_srclk = 1;p_hc595_srclk = 0;/*7、 显示扫描函数*/输出位码/输出段码/锁存输出数据/8 位结束回 0void displayscan(void) send_595(t_comdisplay_index);send
21、_595(t_displayled8display_index);p_hc595_rclk = 1;p_hc595_rclk = 0;if(+display_index >= 8) display_index = 0;/*8、 timer0 1ms 中断函数*/void timer0 (void) interrupt timer0_vectordisplayscan(); /1ms 扫描显示一位b_1ms = 1;/1ms 标志void io_keydelay(void) u8 i;i = 60;while(-i) ;void io_keyscan(void) u8 j;j = io_k
22、eystate1;/50ms call/保存上一次状态p0 = 0xf0;/x 低,读 yio_keydelay();io_keystate1 = p0 & 0xf0;p0 = 0x0f;/y 低,读 xio_keydelay();io_keystate1 |= (p0 & 0x0f);io_keystate1 a= 0xff; if(j = io_keystate1) /取反/连续两次读相等j = io_keystate;io_keystate = io_keystate1;if(io_keystate != 0) /有键按下f0 = 0;if(j = 0) f0 = 1;/
23、第一次按下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;else io_keyholdcnt = 0;p0 = 0xff; void pl
24、ay(u8 ch,u8 a,u8 b) /*9、修改模式下显示函数*/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
25、= dis_black;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;led83 = dis_black;led84 = dis_black; if(ch = 2) led85 = dis_; elseled85 = dis_black;led86 = te
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地方政府与电力公司新能源充电桩共建合作框架协议
- Brand KPIs for sauces condiments in Brazil-外文版培训课件(2025.2)
- 路政联合执法协议书
- 黄石食堂承包协议书
- 仓库登高梯租用协议书
- 资产整体转让协议书
- 公司建合同框架协议书
- 餐饮法人变更协议书
- 解除劳务外包协议书
- 食堂污水清掏协议书
- 高职高专英语教材电子版单选题100道及答案
- 《员工流失问题及建议研究的国内外文献综述》4300字
- (二模)2025年4月潍坊市高三高考模拟考试语文试卷(含答案)
- 2025年内蒙古赤峰新正电工技术服务有限公司招聘笔试参考题库含答案解析
- 蚊蝇消杀合同协议
- 2025年江苏省无锡市中考英语二模试卷
- 辐射安全与防护考核试题(附答案)
- 2024北京西城区四年级(下)期末数学试题及答案
- 喷涂作业安全专项培训
- 厂区围堰管理制度
- 戏曲理论测试题目及答案
评论
0/150
提交评论