嵌入式课程设计报告文档格式.docx
- 文档编号:18834530
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:28
- 大小:330.12KB
嵌入式课程设计报告文档格式.docx
《嵌入式课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
学生姓名:
严维锋专业年级:
自动化2008级
目录
前言3
第一章系统设计4
第一节课题目标及总体方案4
第二节原理框图5
第三节程序和芯片的初始化5
第四节构建功能模块7
第五节main函数的局部原理分析8
第二章实验(测试)结果及讨论13
第一节ads1.2软件的编译,连接和运行13
第二节程序调试14
第三章结论14
心得体会15
参考文献16
附录17
源程序17
前言
近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,其强大的控制能力和专业性在通讯、网络、工控、电子等领域发挥着越来越重要的作用。
嵌入式系统成为当前当之无愧的最有发展前途的IT应用领域之一。
实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。
RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。
随着集成电路技术的不断发展,RTC器件的新品也不断推出。
这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。
本课程设计将体现嵌入式技术的优越性。
第一章系统设计
第一节课题目标及总体方案
一、设计要求
学习LCD与ARM的LCD的控制器的接口原理,掌握内置LCD控制器驱动编写方法和RTC控制方法,在可行性分析的基础上实现以下功能:
2、仿照图1在LCD上显示类似的时钟界面;
图1LCD上显示的时钟界面
二、设计方案
基于S3C44B0X的典型嵌入式系统硬件体系结构图如图2所示,通过对S3C44B0X处理器的学习,可以利用其内部的RTC单元和LCD控制器,外接LCD模块、晶振和(后备)电源实现电子实时时钟的功能。
主要实现方法为:
通过电源和晶振保证处理器的正常工作和时钟来源,通过编程设定RTC单元的工作模式,实现实时时钟的功能;
然后根据所要求显示的图形效果,编写程序设定LCD控制器的相应寄存器,将RTC单元和LCD控制器合理有效地结合起来;
最终由LCD模块作出相应动作,完成实时时钟的显示功能。
该设计的中英文字符显示方案,有效地利用了嵌入式系统自身的ROM存储容量,其最大的特点是以少量的存储容量为代价,来简单灵活地实现LCD上的字符显示。
此方案可以显示所有的一、二级汉字,并且能实现汉字、英文的混合显示,从而方便地构造出良好的人机界面。
所讨论的硬件平台是在S3C44BOX和液晶显示器的基础上搭建的,对于实现S3C44BOX与其它类型LCD模块的连接和应用,具有一定的参考价值。
图2S3C44B0X的典型嵌入式系统硬件体系结构
第二节原理框图
根据课题所要实现的功能,结合S3C44B0X处理器的单元结构,作出如图3所示的原理框图。
图3原理框图
第三节程序和芯片的初始化
程序和芯片的初始化包括:
LCD的初始化:
U16LCD_Init(U8Lcd_Bpp)
{
switch(Lcd_Bpp)
Case8:
rLCDCON1=(0)|(2<
<
5)|(MVAL_USED<
7)|(0x1<
8)|(0x1<
10)|(CLKVAL_COLOR<
12);
rLCDCON2=(LINEVAL)|(HOZVAL_COLOR<
10)|(10<
21);
rLCDSADDR1=(0x3<
27)|(((U32)Video_StartBuffer>
>
22)<
21)|M5D((U32)Video_StartBuffer>
1);
rLCDSADDR2=M5D((((U32)Video_StartBuffer+(SCR_XSIZE*LCD_YSIZE))>
1))|(MVAL<
21)|1<
29;
rLCDSADDR3=(LCD_XSIZE/2)|(((SCR_XSIZE-LCD_XSIZE)/2)<
9);
rREDLUT=0xfdb96420;
rGREENLUT=0xfdb96420;
rBLUELUT=0xfb40;
rDITHMODE=0x0;
rDP1_2=0xa5a5;
rDP4_7=0xba5da65;
rDP3_5=0xa5a5f;
rDP2_3=0xd6b;
rDP5_7=0xeb7b5ed;
rDP3_4=0x7dbe;
rDP4_5=0x7ebdf;
rDP6_7=0x7fdfbfe;
rDITHMODE=0x12210;
rLCDCON1=
(1)|(2<
7)|(0x3<
8)|(0x3<
break;
default:
return1;
}
return0;
}
中断向量的初始化:
voidKeyINT_Init(void){
if((rINTPND&
BIT_EINT4567))
{
SPC=BIT_EINT4567;
}
rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);
RTC的初始化:
voidRtc_Tick_Init(void)
BIT_TICK))
rI_ISPC=BIT_TICK;
rINTMSK&
=~(BIT_GLOBAL|BIT_TICK);
rRTCCON=0x0;
rTICINT=1|(1<
7)
voidRtc_Tick_Init0(void)
BIT_TICK))
rRTCCON=0x0;
6);
第四节构建功能模块
LCD显示的时钟界面包括:
静止不动的圆形钟面和一直在走动的时钟指针。
所以需要构建两个重要的函数实现画圆和画直线。
画圆函数:
该算法是通过X变量的自增,补偿1修正正方形控制Y变量自减,找到距中心恒定距离的点,其中rs=45,X自0加1增至45。
和原点坐标运算,可以在第一象限找到一点,再通过折叠对称找到其他象限的三个点,通过画点函数描绘出。
再画他的45度镜像就好了。
画线函数:
voidline(unsignedintx1,unsignedinty1,unsignedintx2,unsignedinty2,unsignedchardraw)
以中心的坐标为起点,使用while函数与指针最外圈的点比较,不断延长直至相等,所以事先计算出时针,分针和秒针三个同心圆最外圈点的坐标,以便带入函数。
也同圆类似,要考虑不同象限点的情况,根据不同的位置带参数到画点函数中描绘。
第5节MAIN函数的局部原理分析
首先让我们先来看一下main函数的宏定义与变量定义,如下:
从上面的程序可以看出,所使用的头文件主要是config.h。
这个文件的内容不再详述,后面的附录会给出。
同时该程序还给出了时分秒的初始值,其字符型为i8,也即char型(在其它文件中有定义)。
初始值为:
hour=0,min=0,sec=0,ms=0;
例如如果当前时间为6:
20,十九秒,则将对应的数字修改即可。
同理,年月日的初始值设定是一样的,并且字符类型也为char类型。
下面是针对字符类型的宏定义:
#defineI8char
#defineU8unsignedchar
#defineI16short
#defineU16unsignedshort
#defineI32long
#defineU32unsignedlong
#defineI16PI16
#defineU16PU16
下面我们来看看对于时针,分针,秒针的坐标设定,程序如下:
上述为秒针的坐标定义,SpaceXS[61]对应于秒针的横坐标值,SpaceYS[61]对应于纵坐标值。
第一个点对应的是十二点的位置,即(160,30)点。
因此只要设定两个指针,分别指向这两个数组的首地址,每当时间秒变化时,就将这两个指针加一,从而指向下一坐标,达到动态变化的效果。
分针,时针的定义与上述定义完全一样,只不过时针定义时变量个数为十三个,具体如下定义:
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[0],*Placey=&
SpaceYS[0],*Placexm=&
SpaceXM[0],
*Placeym=&
SpaceYM[0],*Placexh=&
SpaceXH[0],*Placeyh=&
SpaceYH[0];
下面我们先来介绍此程序中用到的几个重要的函数。
首先来说Set_Color()函数,这是一个设定颜色的函数,此函数的代码在其他文件中经行了编写,只要在括号中输入相应的颜色就可,颜色定义如下:
#defineGUI_BLACK0x000000
#defineGUI_BLUE0x0000FF
#defineGUI_GREEN0x00FF00
#defineGUI_CYAN0xf0f000
#defineGUI_RED0xFF0000
#defineGUI_MAGENTA0x800080#defineGUI_BROWN0x2020a0
#defineGUI_DARKGRAY0x404040#defineGUI_GRAY0x808080
#defineGUI_LIGHTGRAY0xd0d0d0#defineGUI_LIGHTBLUE0xf08080
#defineGUI_LIGHTGREEN0x80f080#defineGUI_LIGHTCYAN0x80f0f0
#defineGUI_LIGHTRED0x8080f0#defineGUI_LIGHTMAGENTA0xf080f0
#defineGUI_YELLOW0xF0f000#defineGUI_WHITE0xffffff
下面来说Fill_Circle(x,y,r)函数。
如下所示:
voidFill_Circle(U16x0,U16y0,U16r)
U32i;
U32imax=((int)((int)r*707))/1000+1;
U32sqmax=(int)r*(int)r+(int)r/2;
U16x=r;
LCD_DrawHLine(x0-r,y0,x0+r);
for(i=1;
i<
=imax;
i++)
{
if((i*i+x*x)>
sqmax)
if(x>
imax)
{
LCD_DrawHLine(x0-i+1,y0+x,x0+i-1);
LCD_DrawHLine(x0-i+1,y0-x,x0+i-1);
}
x--;
}
LCD_DrawHLine(x0-x,y0+i,x0+x);
LCD_DrawHLine(x0-x,y0-i,x0+x);
当此函数执行完以后会在液晶显示仪显示出一个实心圆,与前面的setcolor函数配合可以画出特定颜色的的圆,x为横坐标,y为纵坐标,r为半径。
还有一个为fillrect()函数。
也即矩形填充函数,此函数可以在显示屏上显示特定大小的矩形图案,并结合颜色设定函数得出相应的颜色相应函数如下:
voidFill_Rect(U16x0,U16y0,U16x1,U16y1)
LCD_FillRect(x0,y0,x1,y1);
既然是实时时钟,那么程序是如何实现指针的偏转的,是靠什么思路实现的。
下面的程序是以秒针为例简述这其中的原理的。
可以看到,程序中有擦除上一秒的程序。
之所以能靠一个设定颜色的程序来将其擦出是因为,之前已经将底色设定为该指针擦除时的颜色。
既然该指针与底色有一样的颜色,所以观察者就看不到之前的指针了,所以就达到了擦出的目的,当显示下一秒时,只要将指针的颜色设定为与底色不同,即达到了显示的效果。
同时,还要显示分针和时针。
对于擦除分针和时针得原理与上面所述大同小异,这里只给出程序,不在详细讨论,程序如下:
那么是通过怎样的方式将以上时分秒的变化联系起来的呢?
其实这全靠if。
。
else。
的条件判断语句,程序如下:
我们可以看到其中有一个delay函数,这个函数的自变量为1200,即为delay(1200),它实现了一秒的延时,一秒以后sec加一,从而实现一秒的计时。
当为60秒时,分针指向下一分钟,擦除上一分钟,也就是调用上面的三个显示与擦除函数。
第二章实验(测试)结果及讨论
第一节ADS1.2软件的编译,连接和运行
构建完整的程序:
添加头文件,中断处理汇编程序段,初始化函数和主函数:
voidMain(void)
{
Target_Init();
//ARMII实验系统的初始化,包括CPU板
GUI_Init();
OSInit();
Key_Mbox=OSMboxCreate((void*)0);
//键盘初始
OSTaskCreate(Task_1,(void*)0,(OS_STK*)&
Stack_Task_1[STACKSIZE-1],5);
//创建任务一
OSStart();
编译
所有的文件:
第二节程序调试
连接芯片与LCD端口,运行程序,观察效果。
此时LCD上将显示如图4所示的时钟界面。
图4程序运行时LCD显示的时钟界面
第三章结论
基于LCD的电子时钟可以准确地将动态时钟进行显示,并且能通过图像时钟形式和数字时钟多种形式表现出来,此外根据需要还可添加日历功能。
在将程序烧入系统后,我们发现了两个比较严重的问题。
第一个问题是我小组成员的名字出现乱码,经过我组及指导老师的细心排查,我们发现出现的原因是,字符重叠的原因。
当擦除上一个名字时,我的名字没有对齐从而没有擦除干净,与下一个要显示的字符相重合,从而出现乱码。
解决办法是在两个字的中间加入一个汉字宽度的空格,就可以消除此现象了。
第二个问题是秒针擦除不干净的问题。
当秒针走向下一个位置时,它的上一个位置仍然有图形。
此时背景颜色是深蓝。
但是我们发现擦除时的指针确实是深蓝,为什么还会有痕迹呢?
于是我组将指针颜色改成浅蓝,将背景颜色也改成浅蓝,终于痕迹不在了。
到此,基本的问题已经解决,即实现了实验所设定的要求。
心得体会
在此次的基于LCD的电子时钟设计的过程中,我学会了把课本中的知识应用到实际操作中来,学会了通过查看其他课外资料来学习新的知识。
此外,通过这一过程也提升了自己独立思考的能力。
切实做到发现问题,仔细思考,团结合作,动手实践,解决问题这一系列过程。
虽然这只是一次小系统设计,但通过它,我了解了课程设计的一般步骤和设计中应注意的问题,受益良多。
最初接收任务书,我们有些不知所措,虽然这学期学习了嵌入式系统的理论课程,但是毕竟缺少实践,还是难以着手。
随后与任务相同的别组同学一起讨论,确定了初步的设计方案,也就是主体部分是基于S3C44B0X处理器的体系结构。
然后就是分模块的设计。
课程设计已经结束,自己从这一过程中体会到了很多,有完成的喜悦,有停滞不前的郁闷,不管何种情况,我都提醒自己要静下心来,冷静的分析,老师在验收的时候,笑着问我请了多少外援,当时回答是一本书,现在想想有些逞强,还是有些经验丰富的同学在我不懂的时候帮助我的,不然我可能还要花些时间折腾。
课程设计的过程让我懂得面对问题要勤于思考,遇到困难,要勇于面对,这在任何知识的学习中都是弥足珍贵的。
参考文献
【1】王勇,嵌入式系统原理与设计,浙江大学出版社,2007.
【2】谢自美,电子线路设计、实验、测试,华中理工大学出版社,2003。
【3】宋春荣,通用集成电路速查手册,山东科学技术出版社,1995。
【4】桑楠.嵌入式系统原理及应用开发技术,北京:
北京航空航天大学出版社,2002
附录
源程序:
#include"
..\inc\config.h"
#defineSTACKSIZE256
#definex_line160
#definey_line80
OS_STK_DATAstk;
externGUI_FONTCHINESE_FONT12;
externGUI_FONTCHINESE_FONT16;
externGUI_FONTGUI_Font8x16;
OS_EVENT*Send_LCD_Sem;
OS_EVENT*Key_Mbox;
I8Hour[3],Min[3],Sec[3];
I8hour=0,min=0,sec=0,ms;
I8YEA1[3],YEA2[3],MON[3],DAY[3];
intyea1=20,yea2=11,mon=6,day=29;
I8XH0[3],XH1[3],XH2[3],XH3[3];
I8XH4[3],XH5[3];
charxh0=01,xh1=62,xh2=51,xh3=01;
charxh4=27,xh5=28,xh6=29;
//intTimeCount=0;
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,
40
},
Spac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计 报告