您好,欢迎来到九壹网。
搜索
您的当前位置:首页嵌入式系统设计实验报告

嵌入式系统设计实验报告

来源:九壹网
嵌⼊式系统设计实验报告

西安邮电⼤学

嵌⼊式系统设计实验报告专业班级学号学⽣姓名指导教师

学期2013-2014学年第2学期完成⽇期2014-06-25

基于lpc2131的模拟电梯控制实验⼀、实验⽬的

1、熟悉ARM & ADS V1.2 的环境2、理解LPC2131芯⽚引脚功能的选择3、理解GPIO的使⽤设置、输⼊驱动⽅法

4、理解SPI全双⼯同步串⾏通信原理,学习ARM SPI资源的驱动编程5、学习在LPC2131上移植ucosⅡ系统⼆、实验内容及要求

1、通过键盘输⼊楼层,输⼊之后数码管从当前位置向上或向下运⾏,流⽔灯表⽰运动⽅向。2、流⽔灯在运⾏中显⽰电梯正在运⾏的⽅向,并且在电梯到达时在该楼层闪烁3次。3、电梯运⾏到对应楼层,数码管显⽰楼层号。4、流⽔灯表⽰电梯运⾏楼层。

5、系统可同时满⾜多⽤户需求。达到该系统与现实电梯系统的⼀致性。三、系统总体设计(总体⽅案及系统框图)

主要是创建了四个任务,分别为电梯总任务、按键检测任务、电梯⽅向改变任务及电梯向上或向下运⾏任务,然后启动多任务环境,通过事件标志组发送和接收消息,进⽽实现电梯的⼀些基本的功能。

四、系统详细设计(模块详细设计及流程图)

五、系统测试(数据测试结果及分析)

通过键盘按键输⼊楼层数,发送到开发板,数码管和LED灯初始化时会停留在电梯的第⼀层。接受到数据后数码管会⾃动变化到该楼层,并且LED灯在数码管变化的同时会显⽰电梯当前的运动状态,上或者下。在程序运⾏的任何期间都可以从键盘输⼊电梯的楼层数。⽽且程序会⾃动判断要满⾜的⽤户的优先级。

此次试验达到的效果基本与现实中电梯的运⾏模式达到了⼀致。六、总结

在整个课程设计中,我们组员⼀起认真地查找相关资料,然后⼜对书中的相关内容仔细翻阅,通过虚⼼请教和不懈的努⼒,最终完成了整个设计,⼼中的喜悦实在⽆以⾔表。此刻,我⾮常感谢我们组长的⿎励和帮助,感谢同学们诸多的帮助!本次设计不仅让我收获了许多,也让我对以前所学习的ARM知识有了进⼀步的深化与巩固,最关键的是,它给了我⼀份⾃信。但我很明⽩,作品中还存在着⽐较多的不⾜,这些都需要进⼀步的改善,我会不骄傲,不⽓馁,⽤着⾃信与执着尽最⼤努⼒将其完善。

七、附录(代码+注释)#include \"config.h\"#include \"stdlib.h\"

#define KEY1 1 << 16 // P0.16连接KEY1#define KEY2 1 << 17 // P0.17连接KEY2#define KEY3 1 << 18 // P0.18连接KEY3#define KEY4 1 << 19 // P0.19连接KEY4#define KEY5 1 << 20 // P0.20连接KEY5#define KEY6 1 << 21 // P0.21连接KEY6#define BEEP 1 << 7 // P0.7控制蜂鸣器BEEP

#define HC595_CS (1 << 29) //P0.29⼝为74HC595的⽚选

#define TaskStkLengh //Define the Task0 stack length 定义⽤户任务0的堆栈长度int semaphore[7] = {0, 0, 0, 0, 0, 0, 0}; //定义⼀个信号量数组int current_floor;int work_count = 0;int direction;int is_working;

uint8 const DISP_TAB[10] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90}; //数码管显⽰数字列表OS_STK TaskStk [TaskStkLengh]; //Define the Task0 stack 定义⽤户任务0的堆栈OS_STK Task0Stk [TaskStkLengh];OS_STK Task1Stk [TaskStkLengh];OS_STK Task2Stk [TaskStkLengh];OS_FLAG_GRP *direct_chan; //事件标志组OS_EVENT *u_d;

void Elevator(void *pdata); //电梯总任务声明

void Is_button_press(void *pdata); //检测按键任务声明void Direction_change(void *pdata); //电梯⽅向改变任务声明void Up_down(void *pdata); //电梯向上、向下运⾏任务声明void MSPI_Init(void){

PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; // 设置管脚连接SPI// PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x15 << 8) ;SPI_SPCCR = 0x52; // 设置SPI时钟分频

SPI_SPCR = (0 << 3) | // CPHA = 0, 数据在SCK 的第⼀个时钟沿采样(1 << 4) | // CPOL = 1, SCK 为低有效

(1 << 5) | // MSTR = 1, SPI 处于主模式

(0 << 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先(0 << 7); // SPIE = 0, SPI 中断被禁⽌}

uint8 MSPI_SendData(uint8 data){

IOCLR = HC595_CS; // ⽚选74HC595SPI_SPDR = data;

while( 0 == (SPI_SPSR & 0x80)); // 等待SPIF置位,即等待数据发送完毕IOSET = HC595_CS;return(SPI_SPDR);}

int main(void){

INT8U error;OSInit ();

u_d = OSSemCreate(0); //创建向上或向下的信号量

direct_chan = OSFlagCreate(0, &error); //创建⽅向改变的事件标志组

OSTaskCreate (Elevator,(void *)0, &TaskStk[TaskStkLengh - 1], 2); //创建电梯总任务OSStart (); //启动多任务环境return 0;}

void Elevator(void *pdata){

pdata = pdata;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务