预览加载中,请您耐心等待几秒...
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

课题设计 设计(论文)题目:数字时钟系统设计 学院名称: 专业: 班级: 姓名: 学号; 指导教师: 发放日期:2012年12月11日 课程设计报告 1课题名称数字时钟系统设计 2摘要 1.基本要求 利用LPC2148ARM7嵌入式系统实验箱上的按键与UART串行通讯接口设计数字时钟系统,要求如下: 使用LPC2148内部的RTC模块建立数字时钟系统的基础,初始时间为2012年12月1日0时0分0秒; 串口调试助手显示:每隔一秒在串口调试助手上显示当前时间,包括年、月、日、星期、小时、分、秒; 在满足以上功能描述的前提下,可使用定时器模块替代RTC模块(注意星期、闰年的情况考虑)。 2.发挥部分 (1)加入三个按键,可以设计时间信息,第一个按键选择年、月、日、星期、小时、分、秒;第二个按键循环设置;第三个按键在设置完成后启动时钟。 (2)利用数码管代替串口调试助手的显示功能,数码管上显示分、秒信息即可。 3.设计方案描述: LPC2148系统微控制器内部集成一个功能完整的实时时钟(RTC)模块。RTC提供一套计数器,在系统工作时对时间进行测量。RTC消耗的功率非常低,这使其适合于由电池供电的,CPU不连续工作的系统。由于LPC2148微控制器的RTC模块没有独立的时钟源,使用的时钟频率是对Fpclk分频得到,输入到时钟的发生器的时钟频率是32.768KHZ。时间计数器与报警寄存器不断进行比较,当匹配时,可以产生报警中断。此外,时间计数器的增加也可以产生中断信号。 RTC模块中主要的寄存器: ILR中断位置寄存器 位0:为1时计数器增量中断模块产生中断,该位写入1时清除中断。 位1:为1时报警中断寄存器产生中断,该位写入1时清除中断。 计数器增量中断寄存器: 位0:为1时秒值的增加产生一次中断。 时钟控制寄存器CCR: 位0:时钟使能,该位为1时,时间计数器使能。为0是时间计数器被禁止。 主程序设计 #include<NXP\iolpc2124.h> #include<stdio.h> //系统时钟宏定义 #defineFOSC12000000//XTALfrequencyinHz #definePCLKFOSC/4//pclkmustalwaysbeXTALFREQ/4? #definekey_10x01<<13 #defineLED10x01<<16 #definekey_20x01<<12 #definekey_30x01<<11 //函数声明 voidsendByte(charbyte); voiddelayn(unsignedlongn); voidsendStr(char*Str); intputchar(intc); charbuf[]; intkey_val1=0; intkey_val2=0; voidRTC_Init(void) { PREINT=(int)(PCLK/32768)-1;//预分频整数寄存器 PREFRAC=PCLK-(PREINT)*32768;//预分频小数寄存器 YEAR=2012;//初始化时间 MONTH=3; DOM=7; DOW=3; HOUR=17; MIN=15; SEC=0; CIIR=0X01;//一秒产生一个中断 CCR=0X01;//启动RTC } voidUART_Init(void) { //配置连接UART1的IO口 //PINSEL0_bit.P0_8=1;PINSEL0_bit.P0_9=1; //PINSEL0=(PINSEL0&(~0X0F))|(0X05<<16); PINSEL0=0x00050000; //配置UART1的寄存器 U1LCR|=(1<<7);//写入寄存器使能 U1LCR|=3;//长度选择,8位数据 U1LCR&=(~(1<<3));//没有校验位 U1LCR&=(~(1<<2));//一个停止位 //波特率设定 U1DLL=PCLK/(4800*16);//低八位 U1DLM=(PCLK/(4800*16))>>8;//高八位 U1LCR&=(~(1<<7));//禁止写入 } voidLogo(void) { sendStr("___________________________\r\n"); sendStr("|_____||______|/________\\\r\n"); sendStr("||||||||\r\n"); sendStr("||_____||||||\r\n"); sendStr("|______/||||\r\n"); sendStr("||\\\\||||\r\n"); sendStr("||\\\\||||_________\r\n"); sendStr(