嵌入式系统课程设计.docx
- 文档编号:3167890
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:16
- 大小:392.56KB
嵌入式系统课程设计.docx
《嵌入式系统课程设计.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计.docx(16页珍藏版)》请在冰点文库上搜索。
嵌入式系统课程设计
软件学院
课程设计报告书
课程名称嵌入式系统
设计题目模拟电梯控制系统
专业班级
学号
姓名
指导教师
2013年6月
目录
1设计时间3
2设计目的3
3设计任务3
4设计内容3
4.1总体方案设计3
4.1.1需求规定3
4.1.2核心部件选型4
4.1.3系统开发环境4
4.2硬件设计5
4.2.1硬件开发环境简介5
4.3软件设计6
4.3.1软件开发环境介绍6
4.3.2主程序设计及流程图7
4.3.3中断程序设计及流程图7
5总结14
参考文献15
成绩评定15
1设计时间
时间:
2013年6月7日~2013年6月14日
2设计目的
本课程设计是学习《嵌入式系统》课程后必要的实践教学环节。
是检验学生是否掌握相关专业课程知识的重要手段,以学生为主体,充分调动学生的积极性和创造性,重视学生实际动手能力的培养。
课程设计通过使学生加深理解、巩固课堂教学和平时实验内容。
本次课程设计师利用嵌入式系统所学的知识,设计一个模拟电梯控制系统。
3设计任务
模拟电梯系统的设计要求如下:
(1)通过键盘输入层数,输入之后LED小灯从当前位置向上或向下运行。
(2)运行到对应的楼层,数码管显示楼层号。
(3)LED灯表示运行楼层。
(4)数码管数字大小的增减表示向上、向下。
4设计内容
4.1总体方案设计
4.1.1需求规定
本设计采用AT89S51单片机作为核心,配以适当接口作为输入输出通道。
采用4×4按键矩阵开关电路作为外呼内选呼叫控制。
实际电梯控制系统每层装有一个传感器,从而判断车厢所在位置,本模型由六个独立按键作为楼层到达信号传输给单片机,而后通过74LS164从串口驱动数码管显示楼层数。
当电梯到达所选层,电梯开门延时等待进人并选层,然后延时关门执行请求,若无请求则停在本层等待请求。
软件部分使用汇编语言,利用查询方式来检测用户请求的按键信息,采用74LS245芯片驱动发光二极管。
电路由复位电路复位后,电梯初始位置在一楼,AT89S51将楼层感应电路得来的据通过74LS164驱动显示电路显示出来;如有用户在厢外呼叫,经外呼叫电路把信号输入单片机,由楼层感应电路判断电梯为上升还是下降状态,若方向一致则打开电梯门,用户进入后关门执行操作。
用户通过选层电路把目的层告知AT89S51,控
制电机把用户送至目的层,而后系统等待下次呼叫。
系统的正常工作由时钟电路来保证,显示电路实时显示电梯所在的楼层位置。
4.1.2核心部件选型
1.AT89S51
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
4.1.3系统开发环境
开发环境搭建步骤:
1、根据需求确定开发工具。
2、认识并了解开发板。
3、根据项目要求,配置嵌入式操作系统。
4、配置主机环境:
安装LINUX。
5、在主机上制作交叉工具链,制作调试器GDB。
6、使用制作好的交叉工具链在主机上对BootLoader进行交叉编译,形成可执行的BootLoader镜像文件,通过FLASH编程器把该BootLoader镜像文件烧写到目标板上的FLASH中。
7、在主机上配置串口终端,使用串口线,连接主机和目标板的串口。
8、在主机上进行应用程序源代码编写。
然后在主机上进行源代码的编写。
然后在主机上通过交叉编译,形成可执行程序。
把该可执行程序下载到目标板上,然后在目标板上启动该程序。
4.2硬件设计
4.2.1硬件开发环境简介
EELiod270教学开发平台基于IntelXSCALE架构最新的PXA270嵌入式微处理器。
最高主频可达520MHz,可运行Linux和Linux2.6.11的Linux的操作系统,支持Tiny-X、QT/E等GUI嵌入式图形用户界面,提供完整的驱动和应用程序。
同时还可以支持最新的WindowsCE5.0.NET操作系统。
4.2.2硬件模块设计
1.按键输入模块:
图1按键输入检测电路图
2.数码管模块:
图2八段数码管电路图
3.LED显示模块:
图3LED显示模块电路图
4.3软件设计
4.3.1软件开发环境介绍
ADS集成开发环境是ARM公司推出的ARM核微控制器集成开发工具,英文成熟版本为ADS1.2。
ADS1.2支持ARM10之前的所有ARM系列微控制器,可以在Windows98、WindowsXP、Windows2000以及RedHatLinux上运行。
全称为ARMDeveloperSuite,他的功能非常强大。
他的前身是SDT,SDT是ARM公司几年前的开发环境软件,目前SDT早已经不再升级。
ADS包括了四个模块分别是:
SIMULATOR;C编译器;实时调试器;应用函数库。
ADS的编译器调试器较SDT都有了非常大的改观,ADS1.2提供完整的WINDOWS界面开发环境。
C编译器效率极高,支持c以及c++,使工程师可以很方便的使用C语言进行开发。
提供软件模拟仿真功能,使没有Emulators的学习者也能够熟悉ARM的指令系统。
配合FFT-ICE使用,ADS1.2提供强大的实时调试跟踪功能,片内运行情况尽在掌握。
ADS1.2需要硬件支持才能发挥强大功能。
目前支持的硬件调试器有Multi-ICE以及兼容Multi-ICE的调试工具如FFT-ICE。
ADS由命令行开发工具,ARM实时库,GUI开发环境(CodeWarrior和AXD),适用程序和支持软件组成。
4.3.2主程序设计及流程图
图4主程序流程图
4.3.3中断程序设计及流程图
图5判断中断服务子程序流程图
4.3.4软件设计
定义模块:
#include"config.h"
/*LED8~LED18个LED分别由P1.25~P1.18控制*/
constuint32LEDS8=(0xFF<<18);//P1[25:
18]控制LED8~LED1,低电平点亮
#defineHC595_CS(1<<29)//P0.29口为74HC595的片选
typedefstructNode
{
uint8floor;
structNode*next;
}Node,*LinkList;
/*定义串口模式设置数据结构*/
typedefstructUartMode
{
uint8datab;//字长度,5/6/7/8可选
uint8stopb;//停止位,1/2可选
uint8parity;//奇偶校验位,0-无校验,1-奇校验,2-偶校验
}UARTMODE;
LinkListL;
uint8up,down,keep,stop;//UART0数据接收缓冲区
volatileuint8rcv_new;//接收新数据标志
/*流水灯花样,低电平点亮,注意调用时候用了取反操作*/
constuint32LED_TBL[]={
//0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,//依次逐个叠加
0x01,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//依次逐个点亮
};
/*此表为LED0~F以及L、P的字模*/
uint8constDISP_TAB[]={
//0123456789
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
};
**函数名称:
DelayNS()
**函数功能:
长软件延时
**入口参数:
dly延时参数,值越大,延时越久
**出口参数:
无
**函数名称:
MSPI_Init()
**函数功能:
初始化SPI接口,设置为主机。
**入口参数:
无
**出口参数:
无
**函数名称:
MSPI_SendData()
**函数功能:
向SPI总线发送数据。
**入口参数:
data待发送的数据
**出口参数:
返回值为读取的数据
接收输出模块:
**函数名称:
IRQ_UART0()
**函数功能:
串口0接收中断服务程序
**入口参数:
无
**出口参数:
无
void__irqIRQ_UART0(void)
{
Node*p;
if((U0IIR&0x0F)==0x04)
{p=(Node*)malloc(sizeof(Node));
rcv_new=1;//设置接收到新的数据标志
p->floor=U0RBR;//读取FIFO的数据,并清除中断
if((p->floor-48)>0&&(p->floor-48)<9)
{
p->next=L->next;
L->next=p;
VICVectAddr=0x00;//中断处理结束
}
else
{
rcv_new=0;//设置接收到新的数据标志
VICVectAddr=0x00;//中断处理结束
}
}
}
**函数名称:
UART0_SendByte()
**函数功能:
向串口0发送1字节数据
**入口参数:
dat要发送的数据
**出口参数:
无
voidUART0_SendByte(uint8dat)
{
U0THR=dat;//要发送的数据
}
**函数名称:
UART0_SendBuf()
**函数功能:
向串口发送8字节数据
**入口参数:
无
**出口参数:
无
voidUART0_SendBuf(void)
{
uint8i;
//for(i=0;i<8;i++)
UART0_SendByte(L->next->floor);
while((U0LSR&0x20)==0);//等待数据发送完毕
}
主程序模块:
**函数名称:
main()
**函数功能:
从串口UART0接收字符串"ABCDEFGH",并发送回上位机显示。
**调试说明:
需要PC串口显示终端软件如EasyARM.exe。
uint8rcv_data;
intmain(void)
{
Node*p;
uint8start,end;
uint8i,j,sum=0,k;
uint32temp;
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
UARTMODEset;
start=1;
set.datab=8;
set.stopb=1;
set.parity=0;
rcv_new=0;
loop:
PINSEL0=0x00005505;//设置I/O连接到UART0
PINSEL1=0x00000000;
IODIR=HC595_CS;
PINSEL2=PINSEL2&(~0x08);//P1[25:
16]连接GPIO
IO1DIR=LEDS8;//设置LED1控制口为输出
MSPI_Init();//初始化SPI接口
UART0_Init(115200,set);//串口初始化
U0FCR=0x01;//使能FIFO,并设置触发点为8字节
U0IER=0x01;//允许RBR中断,即接收中断
IRQEnable();//使能IRQ中断
/*使能UART0中断*/
VICIntSelect=0x00000000;//设置所有的通道为IRQ中断
VICVectCntl0=0x20|0x06;//UART0分配到IRQslot0,最高优先级
VICVectAddr0=(uint32)IRQ_UART0;//设置UART0向量地址
VICIntEnable=1<<0x06;//使能UART0中断
p=L->next;
while
(1)
{
if(rcv_new==1)
{
rcv_new=0;
end=rcv_buf[0]-48;
UART0_SendByte(p->floor);
//UART0_SendBuf();
if(start { for(i=start;i<=end;i++) { for(j=start;j<=end;j++) { sum+=LED_TBL[j]; IO1SET=~((sum)<<18); DelayNS(20); IO1CLR=((sum)<<18); DelayNS(20); } rcv_data=MSPI_SendData(DISP_TAB[i]);//发送显示数据 sum=0; } } else{ for(i=start;i>=end;i--) { for(j=start;j>=end;j--) { sum+=LED_TBL[j]; IO1SET=~((sum)<<18); DelayNS(20); IO1CLR=((sum)<<18); DelayNS(20); } rcv_data=MSPI_SendData(DISP_TAB[i]);//发送显示数据 //DelayNS(20);//延时 sum=0; } } for(k=0;k<4;k++) { PINSEL0=0x00000000;//设置管脚连接GPIO IO0DIR=BEEP;//设置BEEP控制口为输出 IO0SET=BEEP;//BEEP停止蜂鸣 DelayNS(20); IO0CLR=BEEP;//BEEP蜂鸣 DelayNS(20); IO0SET=BEEP; } start=end; gotoloop; rcv_data=MSPI_SendData(DISP_TAB[end-48]);//发送显示数据 DelayNS(40);//延时 } } return0; } 5总结 通过这次课程设计我学到很多知识,这些知识不仅仅是课本上的,更多的是实际操作中的,学会了很多新的解题思路,并且还学会了遇到困难的时候如何与同学一起沟通来完成任务,为以后的工作奠定了良好的团队合作基础。 当然设计中还遇到了一些问题,比如: 当输入的楼层有多个时,因为缓存数组只有八个,所以会有丢失数据的现象。 后来请教同学得到了正确的解决办法: 缓存用链表来存数据,这样既可以避免数据丢失,而且在用完一个数据后可以及时释放,避免了空间的浪费。 还遇到的问题有电梯只能按照输入的顺序来运作,不能够判断最优路径。 还是经过与同学的讨论最终得出了解决办法: 在电梯运作之前,对缓存的数据进行优化排序,选出最优路径再运作。 在这次课设中我还学到了很多书本上没有的关于ARM的知识,ARM是一门很实用的课程,如果能够掌握好,将会对以后的学习和工作带来很大的好处。 另外在课设中我还发现自己存在很多不好的习惯,比如总是自以为是,感觉自己什么都会,到后来还是做不出来,耽误了时间,希望在以后的学习生活中能改掉这个毛病。 参考文献 [1]岳庆来.电梯现代智能控制技术.北京: 机械工业出版社,2009. [2]白勇.用B/S模式构建在线考试系统[J],重庆电力高等专科学校学报,2003,10(4): 100~130. [3]魏洪兴,胡亮,曲学楼.嵌入式系统设计与实例开发实验教材Ⅱ一基于ARM9处理器与Linux操作系统,清华大学出版社,2005 [4]许海燕,付炎著.嵌入式系统技术与应用,机械工业出版社,2002 成绩评定 成绩教师签字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 课程设计