嵌入式系统课程设计报告.docx

上传人:b****6 文档编号:8694074 上传时间:2023-02-01 格式:DOCX 页数:19 大小:524.25KB
下载 相关 举报
嵌入式系统课程设计报告.docx_第1页
第1页 / 共19页
嵌入式系统课程设计报告.docx_第2页
第2页 / 共19页
嵌入式系统课程设计报告.docx_第3页
第3页 / 共19页
嵌入式系统课程设计报告.docx_第4页
第4页 / 共19页
嵌入式系统课程设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

嵌入式系统课程设计报告.docx

《嵌入式系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

嵌入式系统课程设计报告.docx

嵌入式系统课程设计报告

 

软件学院

课程设计报告书

 

课程名称嵌入式系统

设计题目作息时间控制器

专业班级

学号

姓名

指导教师

 

2015年06月

1设计时间1

2设计目的1

3设计任务1

4设计内容1

4.1总体方案设计1

4.1.1需求规定2

4.1.2核心部件选型2

4.1.3系统开发环境3

4.2硬件设计3

4.2.1硬件开发环境简介3

4.2.2硬件模块1设计4

4.2.3硬件模块2设计5

4.2.4硬件模块3设计6

4.3软件设计7

4.3.1软件开发环境介绍7

4.3.2主程序设计及流程图7

4.3.3中断程序设计及流程图12

4.3.4软件模块1设计14

4.3.5软件模块2设计15

4.3.6软件模块3设计16

5总结17

参考文献18

1设计时间

2015年6月15日~2015年6月20日

2设计目的

《嵌入式系统课程设计》是软件工程专业(嵌入式软件方向)学生的专业实践课程,是学习《嵌入式系统》课程后必要的实践教学环节。

课程设计是检验学生是否掌握相关专业课程知识的重要手段,以学生为主体充分调动学生的积极性和创造性,重视学生实际动手能力的培养。

通过本次课程设计使学生加深理解、巩固课堂教学和平时实验内容,使学生初步具备基于Android、Linux、C和ARM汇编应用开发的系统分析、系统设计、系统实现与测试的实际能力,强化学生的知识实践意识、提高动手能力,发挥学生的想象力和创新能力,从而培养工程应用型人才。

3设计任务

作息时间控制器(嵌入式系统)

设计要求:

(1)以我校作息时间为蓝本,控制蜂鸣器模拟上下课打铃;

(2)作息时间可以程序调整,每到时间点蜂鸣器发声;

(3)若自动打铃功能有故障,应具有手动打铃功能,即按下键盘启动铃声;

(4)没有开发板的同学使用实验室开发板。

4设计内容

本次嵌入式课程设计的设计内容由教师统一分配题目学生自己选题来进行嵌入式课程设计。

本次设计题目为作息时间控制器,模拟学校的上课、下课打铃来实现作息时间的控制。

4.1总体方案设计

通过对设计题目和设计要求的初步了解进行分析,对整个系统的大体实现过程有一定的掌握。

首先,对系统的功能要求和实现进行分析。

然后是核心部件的炫选材,以及软件平台的搭建。

4.1.1需求规定

本次设计的作息时间控制器主要是针对学生上课前和课间休息时进行打铃提醒而设计。

对于作息时间控制的功能要求有显示作息时间,并且在到达设定好的作息时间时进行打铃。

打铃的时间是可以通过程序改写,打铃的情况有上课前的预备铃、上课铃、课间短暂休息铃和下课铃。

不仅要求在规定的时间点进行打铃还可以手动打铃,当按下按钮后就会响铃。

为了提高系统的性能需要对打铃和显示作息时间差进行分析,显示时间的准确性也要尽量提高,而且这样才能满足正常的作息时间控制。

为了完善整个作息时间控制器对时间的准确性的要求,添加一些调节时间的功能,对时间的时分秒均有对应的按键进行增加数值和减小数值,从而实现可调的响铃时钟。

4.1.2核心部件选型

根据需求的规定可知需要对时间的准确捕获并进行显示,并且到达规定的时间还可以响铃,也可以手动响铃。

通过对这些功能的分析可以使用带有实时时钟芯片的单片机,选用的开发板为LY-51S,单片机的芯片为STC90C516RD+,该开发板集成很多芯片包括实时时钟芯片DS1302、蜂鸣器、共阴极数码管。

LY-51S开发板属于独立模块结构,不受硬件连接的限制,自由度高,可以通过更改硬件的连接来实现强大的整体功能。

开发板的各个模块都是独立的模块,使用时需要用杜邦线连接需要的模块,原理和结构比较简单。

STC90C516RD+系列单片机是宏晶科技推出的新一代的超强抗干扰高速低耗的单片机,指令代码完全兼容传统的8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率在12MHz以下时,复位脚可直接接地。

DS1302实时时钟芯片,该芯片集成在开发板上是一块独立的模块,在使用时需要将控制引脚与实时时钟的三个引脚对应相连来获取信号和写入信号。

DS1302芯片由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟电路DS1302的结构、工作原理及其在实时显示时间中的应用。

它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿等多种功能,工作电压为2.5V~5.5V。

采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

4.1.3系统开发环境

在对系统进行开发过程中用到的开发环境主要是keil公司的集成开发环境(IDE)keilC51和串口调试软件STC-ISP-V483。

在网上下载keiluVision4(C51版)软件和STC-ISP-V483,安装在自己的电脑上。

首先,在keiluVision4中新建个工程Project->newuVisionProject,输入工程和文件的位置,并选择CPU的型号,由于使用的是STC90C516RD+芯片,所以CPU可选择相近的单片机芯片如AT89C52,然后新建一个文件并编写程序代码,保存的时候需要将文件的后缀填到文件名的后面。

在工程文件中添加程序源代码文件进行编译并生成单片机可执行的文件Hex文件。

然后利用串口调试软件通过USB线将Hex文件烧写到单片机中,需要注意单片机的芯片类型和串口是否对应和烧写程序时是否为冷上电。

4.2硬件设计

4.2.1硬件开发环境简介

LY-51S开发板集成大量模块,功能强大执行效率和稳定性都比较高,每个模块都是独立的,互不干扰。

开发板上主要集成USB转串口芯片PL2303,驱动支持最新win7系统,只要1根USB线就可以实现供电、下载、通讯功能,尤其现在笔记本USB口较少,这种连接方式就能最大限度节省USB端口;8个LED,4种颜色,可以完成单片机最基础学习部分,为练习编写流水灯、跑马灯提供方便;1个大尺寸共阳数码管,为学者练习数码管显示原理提供条件;8位共阴数码管,2个74HC573锁存,静态显示与动态扫描,分别控制段锁存和位锁存;红绿双色8x8点阵,3个HC595芯片驱动,点阵可以拔插,工业LED屏通常使用HC595做信号传输,这个芯片的控制与级联对开发很重要;串行信号转并行信号芯片74HC164,通过串口或者模拟串口信号输入,输出8位并口信号,多用于单片机本身端口不够使用的情况;反向器CD4069,可以做信号组合试验;EEPROM存储器24C02,IIC总线接口,带有程序保护接口;DS1302时钟芯片,32768Hz时钟源晶振,三线总线接口,带有备用电源CR1220纽扣电池;MAX232串口电平转换,连接2路串口,DB9公口和母口,与板载USB转串口,可以形成3种串口外接方式,方便多种连线驳接;RS485芯片,对485硬件控制原理留有输入信号、控制信号和输出信号端口

图1硬件平台实物表面丝印图

4.2.2硬件模块1设计

对于实时时钟芯片DS1302的设计首先要对它的电路图及原理有一定的了解,然后要对实时时钟的操作引脚要有清晰的认识,即读取时间、写入时间、重置时间等。

DS1302芯片有8个引脚,引脚1是VCC2,提供主电源,与外部供电;引脚2、3是X1、X2,为芯片提供振荡源,外接32768HZ晶振,能够准确的反应时间的变化;引脚4是GND,接地线;引脚5是RST,为复位或片选线,低电平有效;引脚6是I/O输入输出接口,是双向的传输串行数据的输入输出接口;引脚7是SCLK,即串行时钟输入端;引脚8是VCC1,是实时时钟的备用电池,当VCC2不提供电源时,VCC1会提供一段时间的电源。

对实时时钟的控制主要通过STC90C516RD+的P1.4、P1.5、P1.6引脚来分别控制DS1302芯片的SCLK、I/O、RST引脚,具体的电路图如图2所示。

图2实时时钟DS1302芯片

4.2.3硬件模块2设计

系统的数码管模块的设计,该模块主要用于显示从实时时钟读取出来的时间,选用了两个共阴极数码管74HC573,利用段锁存和位锁存来控制数码管的显示。

段锁存可以控制8个数码管每个数码管亮的数值是多少,而位锁存则控制那个数码管可以亮。

由STC90C516RD+的P0口为段锁存传递数据,P0口与J3相连提供数据。

在使用数码管显示数字之前需要将J50添加跳帽,让数码管使能,然后将STC90C516RD+的P2.2、P2.3引脚与段锁存和位锁存相连接,控制数码管的显示。

具体连接电路图如图3所示。

图3数码管模块设计

4.2.4硬件模块3设计

喇叭模块的设计在于什么时候给喇叭信号让喇叭响铃,还有设置大概的响铃持续时间。

喇叭的硬件结构比较简单,喇叭由U22模块的ULN2003的引脚1来控制,在J51调帽接好的情况下,利用杜邦线将单片机引脚连接J42的引脚7便可以通过单片机来发送信号让喇叭发出铃声,具体连接如图4所示。

图4喇叭的硬件电路图

4.3软件设计

4.3.1软件开发环境介绍

软件开发环境主要用到的是keilC51是美国KeilSoftware公司(ARM公司之一)出品的51系列兼容单片机C语言软件开发系统。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

支持8051微控制器的PK51专业开发工具,支持所有的8051系列的芯片,包括经典设备以及具有IP核的设备。

4.3.2主程序设计及流程图

在主程序中首先要对实时时钟和定时器进行初始化,利用函数为系统初始化一个初始时间。

然后进入一个主循环中,进行不断地循环,主循环中有两个判断部分,一个是不断的扫描独立按键,当有那个按键被按下后就会响应对应的操作,另一个部分是判断是在可以读取实时时钟的时间时,调用读取时间的函数读取芯片的时间,把读取的时间放到一个数组中,然后判断当前的时间是否和自己设定的作息时间是否一致,一致时便会执行响铃操作。

主程序如下:

intmain(void)

{

unsignedcharnum;

Init_Timer0();

Ds1302_Init();

Ds1302_Write_Time();

while

(1)

{

num=KeyScan();

switch(num)

{

case1:

time_buf1[4]++;if(time_buf1[4]==24)time_buf1[4]=0;

Ds1302_Write_Time();break;

case2:

time_buf1[4]--;if(time_buf1[4]==255)time_buf1[4]=23;

Ds1302_Write_Time();break;

case3:

time_buf1[5]++;if(time_buf1[5]==60)time_buf1[5]=0;

Ds1302_Write_Time();break;

case4:

time_buf1[5]--;if(time_buf1[5]==255)time_buf1[5]=59;

Ds1302_Write_Time();break;

case5:

time_buf1[6]++;if(time_buf1[6]==60)time_buf1[6]=0;

Ds1302_Write_Time();break;

case6:

time_buf1[6]--;if(time_buf1[6]==255)time_buf1[6]=59;

Ds1302_Write_Time();break;

case7:

while(i--){DelayMs

(1);SPEAKER=!

SPEAKER;}i=500;break;

case8:

while(i--){DelayMs

(1);SPEAKER=!

SPEAKER;}i=500;break;

default:

break;

}

if(ReadTimeFlag==1)

{

ReadTimeFlag=0;

Ds1302_Read_Time();

TempData[0]=dofly_DuanMa[time_buf1[4]/10];

TempData[1]=dofly_DuanMa[time_buf1[4]%10];

TempData[3]=dofly_DuanMa[time_buf1[5]/10];

TempData[4]=dofly_DuanMa[time_buf1[5]%10];

TempData[6]=dofly_DuanMa[time_buf1[6]/10];

TempData[7]=dofly_DuanMa[time_buf1[6]%10];

while

(1){TempData[2]=0x40;TempData[5]=0x40;

DelayMs(100);TempData[2]=0x00;TempData[5]=0x00;

DelayMs(100);break;

}if((TempData[0]==0x3f)&&(TempData[1]==0x07)&&(TempData[3]==0x6d)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))

{//07-55-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if(((TempData[0]==0x3f)&&(TempData[1]==0x7f))&&(((TempData[3]==0x3f)&&(TempData[4]==0x3f))||((TempData[3]==0x66)&&(TempData[4]==0x6d))||((TempData[3]==0x6d)&&(TempData[4]==0x3f)))&&((TempData[6]==0x3f)&&(TempData[7]==0x3f)))

{//08-00-00、08-45-00、08-50-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if(((TempData[0]==0x3f)&&(TempData[1]==0x6f))&&(((TempData[3]==0x4f)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))||((TempData[3]==0x6d)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))))

{//09-35-00、09-55-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if(((TempData[0]==0x06)&&(TempData[1]==0x3f))&&(((TempData[3]==0x66)&&(TempData[4]==0x3f)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))||((TempData[3]==0x66)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))))

{//10-40-00、10-45-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if((TempData[0]==0x06)&&(TempData[1]==0x06)&&(TempData[3]==0x4f)&&(TempData[4]==0x3f)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))

{//11-30-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if((TempData[0]==0x06)&&(TempData[1]==0x4f)&&(TempData[3]==0x6d)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))

{//13-55-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if((TempData[0]==0x06)&&(TempData[1]==0x66)&&(TempData[3]==0x3f)&&(TempData[4]==0x3f)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))

{//14-00-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if(((TempData[0]==0x06)&&(TempData[1]==0x66))&&(((TempData[3]==0x66)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))||((TempData[3]==0x6d)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))))

{//14-45-00、14-50-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if(((TempData[0]==0x06)&&(TempData[1]==0x6d))&&(((TempData[3]==0x4f)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))||((TempData[3]==0x6d)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))))

{//15-35-00、15-55-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if(((TempData[0]==0x06)&&(TempData[1]==0x7d))&&(((TempData[3]==0x66)&&(TempData[4]==0x3f)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))||((TempData[3]==0x66)&&(TempData[4]==0x6d)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))))

{//16-40-00、16-45-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}

if((TempData[0]==0x06)&&(TempData[1]==0x07)&&(TempData[3]==0x4f)&&(TempData[4]==0x3f)&&(TempData[6]==0x3f)&&(TempData[7]==0x3f))

{//17-30-00响铃

while(i--)

{

DelayMs

(1);

SPEAKER=!

SPEAKER;

}

i=500;

}}}}

主程序的程序流程图如图5所示。

图5主程序的程序流程图

4.3.3中断程序设计及流程图

在程序设计中应用到了定时器中断,来实现每隔一段时间就让读取时间的读标志位为1,并调用显示时间的函数将读取的时间显示在数码管上。

定时器使用的是定时器0,使用模式1,16位定时器,使用的中断是中断1。

定时器的时间为2ms,然后进行显示时间,并每过100ms将读取时间的都标志位置1。

中断处理子程序如下:

voidTimer0_isr(void)interrupt1

{

staticunsignedintnum;

TH0=(65536-2000)/256;

TL0=(65536-2000)%256;

Display(0,8);

num++;

if(num==50)

{

num=0;

ReadTimeFlag=1;

}

}

中断处理子程序的程序流程图如图6所示。

图6定时器中断处理子程序

4.3.4软件模块1设计

实时时钟模块的设计需要对实时时钟写入时间和读取时间进行详细设计。

对实时时钟的操作需要对地址操作,在没有写保护的情况下,当产生一个高电平时可以给地址初始化,向地址写入数据,每写一个数据后地址会增加,当写完后则停止,否则一直写入数据。

在读数据的时候也是一样的,当产生一个高电平时,写入芯片的地址,将这个地址的数据读出放到一个数组中,地址自动增加,当数据读完时则结束,否则一直读取数据。

具体程序流程图如图7、图8所示。

图7ds1302写操作的程序流程图

图8ds1302读操作程序流程图

4.3.5软件模块2设计

显示时钟时间模块的设计主要是将从实时时钟读取出来的时间显示到数码管上,通过给段锁存和位锁存使能和关闭,让所有数码管显示对应的时间数值。

模块的形式参数有两个,一个是用来计数哪个位数码管点亮,一个是所有数码管的个数。

算法的流程图如图7所示。

图9显示模块的程序流程图

4.3.6软件模块3设计

独立按键扫描模块的设计需要对了解8个独立按键的原理,当有按键被按下时会产生低电平信号,信号会通过杜邦线传递给单片机,从而判断哪个按键被按下,然后返回一个数值。

具体程序流程图如图10所示。

图10独立按键模块程序流程图

5总结

经过这次的课程设计,使我们对单片机系统有了更深的认识,也锻炼了我们对所学知识的认知应用能力,在老师的悉心指导下,使我们认识到课程设计的重要性,同时也感受到理论与实践之间的差距,使我们对单片机系统的应用有了更加深刻的认识。

这次课程设计,也进一步巩固了KEIL软件的使用方法,并学会了一些看似简单但又不一定会的东西,例如如何烧程序到芯片内以及如何对做出的硬件进行硬件和软件调试等。

本次的课程设计的作品能够有效的反应出作息的时间和到达规定的时间时系统会打铃以提示作息时间的变化,也可以利用按键来手动打铃。

在设计过程中,也存在一些问题,虽然有不足的地方但是最终克服了了存在的问题,在克服问题的过程中我们也学到了很多宝贵的经验和知识

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1