嵌入式课程设计电梯实验报告.docx

上传人:b****7 文档编号:10140998 上传时间:2023-02-08 格式:DOCX 页数:16 大小:212.99KB
下载 相关 举报
嵌入式课程设计电梯实验报告.docx_第1页
第1页 / 共16页
嵌入式课程设计电梯实验报告.docx_第2页
第2页 / 共16页
嵌入式课程设计电梯实验报告.docx_第3页
第3页 / 共16页
嵌入式课程设计电梯实验报告.docx_第4页
第4页 / 共16页
嵌入式课程设计电梯实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

嵌入式课程设计电梯实验报告.docx

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

嵌入式课程设计电梯实验报告.docx

嵌入式课程设计电梯实验报告

西安邮电学院

嵌入式硬件课程设计报告

嵌入式系统硬件课程设计题目

电梯控制系统

 

系部名称

计算机系

专业名称

计算机科学与技术

班级

计科0703班

学号

学生姓名

指导教师

时间

20010年12月6日—12月17日

1.实验目的

1)熟悉ARM(LPC2131)&ADSV1.2的环境。

2)了解LPC2131DemoBoard资源、环境;掌握ADS工具使用。

3)熟练掌握ADS工具的使用,掌握ARMC程序设计、调试技术。

4)理解ARM芯片引脚功能选择,理解GPIO的使用设置、输入驱动方法。

5)理解UART串行通信原理,学习ARMUART资源的驱动编程。

2.实验仪器及设备

1)EasyARM2131开发实验板。

2)TKStudioIDE集成开发环境。

3.实验内容

Ø基础实验

内容1:

ARM(LPC2131)&ADSV1.2环境熟悉

♦LPC2131硬件环境介绍;

♦ADS工具简介;

要求:

了解LPC2131DemoBoard资源、环境;掌握ADS工具使用。

内容2:

ADS模板工具&ARMC语言程序设计

♦ADS环境中编程模板的理解与使用;

♦使用ADS工具,基于LPC2131进行简单的C程序设计;

要求:

熟练掌握ADS工具的使用,掌握ARMC程序设计、调试技术;

内容3:

GPIOOutput(LED、Beep)实验

♦理解ARM芯片引脚功能选择;

♦理解GPIO的使用设置、输出驱动方法;

♦熟练掌握ADS工具,基于LPC2131进行简单的C程序设计;

要求:

实现一个秒闪航标灯和蜂鸣。

内容4:

GPIOInput(KeyInput)实验

♦理解ARM芯片引脚功能选择;

♦理解GPIO的使用设置、输入驱动方法;

♦熟练掌握ADS工具,基于LPC2131进行简单的C程序设计;

要求:

实现一个秒闪航标灯和可按键控制的蜂鸣器。

内容5:

EintVIC实验

♦理解ARM芯片引脚功能选择;

♦理解外中断的含义与应用;

♦熟练掌握ADS工具,基于LPC2131进行简单的C程序设计;

要求:

实现一个秒闪航标灯和可按键控制的蜂鸣器(用外中断方式实现)。

内容6:

定时器

♦理解ARM芯片引脚功能选择;

♦理解GPIO的使用设置、输入/输出驱动方法;

♦熟练掌握AD定S工具,基于LPC2131进行简单的C程序设计;

要求:

基于ucosII的GPIO、时器、RTC、串口等综合实验。

内容7:

异步串行口UART

♦理解ARM芯片引脚功能选择;

♦理解GPIO的使用设置、输入/输出驱动方法;

♦理解UART串行通信原理,学习ARMUART资源的驱动编程;

♦熟练掌握ADS工具,基于LPC2131进行简单的C程序设计;

要求:

结合前边内容,实现LPC2131和PC端串行传输数据信息。

Ø课程设计任务要求

课题名称:

电梯控制系统。

要求该控制器应具备如下功能:

♦通过键盘输入楼层,输入之后数码管从当前位置向上或向下运行。

♦运行到对应楼层,显示楼层号。

♦灯表示运行楼层。

♦数码管数字大小增减表示向上、向下。

4.设计过程

1)设计方案

用LED灯显示当前电梯的起始楼层和目标楼层

用数码管显示电梯当前所在的楼层

当电梯到达目标楼层时,用蜂鸣器发出蜂鸣,提示已经到达

通过UART来控制输入楼层,中断控制

2)流程图

3)电路图

按键输入检测电路图

8路LED控制电路图

UART0

数码管

4)程序模块说明

a.定义模块:

#include"config.h"

#defineBEEP1<<7//P0.7控制蜂鸣器,低电平蜂鸣

/*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待发送的数据

**出口参数:

返回值为读取的数据

b.接收输出模块:

**函数名称:

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);//等待数据发送完毕

}

c.主程序模块:

**函数名称:

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.实验过程:

●实验步骤:

首先熟悉开发环境,以及开发板的应用。

熟悉板子上的各个接口的功能。

其次,做基础实验,对GPIO,定时,中断,UART做进一步的熟悉。

然后,对电梯的原理做进一步的了解,设计出基本要求,以及需要的模块和部件。

最后,对各个功能做组合,并进行融合,修改,并做进一步的优化

●遇到的问题

遇到的问题1:

当输入的楼层有多个时,因为缓存数组只有八个,所以会有丢失数据的现象。

解决办法:

缓存用链表来存数据,这样既可以避免数据丢失,而且在用完一个数据后可以及时释放,避免了空间的浪费。

遇到的问题2:

电梯只能按照输入的顺序来运作,不能够判断最优路径。

解决办法:

在电梯运作之前,对缓存的数据进行优化排序,选出最优路径再运作。

实验结果:

实现了基本的简单电梯功能。

6.实验总结和实验心得

通过这次课程设计,我学到了很多东西,原先我对嵌入式系统并没有很深刻的了解,在做完课程设计后,我对,数码管,蜂鸣器,流水灯等一些期间应用有了更深刻的了解,知道了他们的结构和功能,以及相关的函数的功能与运用,真正的把所学的东西运用到了实际中,更好的把课本知识与实际相结合,对我以后的学习有很大帮助。

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

当前位置:首页 > 表格模板 > 合同协议

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

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