ARM课程设计——可调控万年历时钟

上传人:aa****6 文档编号:35531621 上传时间:2018-03-17 格式:PDF 页数:9 大小:78.31KB
返回 下载 相关 举报
ARM课程设计——可调控万年历时钟_第1页
第1页 / 共9页
ARM课程设计——可调控万年历时钟_第2页
第2页 / 共9页
ARM课程设计——可调控万年历时钟_第3页
第3页 / 共9页
ARM课程设计——可调控万年历时钟_第4页
第4页 / 共9页
ARM课程设计——可调控万年历时钟_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《ARM课程设计——可调控万年历时钟》由会员分享,可在线阅读,更多相关《ARM课程设计——可调控万年历时钟(9页珍藏版)》请在金锄头文库上搜索。

1、ARM 课程设计 可调控万年历时钟 1.初始化并运行 RTC,然后读取时间值通过串口向上位机发送,并把秒的值输 出到教学实验开发平台上的 LED1LED4 进行显示。 2.分析。 万年历显示时间包括年、 月、 日、 星期、 时、 分和秒, 利用 EasyARM.exe 仿真软件把结果发送到上位机上显示。 通过按键进行上述的显示调节, 其中月是 112,日是 131,星期是 17,时是 0023,分是 0059,秒是 0059。现在 时间显示 2009 年 5 月 11 日星期一 15:23:30。 3.程序 #include “config.h“ #include “stdio.h“ #inc

2、lude “math.h“ uint8 time4; /*按键 GPIO 口*/ #define key1 10; dly-) for (m=0; m 115200) return (0); if (set.datab 8) return (0); if (0 = set.stopb) | (set.stopb 2) return (0); if (set.parity 4) return (0); /* 设置串口波特率*/ U0LCR = 0x80; / DLAB=1 bak = (Fpclk 4) / baud; U0DLM = bak 8; U0DLL = bak /* 设置串口模式*/

3、 bak = set.datab - 5; if (2 = set.stopb) bak |= 0x04; if (0 != set.parity) set.parity = set.parity - 1; bak |= 0x08; bak |= set.parity 16) / 获取 年 PC_DispChar(0, SHOWTABLEbak / 1000); bak = bak % 1000; PC_DispChar(1, SHOWTABLEbak / 100); bak = bak % 100; PC_DispChar(2, SHOWTABLEbak / 10); PC_DispChar

4、(3, SHOWTABLEbak % 10); bak = (datas 8) / 获取 月 PC_DispChar(4, SHOWTABLEbak / 10); PC_DispChar(5, SHOWTABLEbak % 10); bak = datas / 获取 日 PC_DispChar(6, SHOWTABLEbak / 10); PC_DispChar(7, SHOWTABLEbak % 10); bak = (times 24) / 获取 星期 PC_DispChar(8, SHOWTABLEbak); bak = (times 16) / 获取 小时 PC_DispChar(9,

5、 SHOWTABLEbak / 10); PC_DispChar(10, SHOWTABLEbak % 10); bak = (times 8) / 获取 分钟 PC_DispChar(11, SHOWTABLEbak / 10); PC_DispChar(12, SHOWTABLEbak % 10); bak = times / 获取 秒钟 PC_DispChar(13, SHOWTABLEbak / 10); PC_DispChar(14, SHOWTABLEbak % 10); /* * 函数名称 :RTCInit() * 函数功能 :初始化实时时钟 * 入口参数 :无 * 出口参数 :

6、无 */ void RTCInit (void) PREINT = Fpclk / 32768 - 1; / 设置基准时钟分频器 PREFRAC = Fpclk - (Fpclk / 32768) * 32768; CCR = 0x00; / 禁止时间计数器 YEAR = 2009; /设置时钟初值 MONTH = 5; DOM = 11; DOW = 1; HOUR = 15; MIN = 23; SEC = 30; CIIR = 0x01; / 设置秒值的增量产生一次中断 ILR = 0x03; / 清除 RTC 增量和报警中断标志 CCR = 0x01; / 启动 RTC /* * 函数

7、名称 :IRQ_UART0() * 函数功能 :串口 0 接收中断服务程序 * 入口参数 :无 * 出口参数 :无 */ void _irq IRQ_UART0 (void) uint8 i; if (U0IIR / 设置接收到新的数据标志 for (i=0; i11) MONTH=1; else MONTH=MONTH+1; time4,5=MONTH; loop2: while (IO0PIN DelayNS(1); if (IO0PIN / 等待按键恢复 while (IO0PIN if (IO0PIN else DOM=DOM+1; time6,7=DOM; loop3: while

8、(IO0PIN DelayNS(1); if (IO0PIN / 等待按键恢复 while (IO0PIN if (IO0PIN else DOW=DOW+1; time8=DOW; loop4: while (IO0PIN DelayNS(2); if (IO0PIN / 等待按键恢复 while (IO0PIN if (IO0PIN else HOUR=HOUR+1; time9,10=HOUR; loop5: while (IO0PIN DelayNS(2); if (IO0PIN / 等待按键恢复 while (IO0PIN if (IO0PIN else MIN=MIN+1; tim

9、e11,12=MIN; loop6: while (IO0PIN DelayNS(2); if (IO0PIN / 等待按键恢复 /* 函数名称 : main() * 函数功能 :读取实时时钟的值,通过串口发送出去。 */ int main (void) uint8 i; UARTMODE uart0_set; PINSEL0 = 0x00000005; / 连接 IO 到串口 UART0 PINSEL1 = 0x00000000; PINSEL2 = PINSEL2 / P125:16连接 GPIO /PINSEL1 = 0x00005500; / 设置 SPI 管脚连接 /PINSEL2

10、= 0x00000000; IODIR = HC595_CS; uart0_set.datab = 8; uart0_set.stopb = 1; uart0_set.parity = 0; UART0_Init(115200, uart0_set); U0FCR = 0xc1; / 使能 FIFO,并设置触发点为 8 字节 U0IER = 0x01; / 允许 RBR 中断,即接收中断 MSPI_Init(); RTCInit(); IRQEnable(); / 使能 IRQ 中断 /* 使能 UART0 中断 */ VICIntSelect = 0x00000000; / 设置所有的通道为

11、 IRQ 中断 VICVectCntl0 = 0x20 | 0x06; / UART0 分配到 IRQ slot0, 即最高 优先级 VICVectAddr0 = (uint32)IRQ_UART0; / 设置 UART0 向量地址 VICIntEnable = 1 0x06; / 使能 UART0 中断 while (1) while (0 = (ILR / 等待 RTC 增量中断 ILR = 0x01; for(i=1; i8; i+) if(DOW=i) rcv_data = MSPI_SendData(DISP_TABi); / 发送显示数据 / 清除中断标志 SET_TIME(); SendTimeRtc(); return (0);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号