ARM课设数字钟的设计报告.docx
- 文档编号:17453770
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:22
- 大小:835.24KB
ARM课设数字钟的设计报告.docx
《ARM课设数字钟的设计报告.docx》由会员分享,可在线阅读,更多相关《ARM课设数字钟的设计报告.docx(22页珍藏版)》请在冰点文库上搜索。
ARM课设数字钟的设计报告
ARM课设----数字钟的设计--报告
《ARM嵌入式系统》
课程设计报告
题目:
数字钟的设计
院(系):
信息科学与工程学院
专业班级:
通信工程1103
学生姓名:
学号:
指导教师:
2014年5月26日至2014年6月6日
华中科技大学武昌分校制
嵌入式系统课程设计任务书
一、设计(调查报告/论文)题目
课题:
数字钟的设计
二、设计(调查报告/论文)主要内容
掌握定时器的使用方法,利用串口、数码管、点阵或者液晶屏进行日期、时间的实时显示,并可以根据需要进行调整。
三、原始资料
开发板的原理图,课设讲义。
四、要求的设计(调查/论文)成果
●使用开发板或实验箱实现一个数字钟;
●根据原理图完成实验方案的设计;
●实时显示日期、时间。
可以利用串口发送到上位机显示或利用数码管、点阵、液晶屏显示;
●具备时间调整功能;
●在实验完成的基础上完成课程设计报告的撰写,按照模板的格式书写,要求有软件流程图和详细的调试过程。
五、进程安排
时间
内容
地点
15周周一上午
课题讲解、选题
11-602
15周周一下午
软硬件准备、清理
实验楼402,403
15周周二至周三
课题分析、收集资料、完成设计方案
实验楼402,403,图书馆
15周周四至周五
详细设计,编写代码
实验楼402,403
16周周一至周三
系统调试
实验楼402,403
16周周四
成果验收
实验楼402,403
16周周五
整理文档,撰写提交课设报告
实验楼402,403
六、主要参考资料
见下发的课程设计资料
指导教师(签名):
20年月日
一、设计原理及基本方案…………………………………………………………5
1、设计原理……………………………………………………………………5
2、基本方案………………………………………………………………………8
二、软件设计………………………………………………………………………8
1、基本思路………………………………………………………………………8
2、软件流程图……………………………………………………………………8
3、主要代码说明…………………………………………………………………9
三、软件模块………………………………………………………………………9
1、RTC时钟模块………………………………………………………………10
2、LCD驱动模块………………………………………………………………10
3、LCD显示模块………………………………………………………………11
4、字模模块…………………………………………………………………11
5、串口模块……………………………………………………………………12
四、工程结构及软件流程图……………………………………………………12
五、数字钟课设结果图………………………………………………………14
六、课设问题……………………………………………………………………14
七、总结…………………………………………………………………………15
八、参考文献……………………………………………………………………15
九、附录………………………………………………………………………15
一、设计原理及基本方案
1、设计原理
(1)实时时钟RTC模块
S3C2410A实时时钟单元是处理器集成的片内外设,由开发板上的后备电池供电,可以在系统电源关闭的情况下运行,RTC发送8位BCD码数据到CPU。
传送的数据包括秒、分、时、星期、日期、月份和年份。
RTC单元时钟源频率由外部32.768kHz晶振提供,可以实现闹钟(报警)功能及时间片中断、置0计数功能。
如图1-1。
图1-1RTC框图
RTC最重要的功能就是显示时间,是通过读/写寄存器实现的。
要显示秒、分、时、日期、月、年,CPU必须读取存于BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON与BCDYEAR寄存器中得值。
时间的设置也是通过以上的寄存器实现的,即以上寄存器是可读写的。
(2)RTC特殊功能寄存器
所有RTC寄存器都是字节型的,必须使用字节型访问指令(STRB、LDRB)或者字符型指令访问。
在小端模式和大端模式中所采用的地址不同,这里采用小端模式的地址。
①时钟BCD数据寄存器
时钟BCD数据寄存器用于保存RTC的实时数据,包括BCDSEC、BCDMIN、BCDHOUR、BCDDATE、BCDDAY、BCDMON和BCDYEAR等7个寄存器,如表1-1所列。
表1-1时钟数据寄存器
寄存器
地址
读写操作
描述
复位值
BCDSEC
0x57000070
读/写
BCD秒数据寄存器
未定义
BCDMIN
0x57000074
读/写
BCD分数据寄存器
未定义
BCDHOUR
0x57000078
读/写
BCD时数据寄存器
未定义
BCDDATE
0x5700007C
读/写
BCD日数据寄存器
未定义
BCDDAY
0x57000080
读/写
BCD星期数据寄存器
未定义
BCDMON
0x57000084
读/写
BCD月数据寄存器
未定义
BCDYEAR
0x57000088
读/写
BCD年数据寄存器
未定义
BCDSEC用于保存报警的秒数据,其中的位[6:
0]SECDATA保存报警秒数据的BCD码,位[6:
4]取值0-5,位[3:
0]取值09。
BCDMIN用于保存报警的分数据,其中的位[6:
0]MINDATA保存报警分数据的BCD码,位[6:
4]取值0-5,位[3:
0]取值0-9。
BCDHOUR用于保存报警的时数据,其中的位[5:
0]HOURDATE保存报警时数据的BCD码,位[5:
4]取值0-2,位[3:
0]取值0-9。
BCDDATE用于保存报警的日数据,其中的位[5:
0]DATEDATA保存报警日数据的BCD码,取值0-28、29、30、31,位[5:
4]取值0-3,位[3:
0]取值0-9。
BCDDAY用于保存报警的星期数据,其中的位[2:
0]DAYDATA保存报警星期数据的BCD码,取值1-7。
BCDMON用于保存报警的月数据,其中的位[4:
0]MONDATA保存报警月数据的BCD码,位[4]取值0-1,位[3:
0]取值0-9。
BCDYEAR用于保存报警的年数据,其中的位[7:
0]YEARDATA保存报警年数据的BCD码,取值00-99。
②实时时钟控制寄存器
实时时钟控制寄存器RTCCON如表1-2所列,共有四位。
表1-2实时时钟控制寄存器
寄存器
地址
读写操作
描述
复位值
RTCCON
0x57000040
读/写
RTC控制寄存器
0x0
各位定义如下:
[3]CLKRST:
RTC时钟计数器复位。
0=不复位;1=复位。
[2]CNTSEL:
BCD计数器选择。
0=合并BCD计数器;1=保留(即分离BCD计数器)。
[1]CLKSEL:
BCD时钟选择。
0=采用XTAL的1/215作为时钟;1=保留(XTAL时钟仪用于测试)。
[0]RTCEN:
RTC控制使能。
0=禁止;1=使能。
RTCEN控制BCD寄存器的读/写使能,CLKSEL、CNTSEL和CLKRST用于测试。
RTCEN控制着CPU和RTC的所有接口,为了使能数据可读/写,在系统复位后RTCEN应该置1。
(3)串口通信模块
S3C2410A串行通信单元UART提供2个独立的异步串行通信口,皆可工作于中断和DMA模式。
最高波特率达115200b/s。
每个UART单元包含一个16字节FIFO,用于数据接收和发送。
此外,每个UART模块还包含可编程波特率、红外发送/接收、1个或2个停止位、5/6/7/8位数据宽度和奇偶校验。
通过初始化好串口,与RTC进行通信,来设置RTC当前时间及报警时间。
(4)液晶显示LCD模块
S3C2410A处理器集成了LCD控制器,支持4位单扫描、4位双扫描和8位单扫描工作方式。
处理器使用内部RAM区作为显示缓存,并支持屏幕水平和垂直滚动显示。
数据的传送采用DMA(直接内存访问)方式,以达到最小延迟。
根据实际硬件水平和垂直像素点数、传送数据位数、时间线和帧速率方式等进行编程,以支持多种类型的显示屏。
LCD控制器主要液晶屏显示数据的传送、时钟和各种信号的产生与控制功能。
2、基本方案
本课设电子时钟的设计主要是将RTC模块中的时间传到LCD上进行实时显示;此外,通过串口与PC机通信,设置RTC模块中当前时间及报警时间,其结构框图如图1-2所示:
PC
串口
RTC模块
LCD显示
图1-2整体结构框图
二、软件设计
1、基本思路
(1)读写RTC模块
S3C2410A内部集成了RTC模块,通过读取RTC模块中寄存器BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDDATE、BCDMON和BCDYEAR的值得到当前的相应的时间值。
还可以往这些寄存器里写值以设置当前的时间值。
(2)串口通信UART模块
采用S3C44B0X的UART模块,利用PC机进行当前时钟时间和时钟报警时间的设置。
设置时间时S3C2410A发送新的时间值到BCDYEAR、BCDMON、BCDDAY、BCDHOUR、BCDMIN、BCDSEC修改当前时间。
(3)液晶屏LCD640*480显示设计
使用液晶屏显示最基本的是像素控制数据的使用。
像素控制数据的存放与传送形式决定了显示的效果,图形显示可以直接使用像素控制函数实现,把像素控制数据按一定形式存入即可实现字符显示。
本次课设通过调用字符显示函数,将读取的实时时钟送到LCD上显示。
2、软件流程图
本次课设程序设计基于S3C2410A嵌入式开发平台,并结合PC的超级终端完成RTC模块的初始化、时间显示(显示于超级终端)、时间设置、重置测试、报警测试等功能。
其程序开发流程如图2-1所示。
图2-1软件流程图
3、主要代码说明
各函数功能如下:
Rtc_Init():
RTC模块初始化函数。
该函数主要实现对BCD数据初始化,当其他函数读取初始化时间时,可以调用此函数。
Rtc_TineSet():
时间设置功能函数。
该函数调用Uart_GetIntNum()函数从超级终端读入整型数字,由用户完成对当前时间的修改。
RndRst_Rtc():
重置测试功能函数。
该函数通过对Rtc_TimeSet()函数的调用完成用户当前时间设置,然后通过修改RTCRST寄存器,实现重置边界的修改,进而通过对Uart_Printf()函数的调用,显示输出时间。
用户可以观察重置后的时间,来测试重置功能。
Test_Rtc_Alarm():
报警测试功能函数。
该函数完成RTC初始化,通过清除RTC模块的中断屏蔽位,产生报警,然后再设置中断屏蔽位,关闭中断。
Test_Rtc_Tick():
时钟滴答测试功能函数。
通过寄存器RTICNT设置时钟滴答周期,再通过调用Uart_Printf()输出时钟滴答具体值。
报警中断开与时钟滴答完成相应中断状态位和中断挂起位开中断的功能。
相应的功能可以查看S3C2410A的中断模块。
Display_Rtc():
显示时间功能函数。
三、软件模块
在本次软件设计中,采用C语言模块化的设计思想,分别编写RTC时钟模块;LCD驱动模块;LCD显示模块;UART模块;字模模块;延时模块;LED模块;组合各个模块功能设计实现数字时钟。
1、RTC时钟模块
RTC最重要的功能就是显示时间,RTC模块能够在系统断电的情况下由后备电池供电继续工作,它能将8位数据转换为BCD码的格式传送给CPU。
这些数据包括秒、分、时、日期、星期、月、年。
RTC模块需要一个外部晶振提供32.768kHz的频率才能工作,它也能完成报警功能。
通过CPU读取存于BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON与BCDYEAR寄存器中的值来实现显示时间。
2、LCD驱动模块
实现LCD相关寄存器的配置。
包括LCD_Init和LCD_Refresh两个功能函数。
定义全局数组LCDBufferII2[480][640],实现像素点的描绘。
函数编写在LCD640.c文件中,每个函数封装在LCD640.h中供外部调用。
3、LCD显示模块
该模块包括汉字显示程序,数字显示程序;实现在LCD上的显示功能。
4、字模模块
字模就是对汉字,数字,图像等需要显示的东西进行编码。
通过取模软件对需要显示的汉字和数字进行取模,因为在LCD显示的汉字和数字的字模。
程序中分别对‘刘’‘奇’‘数’‘字’‘时’‘钟’‘年’‘月’‘日’‘1’‘2’‘3’‘4’‘5’‘6’‘7’‘8’‘9’‘0’‘:
’进行了取模编码。
5、串口模块
通过超级终端打印出实时时钟的时间,以及报警提示信息等等。
4、工程结构及软件流程图
工程设计图
软件程序流程图:
LCD初始化
中断初始化
在LCD上显示背景和汉字
RTC报警
RTC报警中断服务
RTC显示时间
程序结束
报警
五、数字钟课设结果图
LCD显示结果:
6、课设问题
1、如何查看串口信息?
解决:
在计算机中打开超级终端并设置好参数后,就能显示电子钟信息,设置参数如下图
2如何查看各个模块的具体信息
解决:
可以再主程序中找到调用的模块,鼠标右键后有选项能直接进入模块
七、总结
在本次课程设计中使用的是32位ARM处理器。
此次设计是基于嵌入式的数字时钟的制作,将理论知识和工程实践应用相结合在一起,这使我们深刻了解了理论知识与应用实践的相关联系,加大了对理论知识的重要性的认识和应用实践的重要性。
也使我们明白了仅仅知道课本上的理论知识是远远不够的,还需要通过大量的查阅相关资料并通过实际的亲自动手实践才能得到真正的有用的知识。
这次的数字时钟设计主要应用的就是实时时钟和LCD以及串口和中断等功能,在课设中我遇到了许多困难,但在老师和同学的帮助下一一解决,最后完成课设要求,在次过程中我更加深刻的学习了ARM相关的理论知识,以及一些常用的中断的设计方法。
八、参考文献
[1]刘彦文.嵌入式系统原理及接口技术.清华大学出版社2011年3月.
[2]三星公司.ARM9三星S3C2410英文数据手册.
[3]王波波.ARM9完全学习手册.
九、附录
主程序:
#include
#include
#include"def.h"
#include"option.h"
#include"2440addr.h"
#include"2440lib.h"
#include"2440slib.h"
#include"mmu.h"
#include"hanzi.h"
#include"display.h"
#include"rtc.h"
#include"LCD640.h"
#include"uart.h"
#include"rtcalm.h"
////////////////////////////////////////////////////////////////
#definerUTRSTAT0(*(volatileunsigned*)0x50000010)
#definerUTRSTAT1(*(volatileunsigned*)0x50004010)
#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000020)=(unsignedchar)(ch)
#defineWrUTXH1(ch)(*(volatileunsignedchar*)0x50004020)=(unsignedchar)(ch)
#defineRdURXH0()(*(volatileunsignedchar*)0x50000024)
#defineRdURXH1()(*(volatileunsignedchar*)0x50004024)
voidUart_Init(intmclk,intbaud);
voidUart_Select(intch);
voidUart_TxEmpty(intch);
charUart_Getch(void);
charUart_GetKey(void);
voidUart_GetString(char*string);
intUart_GetIntNum(void);
voidUart_SendByte(intdata);
voidUart_SendString(char*pt);
voidUart_Printf(char*fmt,...);
///////////////////////////////////////////////////////////////
externintRTC_num;
externU32LCDBufferII2[480][640];
intMain(intargc,char**argv)
{
charc1[1];
charerr;
U8key,key1,key2,key3;
inti,j,k,temp;
intx=130;//列
inty=170;//行
U16year;
U8month,day;
U8hour,minute,second;
U8secondgewei,secondshiwei;
U8minutegewei,minuteshiwei;
U8hourgewei,hourshiwei;
U8daygewei,dayshiwei;
U8monthgewei,monthshiwei;
U8yearqian,yearbai,yearshi,yearge;
ChangeMPllValue(68,1,1);
Port_Init();//端口初始化函数
Uart_Select(0);//串行IO口选择函数
Uart_Init(0,115200);//串口初始化函数;
MMU_Init();
MMU_DisableICache();
MMU_DisableDCache();
LCD_Init();//LCD初始化
Isr_Init();//RTC中断初始化
for(k=0;k<480;k++)//hang
for(j=0;j<640;j++)//列
LCDBufferII2[k][j]=0x0000fcf8;//上黄框背景
for(i=0;i<9;i++)//显示汉字
{
LCD_Display_hanzi_16_16(x,y,hanzi[i]);//第一参数为列第二参数为行
y=y;
x=x+40;
}
//显示名称
LCD_Display_hanzi_16_16(260,120,hanzi[15]);//数
LCD_Display_hanzi_16_16(280,120,hanzi[16]);//字
LCD_Display_hanzi_16_16(300,120,hanzi[17]);//时
LCD_Display_hanzi_16_16(320,120,hanzi[18]);//钟
//显示数字
///////////////////////////////////////////////////////////////////////
LCD_Refresh();//初始化
RTC_Time_Set();
//rRTCCON=1;
while
(1)
{
rRTCCON=1;
{
year=0x2000+rBCDYEAR;//年
month=rBCDMON;//月
day=rBCDDATE;//日
hour=rBCDHOUR;//时
minute=rBCDMIN;//分
second=rBCDSEC;//秒
rRTCCON&=~1;//RTCreadandwritedisable
Uart_Printf("RTCtime:
%04x-%02x-%02x%02x:
%02x:
%02x\n",year,month,day,hour,minute,second);
dely(20);
secondgewei=second%0x10;//BCD码模十六进制送显
secondshiwei=second/0x10;
minutegewei=minute%0x10;
minuteshiwei=minute/0x10;
hourgewei=hour%0x10;
hourshiwei=hour/0x10;
daygewei=day%0x10;
dayshiwei=day/0x10;
monthgewei=month%0x10;
monthshiwei=month/0x10;
yearqian=year/0x1000;
yearbai=(year%0x1000)/0x100;
yearshi=((year%0x1000)%0x100)/0x10;
yearge=((year%0x1000)%0x100)%0x10;
LCD_Display_English_8_16(230,210,number[yearqian]);
LCD_Display_English_8_16(240,210,number[yearbai]);
LCD_Display_English_8_16(250,210,number[yearshi]);
LCD_Display_English_8_16(260,210,number[yearge]);
LCD_Display_hanzi_16_16(270,210,hanzi[9]);//年
LCD_Display_English_8_16(290,210,number[monthshiwei]);
LCD_Display_English_8_16(300,210,number[monthgewei]);
LCD_Display_hanzi_16_16(310,210,hanzi[10]);//月
LCD_Display_English_8_16(330,210,number[dayshiwei]);
LCD_Display_English_8_16(340,210,number[daygewei]);
LCD_Display
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 数字 设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)