ARM电子时钟设计Word格式.docx
- 文档编号:20010408
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:17
- 大小:322.01KB
ARM电子时钟设计Word格式.docx
《ARM电子时钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《ARM电子时钟设计Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
ARM7TDMI体系结构的特点是它集成了Thumb代码压缩器,片上的ICE断点调试支持,和一个32位的硬件乘法器。
S3C44B0X内置LCD控制器可以支持规格为每像素2位(4级灰度)或每像素4位(16级灰度)的黑白LCD。
也可以支持每像素8位(256级颜色)的彩色LCD屏。
LCD控制器可以通过编程支持不同LCD屏的要求,例如行和列像素数,数据总线宽度,接口时序等。
基于S3C44B0X的典型嵌入式系统硬件体系结构如图2所示。
图2S3C44B0X硬件体系结构图
二、S3C44B0X与LCD连接
本课程设计使用的EL-ARM-830教学实验箱包含有一块5.7寸,256色,320X240像素的LCD显示屏,S3C44B0X内置了LCD控制器,控制LCD。
S3C44B0X与LCD连接示意图如图3。
图3S3C44B0X与LCD连接示意图
第二节软件系统设计
一、μC/OS-II系统模块设计
本模块的主要功能是将μC/OS-II系统移植到S3C44B0X上,作为调用硬件各项功能的基础,同时也完成S3C44B0X的功能本模块主要涉及到μC/OS-II在ARM上的移植,不属于本课程设计讨论的范畴,故不再赘述。
二、LCD初始化模块设计
本模块的主要功能完成LCD的初始化,加载LCD驱动程序,使LCD与S3C44B0X实现对接,完成显示功能。
本模块我们使用了实验箱现有的相关程序。
故不再赘述。
3、时钟应用系统模块设计
本模块是电子时钟功能实现的主要模块,也是本次课程设计的核心模块,本模块实现的功能主要有:
时间计时,钟面时间显示,数字时间显示。
其中,时间计时功能和在LCD上显示数字钟显示功能较易实现,之前的单片机课程设计和HDL课程设计均有所涉及。
计时使用S3C44B0X内部时钟脉冲和分频实现,在LCD上显示数字钟显示使用LCD数字显示功能实现。
在LCD上实现钟面显示功能较为复杂,主要包括以下过程:
1、给秒针、分针各设定60个坐标(包括X坐标和Y坐标),表示60秒和60分,给时针设定12个坐标(包括X坐标和Y坐标);
2、设定钟面显示初值并完成初值与时针、分针、秒针的坐标的映射,更改初值可以完成时间的设定;
3、使用画线函数完成秒针、分针、时针显示,主要功能是擦除上一秒(分、时)的轨迹和显示这一秒(分、时)。
4、使用画点函数完成钟面基本构造,即钟面与12个整点时间点。
除此之外,需要在整个移植后的系统中初始化堆栈并设定任务,通过任务完成时钟的各项功能。
第二章实验结果及讨论
第一节ADS1.2集成开发环境简介
ADS集成开发环境是ARM公司推出的ARM核微控制器集成开发工具,英文全称为ARMDeveloperSuite,成熟版本为ADS1.2。
ADS1.2支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAG硬件仿真调试,支持汇编、C、C++源程序,具有编译效率高、系统库功能强等特点,可以在Windows98、WindowsXP、Windows2000以及RedHatLinux上运行。
ADS1.2使用CodeWarriorIDE集成开发环境,并集成了ARM汇编器、ARM的C/C++编译器、Thumb的C/C++编译器、ARM连接器,包含工程管理器、代码生成接口、语法敏感(对关键字以不同颜色显示)编辑器、源文件和类浏览器等等。
CodeWarriorIDE主窗口如图4所示。
图4CodeWarrior开发环境
AXD调试器为ARM扩展调试器(即ARMeXtendedDebugger),包括ADW/ADU的所有特性,支持硬件仿真和软件仿真(ARMulator)。
AXD能够装载映像文件到目标内存,具有单步、全速和断点等调试功能,可以观察变量、寄存器和内存的数据等等。
AXD调试器主窗口如图5所示。
图5CodeWarrior开发环境
本课程设计在ADS1.2集成开发环境内编写源程序并进行编译,调试,然后利用H-JTAG下载到芯片中进行片上调试,H-JTAG连接完成后如图6所示。
图6H-JTAG连接成功示意图
第2节调试结果与分析
通过编译调试下载到实验箱的S3C44B0X芯片中进行调试,LCD显示结果如图7所示。
图7LCD调试结果显示
屏幕右上角显示出学号姓名和作品信息;
屏幕中间显示的是钟面,有时针、分针和秒针,显示实时时间;
屏幕下方显示的是数字时钟,显示时分秒(与钟面时间相对应)和年月日。
完成系统设计要求的各项功能。
第三章结论
本课程设计属于嵌入式系统项目设计,利用EL-ARM-830教学实验箱上的嵌入式微处理器S3C44B0X和LCD模块,使用C语言编程,结合ADS1.2对源程序进行编译、连接和运行,使用H-JTAG下载,设计完成了基于LCD的电子时钟,实现如下功能:
1、LCD显示“钟面”样式,时针、分针、秒针显示实时时间;
2、LCD显示“数字钟”样式,动态显示年、月、日、时、分、秒;
3、显示时间可以修改并保持“钟面”与“数字钟”时间保持一致;
4、LCD左上角动态显示小组成员姓名、学号及选题信息。
本课程设计完成选题要求,但是有如下方面有待改进:
1、“钟面”现实不够精确,分针和时针只设定了60个坐标位置,分针和时针走动不均匀;
2、数字钟部分尚未考虑到“大月”和“小月”以及“平年”和“闰年”的日期问题,所有月份均设定为30天;
3、时间修改麻烦,需要对源程序中设定的初值进行修改,无法通过键盘对时间进行修改;
4、未调用S4C44B0X内部实时时钟(RTC)模块,不能显示出精确的内部实时时间。
上述问题我们会在今后的学习和实践中予以改善,我们将继续学习嵌入式系统原理和设计,继续学习LCD显示技术,为将来的毕业设计打好基础。
附录
源程序
#include"
..\inc\config.h"
#defineSTACKSIZE256
#definex_line160
#definey_line80
OS_STK_DATAstk;
externGUI_FONTGUI_Font8x16;
OS_EVENT*Send_D7light_Sem;
OS_EVENT*Send_LCD_Sem;
OS_EVENT*Key_Mbox;
I8Hour[3],Min[3],Sec[3];
I8hour=15%12,min=20,sec=40;
I8YEA1[3],YEA2[3],MON[3],DAY[3];
intyea1=20,yea2=11,mon=6,day=23;
intSpaceXS[61]={160,165,170,175,180,185,
189,193,197,201,205,
206,207,208,209,210,
209,208,207,206,205,
201,197,193,189,185,
180,175,170,165,160,
155,150,145,140,135,
131,127,123,119,115,
114,113,112,111,110,
111,112,113,114,115,
119,123,127,131,135,
140,145,150,155,160,
},
SpaceYS[61]={30,31,32,33,34,
35,39,43,47,51,
55,60,65,70,75,
80,85,90,95,100,
105,109,113,117,121,
125,126,127,128,129,
130,129,128,127,126,
125,121,117,113,109,
105,100,95,90,85,
80,75,70,65,60,
55,51,47,43,39,
35,34,33,32,31,30},
SpaceXM[61]={160,164,168,172,176,180,183,186,189,192,195,196,197,198,199,200,199,198,197,196,195,192,189,186,183,180,176,172,168,164,160,156,152,148,144,140,137,134,131,128,125,124,123,122,121,120,121,122,123,124,125,128,131,134,137,140,144,148,152,156,
160},SpaceYM[61]={40,41,42,43,44,45,48,51,54,57,60,64,68,72,76,80,84,88,92,96,100,103,106,109,112,115,116,117,118,119,120,119,118,117,116,115,112,109,106,103,100,96,92,88,84,80,76,72,68,64,60,57,54,51,48,45,44,43,42,41,4},
SpaceXH[13]={160,175,185,190,185,175,160,145,135,130,135,145,160},SpaceYH[13]={50,55,65,80,95,105,110,105,95,80,65,55,50},
*Placex=&
SpaceXS[40],*Placey=&
SpaceYS[40],*Placexm=&
SpaceXM[20],*Placeym=&
SpaceYM[20],*Placexh=&
SpaceXH[15%12],*Placeyh=&
SpaceYH[15%12];
voidshow(I8s)
{
if(s%5==0)
{Set_Color(GUI_YELLOW);
Set_Font(&
GUI_Font8x16);
Disp_String("
0862310104"
10,30);
0862310121"
10,10);
}
elseif(s%5==1)
guxin"
Disp_String("
fanjuan"
}
elseif(s%5==2)
{Set_Color(GUI_YELLOW);
Set_Font(&
Disp_String("
elseif(s%5==3)
elseif(s%5==4)
S3C44BOX"
LCDCLOCK"
voidShows()
{show(sec);
Set_Color(GUI_GRAY);
//擦除上一秒Draw_Line(x_line,y_line,*Placex,*Placey);
Placex=Placex+1;
Placey=Placey+1;
Set_Color(GUI_YELLOW);
//显示下一秒的
Draw_Line(x_line,y_line,*Placex,*Placey);
Set_Color(GUI_RED);
//显示下一分的DrawLine(x_line,y_line,*Placexm,*Placeym);
Set_Color(GUI_GREEN);
//显示下一时的Draw_Line(x_line,y_line,*Placexh,*Placeyh);
if(Placex==&
SpaceXS[60]&
&
Placey==&
SpaceYS[60])
{Placex=&
SpaceXS[0];
Placey=&
SpaceYS[0];
}
voidShowm()
{Set_Color(GUI_GREEN);
Set_Color(GUI_RED);
//擦除上一分的
DrawLine(x_line,y_line,*Placexm,*Placeym);
Placexm=Placexm+1;
Placeym=Placeym+1;
//显示下一时的Draw_Line(x_line,y_line,*Placexh,*Placeyh);
if(Placexm==&
SpaceXM[60]&
Placeym==&
SpaceYM[60])
{
Placexm=&
SpaceXM[0];
Placeym=&
SpaceYM[0];
}
voidShowh()
{Set_Color(GUI_YELLOW);
Set_Color(GUI_GREEN);
//擦除上一时的DrawLine(x_line,y_line,*Placexh,*Placeyh);
Placexh=Placexh+1;
Placeyh=Placeyh+1;
//显示下一时的DrawLine(x_line,y_line,*Placexh,*Placeyh);
if(Placexh==&
SpaceXH[12]&
Placeyh==&
SpaceYH[12])
{Placexh=&
SpaceXH[0];
Placeyh=&
SpaceYH[0];
voidShouw_Cricle()//整点
{Set_Color(GUI_YELLOW);
Fill_Circle(160,30,2);
//12点(x,y,r)
Fill_Circle(135,35,2);
//11点(x,y,r)
Fill_Circle(115,55,2);
//10点(x,y,r)
Fill_Circle(110,80,2);
//9点(x,y,r)
Fill_Circle(115,105,2);
//8点(x,y,r)
Fill_Circle(135,125,2);
//7点(x,y,r)
Fill_Circle(160,130,2);
//6点(x,y,r)
Fill_Circle(185,125,2);
//5点(x,y,r)
Fill_Circle(205,105,2);
//4点(x,y,r)
Fill_Circle(210,80,2);
//3点(x,y,r)
Fill_Circle(205,55,2);
//2点(x,y,r)
Fill_Circle(185,35,2);
//1点(x,y,r)
voidShow_ht()
{Set_Color(GUI_GRAY);
Fill_Circle(160,80,54);
voidChangeForm(charTime[],chartime)
{Time[0]=time/10+48;
Time[1]=time%10+48;
Time[2]='
\0'
;
voidDisplay_Time(charx,chary)
{ChangeForm(Hour,hour);
ChangeForm(Min,min);
ChangeForm(Sec,sec);
ChangeForm(MON,mon);
ChangeForm(DAY,day);
ChangeForm(YEA1,yea1);
ChangeForm(YEA2,yea2);
Disp_String(Hour,x,160);
:
"
x+16,160);
Disp_String(Min,x+24,160);
x+40,160);
Disp_String(Sec,x+48,160);
Disp_String(YEA1,x,180);
Disp_String(YEA2,x+16,180);
-"
x+32,180);
Disp_String(MON,x+40,180);
x+56,180);
Disp_String(DAY,x+64,180);
voidShow_Color()
{Set_Color(GUI_BLUE);
Fill_Rect(0,0,319,239);
Set_Color(GUI_BLUE);
Set_BkColor(GUI_BLUE);
Fill_Rect(0,0,319,2);
Fill_Rect(0,0,2,239);
Fill_Rect(0,237,319,239);
Fill_Rect(317,0,319,239);
/*分配各任务的堆栈容量*/
OS_STKStack_Task_1[STACKSIZE];
OS_STKStack_Task_2[STACKSIZE*3];
/*-函数名称:
Task_3(void*pdata)
-函数说明:
GUI任务,优先级为56
-输入参数:
pdata
-输出参数:
无*/
voidTask_3(I8s)
{I8display;
for(;
)
{Delay(100);
display++;
Set_Color(GUI_RED);
if(display==1000)
{display=0;
Task_2(void*pdata)
GUI任务,优先级为9
voidTask_2(void*pdata)
{for(;
)
/*****全屏颜色设计*******/
/*******时钟位置*******/
Show_Color();
Show_ht();
/******点的坐标********/
Shouw_Cricle();
/**定背景颜色API**/
Set_Color(GUI_YELLOW);
//显示
DrawLine(x_line,y_line,*Placex,*Placey);
Display_Time(130,160);
//时间
do
{Delay(1200);
sec++;
Shows();
if(sec>
=60)
{sec=0;
min++;
Showm();
if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 电子 时钟 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)