




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于LPC2103 RTC的定时铃声控制器设计与实现基本功能要求和实现方法:(1) 用LPC2103实时时钟 RTC作为日期、时间定时器,(2) 根据定时器时间,每天8:00、12:00、 2:30、5:30四个时间点,分别输出持续时间为1分钟的500hz方波信号(停3秒,响2秒);(3) 设置三个按键,分别调节设置RTC的小时、分钟和秒数值;(4) 铃声方波信号可以用GPIO/LED显示;(5) 频率信号产生可用定时器来实现;(6) 时间数值可通过串口打印到电脑超级终端窗口上;详细设计步骤:(1)定义数据结构数据类型: typedef struct _DAY_ int year; /20002099char mon; /112char day; /131char week;/17 t_day; typedef struct _TIME_ char hor; /023char min; /059char sec; /059 t_time;(2)编写简单串行通信函数void uart_init()和void uart_puts(char s),向LPC2103串行口打印字符串,通信格式设为9600bps/8b DATA/1b STOP/无效验位/无硬件流控制; (3)编写LPC2103实时时钟控制器(RTC)读取函数;入口参数:时间、日期结构指针; 返回值:通过日期时间结构指针返回RTC记录的日期时间(4)把日期时间整数数值用 sprintf函数转化为字符串,并通过uart_puts()打印到电脑终端上,测试RTC时间是否读取正确。(5)编写LPC2103 实时时钟控制器(RTC)设置函数,通过GPIO输入按键信息。入口参数:已初始化了得日期时间结构,把结构指针传递给函数,使实时时钟记录值设置为给定值。(6)用LPC2103定时器产生500hz方波信号,用事件匹配方法产生; 32计数器与0相等时输出高电平; 32计数器与0x8000 0000相等时输出低电平,循环往复即可。(7)响2秒停3秒用允许、禁止计数来实现,时间长短值直接用实时时钟秒数值来设定。以上每一个独立功能的实现都有参考例程,项目的工作就是整合各个功能,使之按我们的要求来协调配合工作。请详细阅读LPC2103实验教程中有关部件文档和功能部件的实验参考程序。整合出一个完整应用程序,功能由少到多逐步添加。最终程序如下。已经测试过。可以通过课程设计哦。江西理工大学的有福了。#include config.hvoid Timer1Init(void)T1TCR = 0x02; /* 定时器0复位 */T1PR = 0; /* 不设时钟分频 */PWM1CON= 0x0C; /* 使能PWM输出 */T1MCR = 0x02; /* 设置T0MR0匹配后复位T0TC */T1MR0 = Fpclk / 500; /* 设置PWM输出的周期 */T1MR2 = (Fpclk / 500)/2; /* 设置PWM1.2输出占空比为50 */typedef struct UartModeuint8 datab; /* 字长度 5/6/7/8 */ uint8 stopb; /* 停止位 1/2 */uint8 parity; /* 奇偶校验 */ UARTMODE;# define UART_BPS 9600 /* 串口通信波特率 */void UARTInit (void) uint16 uiFdiv; PINSEL0 = (PINSEL0 & 0xFFFFFFF0) | 0x00000005; /* 串口引脚设置 */ U0LCR = 0x83; /* 允许设置波特率 */ uiFdiv = (Fpclk / 16) / UART_BPS; /* 设置波特率 */ U0DLM = uiFdiv / 256; U0DLL = uiFdiv % 256; U0LCR = 0x03; /* 锁定波特率 */ U0FCR = 0x01; /* FIFO使能 */void UART0SendByte (uint8 uiDat) U0THR = uiDat; /* 写入数据 */ while (U0LSR & 0x40) = 0); /* 等待数据发送完毕 */void UART0SendStr(uint8 *p) while(*p) U0THR = *(p+); /* 写入数据 */ while (U0LSR & 0x40) = 0); /* 等待数据发送完毕 */ struct DATA uint16 year; uint8 mon; uint8 day; uint8 week; ;struct TIME uint8 hor; uint8 min; uint8 sec; ;uint8 Data = 2011.01.04 3 10.23.30 r;unsigned char *RTC_DataGet(struct DATA *d, struct TIME *t)uint8 *p;uint32 uiTimes = 0;uint32 uiDates = 0;uiTimes = CTIME0;uiDates = CTIME1;p= Data;*(p+) = *;d-year = (uiDates 16)&0xfff;*(p+) = (d-year/1000)+0;*(p+) = (d-year%1000)/100+0;*(p+) = (d-year%100)/10+0;*(p+) = d-year%10+0;*(p+) = .;d-mon = (uiDates 8)&0x0f;*(p+) = d-mon/10 + 0;*(p+) = d-mon%10 + 0;*(p+) = .;d-day = uiDates&0x1f;*(p+) = d-day/10 + 0;*(p+) = d-day%10 + 0;*(p+) = ;d-week = (uiTimes 24)&0x07;*(p+) = d-week + 0;*(p+) = ;t-hor = (uiTimes 16)&0x1f;*(p+) = t-hor/10 + 0;*(p+) = t-hor%10 + 0;*(p+) = .;t-min = (uiTimes 8)&0x3f;*(p+) = t-min/10 + 0;*(p+) = t-min%10 + 0;*(p+) = .;t-sec = uiTimes&0x3f;*(p+) = t-sec/10 + 0;*(p+) = t-sec%10 + 0;*(p+) = *;*(p+) = ;p = Data;return(p);void RTCInit (uint32 hour,uint32 min,uint32 sec)PREINT = Fpclk / 32768 - 1; /* 设置基准时钟分频器 */PREFRAC = Fpclk - (Fpclk / 32768) * 32768; CCR = 0x00; /* 禁止时间计数器 */ YEAR = 2011; /设置具体的时间日期MONTH = 06;DOM = 07;DOW = 5;HOUR = hour;MIN = min;SEC = sec;CIIR = 0x01; /* 设置秒值的增量产生1次中断 */CCR = 0x01; /* 启动RTC */# define LED1 1 0; uiDly-) for(i = 0; i 50000; i+); void init_GPIO(void) PINSEL1 = PINSEL1 & (0x03 16) & 0X1F; /获取当前时间的 小时值 min = (CTIME08) & 0X3F; /获取当前时间的 分钟值 sec = CTIME0 & 0X3F; /获取当前时间的 秒值 if(hour=8)|(hour=12)&(min=0) /判断是否是8点整或12点整 for(i=0;i(5*i+2)&(sec(5*i+4) /判断是否在区间 24 79 1214 这些喇叭响的区间。 T1TCR=0X01; /使能定时器 else T1TCR= 0X00; /不满足的时候,关闭定时器 else T1TCR=0X00; if( (hour = 12) & (min=30) ) /判断是否是12点30分 for(i=0;i(5*i+2)&(sec(5*i+4) /判断是否在区间 24 79 1214 这些喇叭响的区间。 T1TCR=0X01; /使能定时器 else T1TCR= 0X00; /不满足的时候,关闭定时器 else T1TCR=0X00; if( (hour = 5) & (min=30) ) /判断是否是5点30分 for(i=0;i(5*i+2)&(sec(5*i+4) /判断是否在区间 24 79 1214 这些喇叭响的区间。 T1TCR=0X01; /使能定时器 else T1TCR= 0X00; /不满足的时候,关闭定时器 else T1TCR=0X00; switch(IO0PIN&(0X0714) DelayNS(10); case 0x0000c000 : /key 1 press CCR=0X00; if(sec59) sec+; /符合条件秒钟加以 else sec=0; /秒钟为59时回到一 while(IO0PIN & (1 16) = 0); /等待按键跳起 RTCInit(hour,min,sec); /重新初始化RTC flag1=1; /标志位置一 break; case 0x00018000 : /key 2 press CCR=0X00; if(min59) min+; /符合条件,分钟加一 else min=0; /当分钟为59时,回到0 while(IO0PIN & (1 14) = 0); /等待按键跳起 RTCInit(hour,min,sec); /重新初始化RTC flag1=1; /标志位置一 break; case 0x00014000 : /key 3 press CCR=0X00; if(hour24) /如果满足条件小时加一 hour+; else hour=0; /如果小时到24,回到0 while(IO0PIN & (1 year = (uiDates 16)&0xfff;*(p+) = (d-year/1000)+0;*(p+) = (d-year%1000)/100+0;*(p+) = (d-year%100)/10+0;*(p+) = d-year%10+0;*(p+) = .;d-mon = (uiDates 8)&0x0f;*(p+) = d-mon/10 + 0;*(p+) = d-mon%10 + 0;*(p+) = .;d-day = uiDates&0x1f;*(p+) = d-day/10 + 0;*(p+) = d-day%10 + 0;*(p+) = ;d-week = (uiTimes 24)&0x07;*(p+) = d-week + 0;*(p+) = ;t-hor = (uiTimes 16)&0x1f;*(p+) = t-hor/10 + 0;*(p+) = t-hor%10 + 0;*(p+) = .;t-min = (uiTimes 8)&0x3f;*(p+) = t-min/10 + 0;*(p+) = t-min%10 + 0;*(p+) = .;t-sec = uiTimes&0x3f;*(p+) = t-sec/10 + 0;*(p+) = t-sec%10 + 0;*(p+) = *;*(p+) = ;p = Data;return(p);void RTCInit (uint32 hour,uint32 min,uint32 sec)PREINT = Fpclk / 32768 - 1; /* 设置基准时钟分频器 */PREFRAC = Fpclk - (Fpclk / 32768) * 32768; CCR = 0x00; /* 禁止时间计数器 */ YEAR = 2011; /设置具体的时间日期MONTH = 06;DOM = 07;DOW = 5;HOUR = hour;MIN = min;SEC = sec;CIIR = 0x01; /* 设置秒值的增量产生1次中断 */CCR = 0x01; /* 启动RTC */# define LED1 1 0; uiDly-) for(i = 0; i 50000; i+); void Ring(uint32 sec) int i,flag2=0;for(i=0;i(5*i+2)&(sec(5*i+4) /判断是否在区间 24 79 1214 这些喇叭响的区间。 flag2=1;break; /使能定时器 /不满足的时候,关闭定时器 if(flag2)T0TCR = 0X01; else T0TCR = 0X00;void init_GPIO(void) PINSEL1 = (PINSEL1 & (0X03)|0X02; PINSEL1 = PINSEL1 & (0x03 16) & 0X1F; /获取当前时间的 小时值 min = (CTIME08) & 0X3F; /获取当前时间的 分钟值 sec = CTIME0 & 0X3F; /获取当前时间的 秒值 switch(hour) case 8: if(min=0)Ring(sec);else T0TCR = 0X00; break; case 12: if(min=0|min=30) Ring(sec);else T0TCR = 0X00;break; case 5: if(min=30) Ring(sec);else T0TCR = 0X00;break; default : T0TCR = 0X00; break; switch(IO0PIN&(0X0714) DelayNS(10); /* case 0x0000c000 : /key 1 press CCR=0X00; if(sec59) sec+; /符合条件秒钟加以 else sec=0; /秒钟为59时回到一 while(IO0PIN & (1 16)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年小学数学薯条题目及答案
- 美容师中级理论知识试卷及答案
- 2025年淮南市第四人民医院补充招聘劳务外聘护理、康复岗考试参考试题及答案解析
- 2025年红鞋海龟汤题目及答案
- 2025年亳州市涡阳县县直公立医院和乡镇卫生院招聘147人备考练习题库及答案解析
- 2025年数控车床考试题及答案
- 2025年创业培训考试题及答案
- 潞安培训考试题及答案
- 2025年太空教师考试题及答案
- 2025郑州小升初试卷及答案
- 中医护理进修脑病科汇报
- 养老机构入住护理、风险评估表、计划表、记录、告知书等健康档案护理记录模板
- 汽车传感器的原理与应用课件
- 电梯每日巡视检查表
- 《健康评估技术》课件-7.《发绀》
- 《分析化学总复习》课件
- 《生物试卷分析》课件
- 皮肤科常见疾病瘙痒症护理的课件
- 2023年湖北黄石新港(物流)工业园区总工会协理员招考聘用笔试历年难易错点考题荟萃附带答案详解
- 电力电子技术(第3版)PPT全套完整教学课件
- 招投标结果申诉函
评论
0/150
提交评论