人人范文网 范文大全

EDA嵌入式电子时钟设计

发布时间:2020-03-02 07:54:35 来源:范文大全 收藏本文 下载本文 手机版

目 录

摘要…………………………………………………………...………………………1 第一章 前言..………………………………………………………………………1 第二章 系统设计.…………………………………………………...……….……2 2.1 题目标及总体方案…………………………………………………...………..2

2.2 元器件的选择和连线……………………………………………………...…..2

2.3 程序和芯片的初始化……………………………………………………...…..3

2.4 构建功能模块………………………………..…………………………….…..4 第三章 实验(测试)结果及讨论……….……………………………….…….9

3.1 ads1.2 软件的编译\\连接和运行………………………………………….....9

3.2 protues 7.4仿真软件的联合调试……………………………………….….10 第四章 结论………………………………………………………………………11 心得体会………………………………………………………………………...…12 参考文献………………………………………………………………………13 附 录………………………………………………………………………14

近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。

summary In recent years, along with the computer technology and integrated circuit technology development, the embedded technology, growing popularity in communication, network, industrial, medical and electronic field plays a more and more important role.The embedded system has become the most popular most promising IT application field of one.

Real time clock (RTC) device is a kind of can provide calendar/clock, data storage function application-specific integrated circuit, commonly used all kinds of computer system clock signal source and the parameters set store circuit.With timing accurate RTC, low power consumption, and small volume and other characteristics, especially suitable for all kinds of embedded system loyal record in the timing of events and related information, especially in communication engineering, power automation, industry control, high automation field of unmanned their duties environment.Along with the development of the integrated circuit technology, the new product of RTC device also has introduced.These new product not only has accurate RTC, and high capacity memory, temperature sensor and A/D data acquisition channel etc, has become the collection of data collection and storage, RTC in an integrated function device, especially suitable for to micro controller as the core of the embedded system.

第一章 前 言

通常我们常用的LCD显示模块,有两种,一是带有驱动电路的LCD显示模块,一是不带驱动电路的LCD显示屏。大部分ARM处理器中都集成了LCD的控制器,所以,针对ARM芯片,一般不使用带驱动电路的LCD显示模块。

S3C44B0X 中具有内置的LCD 控制器,它能将显示缓存(在SDRAM存储器中)中的LCD图像数据传输到外部的LCD驱动电路上的逻辑功能。它支持单色、4级、16级灰度LCD显示,以及256彩色LCD显示。在显示灰度时,它采用时间抖动算法(time-based dithering algorithm)和帧率控制 (Frame Rate Control)方法,在显示彩色时,它采用RGB的格式,即RED、GREEN、BLUE,三色混合调色。通过软件编程,可以实现233或332的RGB调色的格式。对于不同尺寸的LCD显示器,它们会有不同的垂直和水平象素点、不同的数据宽度、不同的接口时间及刷新率,通过对LCD 控制器中的相应寄存器写入不同的值,来配置不同的LCD 显示板。

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。

第二章 系统设计

2.1课题目标及总体方案

利用lpc 2104芯片和LCD显示器,通过汇编和C语言编译,完成实时时钟的显示。

2.2元器件的选择和连线

选用嵌入式arm 7系列的lpc 2104芯片和Lcd pg160128a显示器:

图 2.2.2

图 2.2.1

根据使用的需要配置端口连线:

图 2.2.3 图 2.2.4

2.3程序和芯片的初始化

程序中包括:Lcd的初始化:

中断向量的初始化:

RTC的初始化:

芯片Lpc2104 基础配置: 中间使用了上接正电源配合 电容的交流特性,为芯片提供电 源和复位功能。

其他引脚根据芯片要求配置 连接。

图 2.3.1 2.4构建功能模块

LCD重要的函数实现画圆和画直线。 以下为画圆函数:

void Shouw_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) }

该算法是通过X变量的自增,补偿1 修正正方形控制Y变量自减,找到距中心恒定距离的点,其中rs=45,X自0加1增至45。和原点坐标运算,可以在第一象限找到一点,再通过折叠对称找到其他象限的三个点,通过画点函数描绘出。再画他的45度镜像就好了。

画线函数:void line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned char draw) 以中心的坐标为起点,使用while函数与指针最外圈的点比较,不断延长直至相等,所以事先计算出时针,分针和秒针三个同心圆最外圈点的坐标,以便带入函数。也同圆类似,要考虑不同象限点的情况,根据不同的位置带参数到画点函数中描绘。

2.4.1画指针模块

int SpaceXS[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},

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},

2.4.2显示模块

void Shows() { 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); //显示下一分的 Draw_Line(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]; } } 小时,分显示类似。

2.4.3计时模块

oid Task_2(void *pdata) {

for(;;)

{ Show_Color(); Shouw_Cricle();

Set_Color(GUI_RED); sec = 0; Set_Color(GUI_YELLOW); //显示

Draw_Line(x_line,y_line,*Placex,*Placey); Display_Time(130, 160);//时间

do { Delay(1200); sec++; Shows(); if (sec >= 60)

{ sec = 0; min++; Showm(); if (min >= 60) { min = 0; hour++; Showh(); if (hour >= 23)

} { hour = 0; day++; if(day >=32) {

day = 1; mon++; if(mon >= 13) {

}

mon = 1; yea1++; } } } }

Display_Time(130, 160);//时间 日期 }while(1); } 第三章 实验(测试)结果及讨论

3.1 ads1.2 软件的编译,连接和运行

构建完整的程序:

添加头文件,中断处理汇编程序段,初始化函数和主函数:

编译 所有的文件:

图 3.1.1

编译器提示:成功生成所需Hex文件,将得到的Hex文件导入仿真芯片 Lpc 2104中,观察实时时钟。

3.2 protues 7.4仿真软件的联合调试

为Lpc 2104 芯片选择Hex文件路径:

图 3.2.1

连接芯片与LCD端口,运行程序,观察效果。 显示如下时钟界面:

动态显示当前的时间,包括:年、月、日、时、分、秒,时针、分针和秒针为动态实时指示当前的时间。

图 3.2.2

第四章 结 论

综合效果图:

图 4.1

以上为protues部分设计的,ads程序见附录。

心得体会

通过短短一个星期的嵌入式课程设计,我获益匪浅。在课程设计的过程中,我发现我们专业在半个学期里所修的嵌入式课程的知识点都仅仅是基础中的基础,要完成老师交给我们的任务还是有一些距离的,于是我自发上网搜集了许多嵌入式的资料,在完成方案设计和程序修改调试以后,就可初步实现本课题课程设计的要求。但当我们将程序烧入实验箱后,发现最初的版本并不完美,存在许多使用上的不方便与可以进一步改进的地方,譬如功能不全、外观粗糙……

通过这次课设,我发现了自己在课本知识上掌握的不足,同时把以前所学过的知识重新温故,巩固了所学的知识。我觉得这次的成功很大部分取决与同学的帮助与冷静、耐心和细心。团队合作可以增强我们的创新能力与加大我们的完成速度,而程序的修改,调试,编译则离不开冷静、耐心和细心等心理素质。另外,这次课设的完满结束,给了我们日后毕业设计宝贵的经验,使我们受益匪浅。

参考文献

[1] 谢自美,电子线路设计、实验、测试,华中理工大学出版社,2003。 [2] 宋春荣,通用集成电路速查手册,山东科学技术出版社,1995。 [3] Arnold Berger,嵌入式系统设计,吕骏 译, 北京:电子工业出版社, 2002 [4] 桑楠.嵌入式系统原理及应用开发技术,北京:北京航空航天大学出版社, 2002

附 录

源程序:

#include \"..\\inc\\config.h\" #define STACKSIZE 256 #define x_line 160 #define y_line 80 OS_STK_DATA stk; extern GUI_FONT CHINESE_FONT12; extern GUI_FONT CHINESE_FONT16; extern GUI_FONT GUI_Font8x16; OS_EVENT * Send_LCD_Sem; OS_EVENT *Key_Mbox;

I8 Hour[3],Min[3],Sec[3]; I8 hour = 0, min = 0, sec = 0,ms; I8 YEA1[3],YEA2[3],MON[3],DAY[3]; int yea1 = 20,yea2=11, mon = 6, day = 23; I8 XH0[3],XH1[3],XH2[3],XH3[3]; I8 XH4[3],XH5[3],XH6[3],XH7[3]; char xh0=01,xh1=62,xh2=31,xh3=03; char xh4=32,xh5=36,xh6=02,xh7=12; //int TimeCount = 0; int SpaceXS[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 },

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]; void Display_xh1(char xx1,char yy1); void Display_xh2(char xx2,char yy2); void Display_xh3(char xx3,char yy3);

void Shows() { 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); //显示下一分的

Draw_Line(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]; } }

void Showm() {

Set_Color(GUI_GRAY); //擦除上一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym); Placexm=Placexm+1;

Placeym=Placeym+1; Set_Color(GUI_RED); //显示下一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym); Set_Color(GUI_GREEN); //显示下一时的

Draw_Line(x_line,y_line,*Placexh,*Placeyh);

}

void Showh() {

Set_Color(GUI_GRAY); //擦除上一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh); Placexh=Placexh+1; Placeyh=Placeyh+1; Set_Color(GUI_GREEN); //显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh); if(Placexm==&SpaceXM[60]&&Placeym==&SpaceYM[60]) {

} Placexm=&SpaceXM[0]; Placeym=&SpaceYM[0];

if(Placexh==&SpaceXH[12]&&Placeyh==&SpaceYH[12]) { Placexh=&SpaceXH[0];

} } Placeyh=&SpaceYH[0]; void Shouw_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) }

void Delay(int time); void ChangeForm(char Time[],char time) { Time[0] = time / 10 + 48; Time[1] = time % 10 + 48; Time[2] = \'\\0\'; } void Display_Time(char x,char y) { 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); Disp_String (\":\",x + 16,160); Disp_String (Min,x + 24,160); Disp_String (\":\",x + 40,160); Disp_String (Sec,x + 48,160); Disp_String (YEA1,x , 180); Disp_String (YEA2,x +16,180); Disp_String (\",\",x + 32,180); Disp_String (MON,x + 40,180); Disp_String (\",\",x + 56,180); Disp_String (DAY,x + 64,180); /*分配各任务的堆栈容量 */ OS_STK Stack_Task_1[STACKSIZE]; OS_STK Stack_Task_2[STACKSIZE*3];

void Task_3(I8 s) { I8 display; for(;;) {

Delay(100); display++; Set_Color(GUI_RED); Display_xh1(5,180); if(display==1000)

} } /* { } display=0;函数说明 : GUI任务,优先级为9输出参数 : 无 */ void Task_2(void *pdata) { for(;;) { Show_Color();

Shouw_Cricle();

Set_Color(GUI_RED); sec = 0; Set_Color(GUI_YELLOW); //显示

Draw_Line(x_line,y_line,*Placex,*Placey); Display_Time(130, 160);//时间

do { Delay(1200); sec++; Shows(); if (sec >= 60)

{ sec = 0; min++;

} Showm(); if (min >= 60) { min = 0; hour++; Showh(); if (hour >= 23) { hour = 0; day++; if(day >=32) { day = 1; mon++; if(mon >= 13) {

} } } } }

Display_Time(130, 160);//时间 日期 }while(1);

mon = 1; yea1++; }

void Task_1(void *pdata) { Rtc_Tick_Init(); //打开时钟节拍,让操作系统跑起来

OSTaskCreate(Task_2, (void *)0, (OS_STK *)&Stack_Task_2 [(STACKSIZE*3)(void

嵌入式电子闹钟时钟课程设计

EDA课程设计——数字时钟

EDA课程设计 数字时钟

数字电子时钟设计

EDA课程设计 数字时钟(闹钟)

数字电路电子时钟课件设计

电子时钟电子CAD设计报告

基于51单片机电子时钟设计

数字电子时钟实验报告

单片机课程设计报告,单片机电子时钟

EDA嵌入式电子时钟设计
《EDA嵌入式电子时钟设计.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档