嵌入式课程设计报告具有日历功能的电子时钟.docx

上传人:牧羊曲112 文档编号:5179311 上传时间:2023-06-11 格式:DOCX 页数:18 大小:123.46KB
返回 下载 相关 举报
嵌入式课程设计报告具有日历功能的电子时钟.docx_第1页
第1页 / 共18页
嵌入式课程设计报告具有日历功能的电子时钟.docx_第2页
第2页 / 共18页
嵌入式课程设计报告具有日历功能的电子时钟.docx_第3页
第3页 / 共18页
嵌入式课程设计报告具有日历功能的电子时钟.docx_第4页
第4页 / 共18页
嵌入式课程设计报告具有日历功能的电子时钟.docx_第5页
第5页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《嵌入式课程设计报告具有日历功能的电子时钟.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告具有日历功能的电子时钟.docx(18页珍藏版)》请在三一办公上搜索。

1、嵌入式零碎开发之杨若古兰创作课程设计专周陈述课程设计(陈述)I、课程设计题目:具有日历功能的电子时钟题目:具有日历功能的电子时钟系别及专业:计算机工程系 计算机利用技术班级:10511先生姓名:权胜(14)王希(05)严家强(23)完成时间:2012-12-24/2012-12-28皿、课程设计步调及内容一、课程设计目标1、培养综合应用常识和独立开展实践创新的能力;2、培养先生将理论常识与实际利用结合在一路;3、培养先生的自我进修能力和解决成绩的能力;4、培养先生的协作认识和团队合作能力;5、培养先生的总结经验的能力.二、研讨方法及手段利用1、成绩解决模块化,将任务分成若干模块,分模块调试和完

2、成任务;2、查阅网上的相干素材,查阅相干论文材料,进行比较、研讨;3、在独立思考的基础上,请教老师,和同组同学讨论、进修;4、反复调试、总结经验、排除错误;5、连接PC和EDUKIT-III ARM 嵌入式开发实验箱,完成全部实验 环境搭建;6、应用Vision4和超等终端软件进行软件编译和进行调试检查;7、使用ULINK2仿真器下载至实验箱进行观察、调试.三、课程设计预期后果1、程序启动后,蜂鸣器响三声,8位LED 数码管显示初始值“0”,1秒后显示当前日期和时间,日期格式:*年*月*日,时间格式:* (礼拜)-*时*分*秒.PC机超等终端同时显示相干 的信息.2、按下“D”键,可进行日期、

3、时间的点窜、设置:有按键时,把 键值显示到最右边,后续按键时,把之前的按键左移,把当前按键值显示到最右边数码管.设置终了后,按“FUN”键确认,退出 设置,时钟显示点窜后的时间.3、显示控制和闹钟设置:按键“*”,进行数码管闪烁/不闪烁的切换.按键“A”,设置闹钟时间.时间到达后,闹铃(蜂鸣器)响,按 “FUN ”键,关闭闹铃.按键设置时,PC的超等终端显示响应的提示信息,同时把所按的 键值,通过串口发送到超等终端显示.4、闹铃声音频率及音量控制:按下“B”键时,进入闹铃声音的设置.收集AIN2的ADC值,根据ADC的值,控制蜂鸣器的声音频率. 控制PWM1的频率.(为100Hz至1KHz,最

4、低值和最高值可以才艮据 实际后果调整).并把实际调整的频率打印到超等终端,如“100Hz”.收集AIN1的ADC值,根据 ADC的值,控制蜂鸣器的音量.控制 PWM1的占空比.(为0%至100%,最低值和最高值可以根据实际后 果调整).并把实际调整的占空比打印到超等终端上,如“50%”.按“FUN”键结束设置.先生姓名:权胜王希严家强专业年级:计算机利用技术 10511目录近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、收 集、工控、医疗、电子等领域发挥着愈来愈主要的感化.嵌入式零碎无疑成为当前最热门最 有发展前途的IT利用领域之一.实时时钟(RTC )器件是一种能提供

5、日历/时钟、数据存储等功能的公用集成电路,经常使用 作各种计算机零碎的时钟旌旗灯号源和参数设置存储电路.RTC具有计时精确、耗电低和体 积小等特点,特别适用于在各种嵌入式零碎忠记录事件发生的时间和相干信息,特别是在通 信工程、电力主动化、工业控制等主动化程度较高领域的无人职守环境.随着集成电路技术 的不竭发展,RTC器件的新品也不竭推出.这些新品不但具有精确的RTC,还有大容量的存储 器、温度传感器和A/D数据收集通道等,已成为集RTC、数据收集和存储于一体的综合功能 器件,特别适用于以微控制器为核心的嵌入式零碎.关键字:嵌入式零碎、实时时钟RTC第一章零碎设计第一节课题目标及整体方案随着嵌入

6、式技术的发展,我们身边充斥着各类各样的嵌入式电子产品.实时时钟(RTC)就 是一种在古代电子设备中利用非常普遍,可以帮忙人们实时、精确的把握时间的器件,如手 机、PDA及一些智能仪表都提供了时钟显示.我们本次课题的目标就是要基于SAMSUNG S3C2410AL-20芯片设计出一个实时时钟,编 写C说话可以通过uVision4和超等终端软件调试,然后通过ULINK2仿真器下载至实验箱 内进行观察.在试验箱中的LED显示灯上显示出时间和日历.另外,我们将要实现的零碎分为 三个模块实现,每个模块间绝对独立而又彼此联系.第二节项目设计模块描述及流程图1. 模块描述:我进步前辈行了全部零碎的规划,将全

7、部零碎分为两大模块:第一,主函数 模块;第二,功能实现模块(进行时间和闹钟的设定,和其他一些显示功能);第三,闹钟 功能实现模块.2. 整体设计流程图:3、功能设计流程图4、闹钟功能程序流程图一、主函数模块int i;int main(int argc,char *argv) sys_init();/初始化零碎iic_init_8led();/初始化 8 个 led 灯 for(i=0;i8;i+) iic_write_8led(0x70, 0x10+i,0xfc);/8 个灯全 0 for(i=0;i29|ucChar=0) iic_init_8led();while(1) if(rBCDY

8、EAR=0x99) 获取零碎日期及时间 g_nYear = 0x1999; elseg_nYear = 0x2000 + rBCDYEAR;g_nMonth二rBCDMON;g_nWeekday=rBCDDAY;g_nDate二rBCDDATE;g_nHour二rBCDHOUR;g_nMin=rBCDMIN;g_nSec=rBCDSEC;if(g_nSec!二nTmp)/不异时间不显示节约资本 nTmp = g_nSec; break; 3、*键功能实现if(st2=1)/按*键履行闪烁for(a=0;a8;a+)iic_write_8led(0x70,0x10+a,0x00); /8 个灯熄

9、灭delay(1000);/延时 1sdisplay_Time();/再显示elsedisplay_Time(); /未按下不变 4、按键判断函数 void display(void) if(ucChar=0x01)/判断是否按下0键 uart_printf(n按键0,数码管显示时间:n); rtc_display1();/显示时间函数 else if(ucChar=0x02)/判断是否按下 1 键uart_printf(n按键1,数码管显示日期:n); rtc_display2();/显示日期函数 else if(ucChar=0x14) /判断是否按下 D 键 uart_printf(n按

10、下键D,进入日期设置,请先输入日期(格式 年年年年月月日日).输入 完成后按fun键确认.n); setDate();/设置时间函数 else if(ucChar=0x1c) 判断是否按下*键if(st3=1)/若按下*键,数码管闪烁显示uart_printf(n按下键*,数码管停止闪烁显示.n);st3=0;ss();/调用闪烁/不闪烁切换else /再次按下*键,数码管停止闪烁uart_printf(n按下键*,数码管闪烁显示.n);st3=1;ss(); else if(ucChar=0x11)/判断是否按下 A 键uart_printf(n按下键A,设置闹钟.请输入闹钟时间,按fun键

11、确认.n);isAlam=1;/已设置了闹钟alam_jiao();/调用闹铃函数 else if(st1=1)/判断当前是否显示时间,调用显示时间函数 rtc_display1(); else if(st1=2)/判断当前是否显示日期,调用显示日期函数rtc_display2();5、时间及日期设置函数void setDate(void)int i,u;ucChar=0;for(u=0;u| -jeqgon 少智砂避砂8均QTI函移音避掰单虽晋堀保7/(0二i叫。方)!fyewq也静甲泌甲卸Y嶙/ (8l=! I |6=!)J!:+!_ (:(uu“)户U!cTpen9S|9:(“u (把把

12、好好MM-好1* 斜)慝更晦目塑者u“)户uveTpen (8=!)J!iic_write_8led(0x70, 0x10+0, numg_nYear/4096);iic_write_8led(0x70, 0x10+7, numg_nYear/256%16);iic_write_8led(0x70, 0x10+6, numg_nYear/16%16);iic_write_8led(0x70, 0x10+5, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMonth二ucChar*16;/设置月i+;brea

13、k;case 5:iic_write_8led(0x70, 0x10+1, numg_nYear/4096);iic_write_8led(0x70, 0x10+0, numg_nYear/256%16);iic_write_8led(0x70, 0x10+7, numg_nYear/16%16);iic_write_8led(0x70, 0x10+6, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+5, numg_nMonth/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMonth= g_

14、nMonth+ucChar;i+;break;case 6:iic_write_8led(0x70, 0x10+2, numg_nYear/4096);iic_write_8led(0x70, 0x10+1, numg_nYear/256%16);iic_write_8led(0x70, 0x10+0, numg_nYear/16%16);iic_write_8led(0x70, 0x10+7, numg_nYear%4096%256%16);iic_write_8led(0x70, 0x10+6, numg_nMonth/16);iic_write_8led(0x70, 0x10+5, nu

15、mg_nMonth%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nDate二ucChar*16;/设置日i+;break;case 7:iic_write_8led(0x70, 0x10+3, numg_nYear/4096);iic_write_8led(0x70, 0x10+2, numg_nYear/256%16);iic_write_8led(0x70, 0x10+1, numg_nYear/16%16);iic_write_8led(0x70, 0x10+0, numg_nYear%4096%256%16);iic_write_8led

16、(0x70, 0x10+7, numg_nMonth/16);iic_write_8led(0x70, 0x10+6, numg_nMonth%16);iic_write_8led(0x70, 0x10+5, numg_nDate/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nDate=g_nDate+ucChar;i+;break;case 9:for(u=0;u8;u+)iic_write_8led(0x70,0x10+u,0x00);/8 个灯灭i+;break;case 10:iic_write_8led(0x70, 0x10+5, nu

17、mucChar);iic_write_8led(0x70, 0x10+4, 0x02);g_nWeekday二ucChar;/设置礼拜i+;break;case 11:iic_write_8led(0x70, 0x10+6, numg_nWeekday);iic_write_8led(0x70, 0x10+5, 0x02);iic_write_8led(0x70, 0x10+4, numucChar);g_nHour二ucChar*16;/设置小时i+;break;case 12:iic_write_8led(0x70, 0x10+7, numg_nWeekday);iic_write_8le

18、d(0x70, 0x10+6, 0x02);iic_write_8led(0x70, 0x10+5, numg_nHour/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nHour=g_nHour+ucChar;i+;break;case 13:iic_write_8led(0x70, 0x10+0, numg_nWeekday);iic_write_8led(0x70, 0x10+7, 0x02);iic_write_8led(0x70, 0x10+6, numg_nHour/16);iic_write_8led(0x70, 0x10+5, nu

19、mg_nHour%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nMin=ucChar*16;/设置分钟i+;break;case 14:iic_write_8led(0x70, 0x10+1, numg_nWeekday);iic_write_8led(0x70, 0x10+0, 0x02);iic_write_8led(0x70, 0x10+7, numg_nHour/16);iic_write_8led(0x70, 0x10+6, numg_nHour%16);iic_write_8led(0x70, 0x10+5, numg_nMin/16

20、);iic_write_8led(0x70, 0x10+4, numucChar);g_nMin=g_nMin+ucChar;i+;break;case 15:iic_write_8led(0x70, 0x10+2, numg_nWeekday);iic_write_8led(0x70, 0x10+1, 0x02);iic_write_8led(0x70, 0x10+0, numg_nHour/16);iic_write_8led(0x70, 0x10+7, numg_nHour%16);iic_write_8led(0x70, 0x10+6, numg_nMin/16);iic_write_

21、8led(0x70, 0x10+5, numg_nMin%16);iic_write_8led(0x70, 0x10+4, numucChar);g_nSec=ucChar*16;/设置秒钟i+;break;case 16:iic_write_8led(0x70, 0x10+3, numg_nWeekday);iic_write_8led(0x70, 0x10+2, 0x02);iic_write_8led(0x70, 0x10+1, numg_nHour/16);iic_write_8led(0x70, 0x10+0, numg_nHour%16);iic_write_8led(0x70,

22、0x10+7, numg_nMin/16);iic_write_8led(0x70, 0x10+6, numg_nMin%16);iic_write_8led(0x70, 0x10+5, numg_nSec/16);iic_write_8led(0x70, 0x10+4, numucChar);g_nSec=g_nSec+ucChar;i+;break;case 18:rRTCCON 二 rRTCCON & (0xf)| 0x1;/ No reset, Merge BCD counters, 1/32768,RTC Control enablerBCDYEAR 二 rBCDYEAR & (0x

23、ff) | g_nYear;rBCDMON 二 rBCDMON & (0x1f) | g_nMonth;rBCDDAY 二 rBCDDAY & (0x7)| g_nWeekday; rBCDDATE =rBCDDATE & (0x3f) | g_nDate;rBCDHOUR 二rBCDHOUR&(0x3f)|g_nHour;rBCDMIN 二rBCDMIN&(0x7f)|g_nMin;rBCDSEC 二rBCDSEC&(0x7f)|g_nSec;rRTCCON = 0x0;rtc_display1(); /显示时间函数break;6、闪烁/不闪烁切换函数void ss(void)if(st3=

24、0)/ 若按下*键if(st1=1)/判断当前是否显示时间,调用显示时间函数st2=0;rtc_display1();else if(st1=2)/判断当前是否显示日期,调用显示日期函数st2=0;rtc_display2();else/未按下键,再次判断显示日期还是时间,再进行调用当前显示函数if(st1=1)st2=1;rtc_display1();else if(st1=2)st2=1;rtc_display2();7、发声函数void jiao() int u;rGPFCON=0x5500;rGPFUP=0;rGPBCON 二 rGPBCON & 0xFFFFFC|1;rGPBDAT

25、&= 0xFFFFFE;rGPFDAT=0;/初始化蜂鸣器设置for(u=0;u100000;u+);rGPFDAT=0xF0;for(u=0;u100000;u+);delay(5000);/延时 5srGPBDAT |= 1;delay(5000);rGPFCON = 0x55aa;8、键值对应到键盘函数UINT8T key_set(UINT8T ucChar)switch(ucChar)case 1:case 2:case 3:case 4:case 5:ucChar-=1; break;case 9:case 10:case 11:case 12: case 13 ucChar-=4;

26、 break;case 17: case 18: case 19: case 20: case 21: ucChar-=7; break; case 25: ucChar = 0xF; break; case 26: ucChar = +; break; case 27:ucChar=-;break;case 28:ucChar=*;break;case 29:ucChar=0xFF; break;default:ucChar=0; return ucChar; 9、间断函数 void _irq rtc_int0_int(void) ClearPending(BIT_EINT0); rRTCR

27、ST =(13) | 3; than 30 g_nSecvoid _irq rtc_int(void) /到达设定闹钟时间,触发间断 int i;ClearPending(BIT_RTC);f_nIsRtcInt = 1;void _irq rtc_tick(void) ClearPending(BIT_TICK); f_unTickCount+;三、闹钟功能实现模块1、A键设置闹钟功能实现if(isAlam=1)/按下A键设置闹钟/在超等终端上显示已设定的闹钟为-uart_printf( %x:%x:%x%s,%x/%x/%x 已 设 定 闹钟 %x:%x:%x,%x/%x/%xr ,g_n

28、Hour,g_nMin,g_nSec,dayg_nWeekday,g_nMonth,g_nDate,g _nYear,rALMHOUR,rALMMIN,rALMSEC,rALMYEAR,rALMMON,rALMDATE); if(f_nIsRtcInt=1)/判断到了设定的闹钟 f_nIsRtcInt=0; 到了闹钟时间久置为初始值 isAlam=0;/将设置的闹钟置0 (已设置闹钟) uart_printf(n 闹钟叫 了,请按 FUN 键停止.n);naoz(); /调用闹钟函数else/未按下A键就不变uart_printf( %x:%x:%x %s,%x/%x/%xr ,g_nHour

29、,g_nMin,g_nSec,dayg_nWeekday,g_nM onth,g_nDate,g_nYear);keyboard_init();/接受键盘的输入,而且将值放在ucCharg_nKeyPress = 0;iic_read_keybd(0x70, 0x1, &ucChar);display();/按键判断函数rRTCCON = 0x0;/ No reset, Merge BCD counters, 1/32768, RTC Control disable(forpower consumption)void naoz(void)/ 闹钟函数int i;while(1)/闹钟响后,按F

30、UN键停止while(g_nKeyPress-)keyboard_init();/接受键盘的输入,而且将值放在ucCharg_nKeyPress=0;iic_read_keybd(0x70, 0x1, &ucChar);ucChar=key_set(ucChar);if(ucChar=0xff)/按下 FUN 键ucChar=0;/给按键值置0uart_printf(n 闹钟已停止.n);return;iic_init_8led();for(i=0;i8;i+)iic_write_8led(0x70,0x10+i,0x00); /8 个 LED 灯全灭display_Time();/调用零碎时间显示jiao();/调用发声函数2、闹钟设置函数void alam(void)int i,u;ucChar=0;for(u=0;u8;u+)iic_write_8led(0x70,0x10+u,0x00);/8 个 LED 灯全灭i=0;while(1)iic_init_8led();while(g_nKeyPress-)keyboard_init();g_nKeyPress = 0;/接受键盘的输入,而且将值放在ucChar while(g_nKeyPress = 0);iic_read_keybd(0x70, 0x1, &ucChar);if(i=6)/判断时间输入是否完成

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号