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

上传人:b****1 文档编号:14342650 上传时间:2023-06-22 格式:DOCX 页数:32 大小:89.11KB
下载 相关 举报
嵌入式课程设计报告具有日历功能电子时钟.docx_第1页
第1页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第2页
第2页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第3页
第3页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第4页
第4页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第5页
第5页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第6页
第6页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第7页
第7页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第8页
第8页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第9页
第9页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第10页
第10页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第11页
第11页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第12页
第12页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第13页
第13页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第14页
第14页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第15页
第15页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第16页
第16页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第17页
第17页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第18页
第18页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第19页
第19页 / 共32页
嵌入式课程设计报告具有日历功能电子时钟.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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

 

嵌入式系统开发

课程设计专周报告

题目:

具有日历功能的电子时钟

系别及专业:

计算机工程系计算机应用技术

班级:

10511

学生姓名:

权胜(14)王希(05)严家强(23)

指导老师:

宋国明

完成时间:

2012-12-24/2012-12-28

 

课程设计(报告)

Ⅰ、课程设计题目:

具有日历功能的电子时钟

Ⅱ、课程设计步骤及内容

一、课程设计目标

1、培养综合运用知识和独立开展实践创新的能力;

2、培养学生将理论知识与实际应用结合在一起;

3、培养学生的自我学习能力和解决问题的能力;

4、培养学生的协作意识和团队合作能力;

5、培养学生的总结经验的能力。

 

二、研究方法及手段应用

1、问题解决模块化,将任务分成若干模块,分模块调试和完成任务;

2、查阅网上的相关素材,查阅相关论文资料,进行比较、研究;

3、在独立思考的基础上,请教老师,和同组同学讨论、学习;

4、反复调试、总结经验、排除差错;

5、连接PC和EDUKIT-IIIARM嵌入式开发实验箱,完成整个实验环境搭建;

6、运用μVision4和超级终端软件进行软件编译和进行调试查看;

7、使用ULINK2仿真器下载至实验箱进行观察、调试。

 

三、课程设计预期效果

1、程序启动后,蜂鸣器响三声,8位LED数码管显示初始值“0”,1秒后显示当前日期和时间,日期格式:

****年**月**日,时间格式:

*(星期)-**时**分**秒。

PC机超级终端同时显示相关的信息。

2、按下“D”键,可进行日期、时间的修改、设置:

有按键时,把键值显示到最右侧,后续按键时,把以前的按键左移,把当前按键值显示到最右侧数码管。

设置完毕后,按“FUN”键确认,退出设置,时钟显示修改后的时间。

3、显示控制和闹钟设置:

按键“*”,进行数码管闪烁/不闪烁的切换。

按键“A”,设置闹钟时间。

时间到达后,闹铃(蜂鸣器)响,按“FUN”键,关闭闹铃。

按键设置时,PC的超级终端显示相应的提示信息,同时把所按的键值,通过串口发送到超级终端显示。

4、闹铃声音频率及音量控制:

按下“B”键时,进入闹铃声音的设置。

采集AIN2的ADC值,根据ADC的值,控制蜂鸣器的声音频率。

控制PWM1的频率。

(为100Hz至1KHz,最低值和最高值可以根据实际效果调整)。

并把实际调整的频率打印到超级终端,如“100Hz”。

采集AIN1的ADC值,根据ADC的值,控制蜂鸣器的音量。

控制PWM1的占空比。

(为0%至100%,最低值和最高值可以根据实际效果调整).并把实际调整的占空比打印到超级终端上,如“50%”。

按“FUN”键结束设置。

学生姓名:

权胜王希严家强

专业年级:

计算机应用技术10511

 

目录

前言5

第一章系统设计6

第一节课题目标及总体方案6

第二节项目设计模块描述及流程图5

1、模块描述6

2、总体设计流程图6

3、功能设计流程图7

4、闹钟功能程序流程图8

一、主函数模块9

二、功能实现模块10

1、8个LED灯的按位显示程序10

2、获取系统时间11

3、*键功能实现12

4、按键判断函数12

5、时间及日期设置13

6、闪烁/不闪烁切换函数17

7、发声函数18

8、键值对应到键盘函数18

9、中断函数19

三、闹钟功能实现模块20

1、A键设置闹钟功能实现20

2、闹钟设置函数21

3、闹铃函数23

第二章结果与显示24

结果显示24

心得体会24

参考文献25

前言

近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。

嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。

RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。

随着集成电路技术的不断发展,RTC器件的新品也不断推出。

这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。

关键字:

嵌入式系统、实时时钟RTC

 

第一章系统设计

第一节课题目标及总体方案

随着嵌入式技术的发展,我们身边充斥着各类各样的嵌入式电子产品。

实时时钟(RTC)就是一种在现代电子设备中应用非常普遍,可以帮助人们实时、准确的掌握时间的器件,如手机、PDA及一些智能仪表都提供了时钟显示。

我们本次课题的目标就是要基于SAMSUNGS3C2410AL-20芯片设计出一个实时时钟,编写C语言可以通过μVision4和超级终端软件调试,然后通过ULINK2仿真器下载至实验箱内进行观察。

在试验箱中的LED显示灯上显示出时间和日历。

另外,我们将要实现的系统分为三个模块实现,每个模块间相对独立而又相互联系。

第二节项目设计模块描述及流程图

1.模块描述:

我先进行了整个系统的规划,将整个系统分为两大模块:

第一,主函数模块;第二,功能实现模块(进行时间和闹钟的设定,以及其他一些显示功能);第三,闹钟功能实现模块。

2.总体设计流程图:

 

3、功能设计流程图

4、闹钟功能程序流程图

一、主函数模块

inti;

intmain(intargc,char**argv)

{

sys_init();//初始化系统

iic_init_8led();//初始化8个led灯

for(i=0;i<8;i++)

{

iic_write_8led(0x70,0x10+i,0xfc);//8个灯全0

}

for(i=0;i<3;i++)

{

jiao();//调用发声函数

delay(5000);

}

uart_printf("欢迎使用具有日历功能的电子时钟\n请根据提示按键操作\n0键:

显示时钟\n1键:

显示日期\nA键:

设置闹钟\nD键:

设置日期时间\n*键:

数码管闪烁/不闪烁的切换\n");

rtc_init();//实时时钟初始化

rtc_display1();//显示时间

while

(1){

rtc_init();

display();

}

}

 

二、功能实现模块

1、8个LED灯的按位对应显示程序

voiddisplay_Time(void)//对应到8个LED灯按位显示

{

iic_init_8led();//显示时间

iic_write_8led(0x70,0x10+0,num[g_nHour%16]);iic_write_8led(0x70,0x10+1,num[g_nHour/16]);

iic_write_8led(0x70,0x10+2,0x02);

iic_write_8led(0x70,0x10+3,num[g_nWeekday]);

iic_write_8led(0x70,0x10+4,num[g_nSec%16]);

iic_write_8led(0x70,0x10+5,num[g_nSec/16]);

iic_write_8led(0x70,0x10+6,num[g_nMin%16]);

iic_write_8led(0x70,0x10+7,num[g_nMin/16]);

}

voiddisplay_data(void)

{

iic_init_8led();//显示日期

iic_write_8led(0x70,0x10+0,num[g_nYear%4096%256%16]);//取个位

iic_write_8led(0x70,0x10+1,num[g_nYear/16%16]);//取十位

iic_write_8led(0x70,0x10+2,num[g_nYear/256%16]);//取百位

iic_write_8led(0x70,0x10+3,num[g_nYear/4096]);//取千位

iic_write_8led(0x70,0x10+4,num[g_nDate%16]);

iic_write_8led(0x70,0x10+5,num[g_nDate/16]);

iic_write_8led(0x70,0x10+6,num[g_nMonth%16]);

iic_write_8led(0x70,0x10+7,num[g_nMonth/16]);

}

2、获取系统时间

voidrtc_display1(void)

{inta;

INT32TnTmp;

rRTCCON=0x01;

ucChar=0;

st1=1;//代表正在显示时钟st1=2代表正在显示日期

while(ucChar>29||ucChar<=0)

{

iic_init_8led();

while

(1)

{

if(rBCDYEAR==0x99)//获取系统日期及时间

g_nYear=0x1999;

else

g_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;a<8;a++){

iic_write_8led(0x70,0x10+a,0x00);//8个灯熄灭

}

delay(1000);//延时1s

display_Time();//再显示

}else{

display_Time();//未按下不变

}

4、按键判断函数

voiddisplay(void)

{

if(ucChar==0x01){//判断是否按下0键

uart_printf("\n按键0,数码管显示时间:

\n");

rtc_display1();//显示时间函数

}elseif(ucChar==0x02){//判断是否按下1键

uart_printf("\n按键1,数码管显示日期:

\n");

rtc_display2();//显示日期函数

}elseif(ucChar==0x14){//判断是否按下D键

uart_printf("\n按下键D,进入日期设置,请先输入日期(格式年年年年月月日日)。

输入完成后按fun键确认。

\n");

setDate();//设置时间函数

}elseif(ucChar==0x1c){//判断是否按下*键

if(st3==1){//若按下*键,数码管闪烁显示

uart_printf("\n按下键*,数码管停止闪烁显示。

\n");

st3=0;

ss();//调用闪烁/不闪烁切换

}else{//再次按下*键,数码管停止闪烁

uart_printf("\n按下键*,数码管闪烁显示。

\n");

st3=1;

ss();

}

}elseif(ucChar==0x11){//判断是否按下A键

uart_printf("\n按下键A,设置闹钟。

请输入闹钟时间,按fun键确认。

\n");

isAlam=1;//已设置了闹钟

alam_jiao();//调用闹铃函数

}elseif(st1==1){//判断当前是否显示时间,调用显示时间函数

rtc_display1();

}elseif(st1==2){//判断当前是否显示日期,调用显示日期函数

rtc_display2();

}

}

5、时间及日期设置函数

voidsetDate(void)

{

inti,u;

ucChar=0;

for(u=0;u<8;u++){

iic_write_8led(0x70,0x10+u,0x00);//灯灭

}

i=0;

while

(1)

{

iic_init_8led();

while(g_nKeyPress--)

{keyboard_init();

g_nKeyPress=0;//按键值置0

while(g_nKeyPress==0);//空循环,等待有键按下

iic_read_keybd(0x70,0x1,&ucChar);if(i==8||i==17){//判断日期和时间输入完成

while

(1){

while(g_nKeyPress--){

keyboard_init();

g_nKeyPress=0;

while(g_nKeyPress==0);

iic_read_keybd(0x70,0x1,&ucChar);

ucChar=key_set(ucChar);

if(ucChar==0xff){//按下FUN键确认

if(i==8){

uart_printf("\n完成日期设置,继续设置时间(格式星期-时时分分秒秒)\n");

}else{

uart_printf("\n完成时间设置。

\n");

}

i++;

break;

}

}

if(i==9||i==18){//输入超出,跳出程序

break;

}

}

}

if(ucChar!

=0)//判断是否有键按下,并对应LED灯8位按位显示

{

ucChar=key_set(ucChar);

switch(i){

case0:

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nYear=ucChar*4096;//设置年

i++;

break;

case1:

iic_write_8led(0x70,0x10+5,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nYear=g_nYear+ucChar*256;

i++;

break;

case2:

iic_write_8led(0x70,0x10+6,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+5,num[g_nYear/256%16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nYear=g_nYear+ucChar*16;

i++;

break;

case3:

iic_write_8led(0x70,0x10+7,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+6,num[g_nYear/256%16]);

iic_write_8led(0x70,0x10+5,num[g_nYear/16%16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nYear=g_nYear+ucChar;

i++;

break;

case4:

iic_write_8led(0x70,0x10+0,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+7,num[g_nYear/256%16]);

iic_write_8led(0x70,0x10+6,num[g_nYear/16%16]);

iic_write_8led(0x70,0x10+5,num[g_nYear%4096%256%16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nMonth=ucChar*16;//设置月

i++;

break;

case5:

iic_write_8led(0x70,0x10+1,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+0,num[g_nYear/256%16]);

iic_write_8led(0x70,0x10+7,num[g_nYear/16%16]);

iic_write_8led(0x70,0x10+6,num[g_nYear%4096%256%16]);

iic_write_8led(0x70,0x10+5,num[g_nMonth/16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nMonth=g_nMonth+ucChar;

i++;

break;

case6:

iic_write_8led(0x70,0x10+2,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+1,num[g_nYear/256%16]);

iic_write_8led(0x70,0x10+0,num[g_nYear/16%16]);

iic_write_8led(0x70,0x10+7,num[g_nYear%4096%256%16]);

iic_write_8led(0x70,0x10+6,num[g_nMonth/16]);

iic_write_8led(0x70,0x10+5,num[g_nMonth%16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nDate=ucChar*16;//设置日

i++;

break;

case7:

iic_write_8led(0x70,0x10+3,num[g_nYear/4096]);

iic_write_8led(0x70,0x10+2,num[g_nYear/256%16]);

iic_write_8led(0x70,0x10+1,num[g_nYear/16%16]);

iic_write_8led(0x70,0x10+0,num[g_nYear%4096%256%16]);

iic_write_8led(0x70,0x10+7,num[g_nMonth/16]);

iic_write_8led(0x70,0x10+6,num[g_nMonth%16]);

iic_write_8led(0x70,0x10+5,num[g_nDate/16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nDate=g_nDate+ucChar;

i++;

break;

case9:

for(u=0;u<8;u++){

iic_write_8led(0x70,0x10+u,0x00);//8个灯灭

}

i++;

break;

case10:

iic_write_8led(0x70,0x10+5,num[ucChar]);

iic_write_8led(0x70,0x10+4,0x02);

g_nWeekday=ucChar;//设置星期

i++;

break;

case11:

iic_write_8led(0x70,0x10+6,num[g_nWeekday]);

iic_write_8led(0x70,0x10+5,0x02);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nHour=ucChar*16;//设置小时

i++;

break;

case12:

iic_write_8led(0x70,0x10+7,num[g_nWeekday]);

iic_write_8led(0x70,0x10+6,0x02);

iic_write_8led(0x70,0x10+5,num[g_nHour/16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nHour=g_nHour+ucChar;

i++;

break;

case13:

iic_write_8led(0x70,0x10+0,num[g_nWeekday]);

iic_write_8led(0x70,0x10+7,0x02);

iic_write_8led(0x70,0x10+6,num[g_nHour/16]);

iic_write_8led(0x70,0x10+5,num[g_nHour%16]);

iic_write_8led(0x70,0x10+4,num[ucChar]);

g_nMin=ucChar*16;//设置分钟

i++;

break;

case14:

iic_write_8led(0x70,0x10+1,num[g_nWeekday]);

iic_write_8led(0x70,0x10+0,0x02);

iic_write_8led(0x70,0x10+7,num[g_nHour/16]);

iic_write_8led(0x70,0x10+6,num[g_nHour%16]);

iic_write_8led(0x70,0x10+5,

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2