嵌入式课程设计报告具有日历功能电子时钟
嵌入式系统开发课程设计专周报告
题目:具有日历功能的电子时钟
系别及专业:计算机工程系计算机应用技术
班级:10511
学生姓名:权胜(14)王希(05)严家强(23)指导老师:宋国明
完成时间:2012-12-24/2012-12-28
课程设计(报告)
Ⅰ、课程设计题目:具有日历功能的电子时钟
Ⅱ、课程设计步骤及内容
一、课程设计目标
1、培养综合运用知识和独立开展实践创新的能力;
2、培养学生将理论知识与实际应用结合在一起;
3、培养学生的自我学习能力和解决问题的能力;
4、培养学生的协作意识和团队合作能力;
5、培养学生的总结经验的能力。
二、研究方法及手段应用
1、问题解决模块化,将任务分成若干模块,分模块调试和完成任务;
2、查阅网上的相关素材,查阅相关论文资料,进行比较、研究;
3、在独立思考的基础上,请教老师,和同组同学讨论、学习;
4、反复调试、总结经验、排除差错;
5、连接PC和EDUKIT-III ARM嵌入式开发实验箱,完成整个实验环境搭建;
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
目录
前言 (6)
第一章系统设计 (6)
第一节课题目标及总体方案 (6)
第二节项目设计模块描述及流程图 (6)
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)
第二章结果与显示 (23)
结果显示 (23)
心得体会 (23)
参考文献 (24)
前言
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。
实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。
关键字:嵌入式系统、实时时钟RTC
第一章系统设计
第一节课题目标及总体方案
随着嵌入式技术的发展,我们身边充斥着各类各样的嵌入式电子产品。实时时钟(RTC)就是一种在现代电子设备中应用非常普遍,可以帮助人们实时、准确的掌握时间的器件,如手机、PDA及一些智能仪表都提供了时钟显示。
我们本次课题的目标就是要基于SAMSUNG S3C2410AL-20芯片设计出一个实时时钟,编写C语言可以通过μVision4和超级终端软件调试,然后通过ULINK2仿真器下载至实验箱内进行观察。在试验箱中的LED显示灯上显示出时间和日历。另外,我们将要实现的系统分为三个模块实现,每个模块间相对独立而又相互联系。
第二节项目设计模块描述及流程图
1.模块描述:我先进行了整个系统的规划,将整个系统分为两大模块:第一,主函数模块;第二,功能实现模块(进行时间和闹钟的设定,以及其他一些显示功能);第三,闹钟功能实现模块。
2.总体设计流程图:
3、功能设计流程图
4、闹钟功能程序流程图
一、主函数模块
int i;
int main(int argc,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灯的按位对应显示程序
void display_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]);
}
void display_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、获取系统时间
void rtc_display1(void)
{ int a;
INT32T nTmp;
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;