![嵌入式系统设计实验报告_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/091371f3-d34e-4421-bcdd-bd86833048d5/091371f3-d34e-4421-bcdd-bd86833048d51.gif)
![嵌入式系统设计实验报告_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/091371f3-d34e-4421-bcdd-bd86833048d5/091371f3-d34e-4421-bcdd-bd86833048d52.gif)
![嵌入式系统设计实验报告_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/091371f3-d34e-4421-bcdd-bd86833048d5/091371f3-d34e-4421-bcdd-bd86833048d53.gif)
![嵌入式系统设计实验报告_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/091371f3-d34e-4421-bcdd-bd86833048d5/091371f3-d34e-4421-bcdd-bd86833048d54.gif)
![嵌入式系统设计实验报告_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-9/29/091371f3-d34e-4421-bcdd-bd86833048d5/091371f3-d34e-4421-bcdd-bd86833048d55.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安邮电大学嵌入式系统设计实验报告专 业班 级学 号学生姓名指导教师学 期2013-2014学年第2学期完成日期2014-06-25基于lpc2131的模拟电梯控制实验1、 实验目的1、 熟悉arm & ads v1.2 的环境2、 理解lpc2131芯片引脚功能的选择3、 理解gpio的使用设置、输入驱动方法4、 理解spi全双工同步串行通信原理,学习arm spi资源的驱动编程5、 学习在lpc2131上移植ucos系统2、 实验内容及要求1、 通过键盘输入楼层,输入之后数码管从当前位置向上或向下运行,流水灯表示运动方向。2、 流水灯在运行中显示电梯正在运行的方向,并且在电梯到达时在该楼层
2、闪烁3次。3、 电梯运行到对应楼层,数码管显示楼层号。4、 流水灯表示电梯运行楼层。5、 系统可同时满足多用户需求。达到该系统与现实电梯系统的一致性。3、 系统总体设计(总体方案及系统框图)主要是创建了四个任务,分别为电梯总任务、按键检测任务、电梯方向改变任务及电梯向上或向下运行任务,然后启动多任务环境,通过事件标志组发送和接收消息,进而实现电梯的一些基本的功能。蜂鸣器模块数码管显示模块spi串口模块lpc2131led显示与键盘模块4、 系统详细设计(模块详细设计及流程图)5、 系统测试(数据测试结果及分析) 通过键盘按键输入楼层数,发送到开发板,数码管和led灯初始化时会停留在电梯的第一层
3、。接受到数据后数码管会自动变化到该楼层,并且led灯在数码管变化的同时会显示电梯当前的运动状态,上或者下。在程序运行的任何期间都可以从键盘输入电梯的楼层数。而且程序会自动判断要满足的用户的优先级。此次试验达到的效果基本与现实中电梯的运行模式达到了一致。六、总结在整个课程设计中,我们组员一起认真地查找相关资料,然后又对书中的相关内容仔细翻阅,通过虚心请教和不懈的努力,最终完成了整个设计,心中的喜悦实在无以言表。此刻,我非常感谢我们组长的鼓励和帮助,感谢同学们诸多的帮助!本次设计不仅让我收获了许多,也让我对以前所学习的arm知识有了进一步的深化与巩固,最关键的是,它给了我一份自信。但我很明白,作品
4、中还存在着比较多的不足,这些都需要进一步的改善,我会不骄傲,不气馁,用着自信与执着尽最大努力将其完善。7、 附录(代码+注释)#include config.h#include stdlib.h#definekey11 16 / p0.16连接key1#definekey21 17 / p0.17连接key2#definekey31 18 / p0.18连接key3#definekey41 19 / p0.19连接key4#definekey51 20 / p0.20连接key5#definekey61 21 / p0.21连接key6#define beep 1 7 / p0.7控制蜂鸣器b
5、eep#define hc595_cs (1 29) /p0.29口为74hc595的片选#definetaskstklengh64/define the task0 stack length 定义用户任务0的堆栈长度 int semaphore7 = 0, 0, 0, 0, 0, 0, 0; /定义一个信号量数组int current_floor; int work_count = 0;int direction;int is_working;uint8 const disp_tab10 = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x
6、80, 0x90; /数码管显示数字列表os_stktaskstk taskstklengh;/define the task0 stack 定义用户任务0的堆栈os_stktask0stk taskstklengh;os_stktask1stk taskstklengh;os_stktask2stk taskstklengh;os_flag_grp *direct_chan; /事件标志组os_event *u_d;void elevator(void *pdata); /电梯总任务声明void is_button_press(void *pdata); /检测按键任务声明void dire
7、ction_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
8、为低有效 (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; / 片选74hc595 spi_spdr = data; while( 0 = (spi_spsr & 0x80);/ 等待spif置位,即等待数据发送完毕 ioset = hc595_cs; return(spi_spdr);int main(void)int8u error;osinit ();u
9、_d = ossemcreate(0); /创建向上或向下的信号量direct_chan = osflagcreate(0, &error); /创建方向改变的事件标志组ostaskcreate (elevator,(void *)0, &taskstktaskstklengh - 1, 2); /创建电梯总任务osstart (); /启动多任务环境return 0;void elevator(void *pdata)pdata = pdata;targetinit (); /初始化目标板pinsel1 = 0x00000000; /选择管脚连接到gpioio0dir = beep; /设置
10、蜂鸣器为输出io0dir = (0x3f) 16; /选择按键作为输入pinsel2 &= 0x08; /选择管脚连接到gpioio1dir = 0xff 18; /选择流水灯作为输出io1set = 0xff 18; /使流水灯处于高电平,灯熄灭mspi_init(); /spi初始化iodir = hc595_cs; /将spi作为输出io0dir = (0x3f) 16; /将p0.16p0.21作为输入ostaskcreate (is_button_press,(void *)0, &task0stktaskstklengh - 1, 4); /创建任务ostaskcreate (di
11、rection_change,(void *)0, &task1stktaskstklengh - 1, 5);ostaskcreate (up_down,(void *)0, &task2stktaskstklengh - 1, 3);while (1)ostimedly(10); /延时void is_button_press(void *pdata) /判断按键任务int8u error;pdata = pdata;targetinit (); /目标板初始化化while (1)if (io0pin & key1) = 0) /按下1号键 if (semaphore1 != 1) / i
12、o1clr = 1 18; /使第一个流水灯点亮semaphore1 = 1; /将信号量置位work_count+; /电梯工作量增加else if (io0pin & key2) = 0) /按下2号键时 if (semaphore2 != 1) io1clr = 1 19; /使第二个流水灯点亮semaphore2 = 1;work_count+;else if (io0pin & key3) = 0) /按下3号键时 if (semaphore3 != 1) io1clr = 1 20; /使第三个流水灯点亮semaphore3 = 1;work_count+; else if (io
13、0pin & key4) = 0) /按下4号键时 if (semaphore4 != 1) io1clr = 1 21; /使第四个流水灯点亮semaphore4 = 1;work_count+;else if (io0pin & key5) = 0) /按下5号键时 if (semaphore5 != 1) io1clr = 1 22; /使第五个流水灯点亮 semaphore5 = 1;work_count+;else if (io0pin & key6) = 0) /按下6号键时 if (semaphore6 != 1) io1clr = 1 23;semaphore6 = 1;wor
14、k_count+;if (is_working = 1) /判断电梯是否运行 ostimedly(os_ticks_per_sec * 0.2);/延时0.2秒else if (work_count != 0) osflagpost(direct_chan, 0x02, os_flag_set, &error); /事件标志组发送出去ostimedly(os_ticks_per_sec * 0.2);/延时0.2秒else direction = 0;void direction_change(void *pdata)uint8 error;int floor_temp;int up, dow
15、n;pdata = pdata;targetinit (); /目标板初始化direction = 0;while (1)osflagpend(direct_chan, 0x03, os_flag_wait_set_all + os_flag_consume, 0, &error); /接收事件标志组发送的消息if (direction = 1) for (floor_temp = current_floor + 1; floor_temp = 1 & !semaphorefloor_temp; floor_temp-);if (floor_temp = 0) /如果楼层已到达底层时,改变方向
16、向上运行 direction = 1;else if (direction = 0) is_working = 1;ostimedly(os_ticks_per_sec);is_working = 0;if (work_count = 1) for (floor_temp = 1; floor_temp floor_temp) direction = -1;else direction = 1;else if (current_floor = 1) direction = 1;else if (current_floor = 6) direction = -1;else for (floor_
17、temp = current_floor + 1; floor_temp = 1 & !semaphorefloor_temp; floor_temp-);down = floor_temp;if (up - current_floor current_floor - down) /首先响应距离较近的楼层 direction = -1;else if (up - current_floor current_floor - 1) direction = -1;else if (6 - current_floor current_floor - 1) direction = 1;else dire
18、ction = 1;ossempost(u_d);void up_down(void *pdata)int count;uint8 error;pdata = pdata;targetinit (); /目标板初始化current_floor = 1;mspi_senddata(disp_tabcurrent_floor); io1clr = 1 18; /使第一个流水灯点亮osflagpost(direct_chan, 0x01, os_flag_set, &error);while (1) ossempend(u_d, 0, &error); /接收信号量ostimedly(os_tick
19、s_per_sec); /延时io1set = 1 (17 + current_floor); /将当前楼层灯熄灭if (direction = 1) current_floor+;else if (direction = -1) current_floor-;io1clr = 1 (17 + current_floor); /使当前楼层灯点亮mspi_senddata(disp_tabcurrent_floor); /向数码管发送楼层消息if (semaphorecurrent_floor = 1) count = 3;while (count) /到达目标楼层后灯闪三下 ostimedly
20、(os_ticks_per_sec / 2);io1set = 1 (17 + current_floor); /ostimedly(os_ticks_per_sec / 2);io1clr |= 1 (17 + current_floor);count-;work_count-;semaphorecurrent_floor = 0; /信号量还原为0 osflagpost(direct_chan, 0x01, os_flag_set, &error); 基于lpc2131的模拟mp3播放器实验1、 实验目的6、 熟悉arm & ads v1.2 的环境7、 理解lpc2131芯片引脚功能的选
21、择8、 理解gpio的使用设置、输入驱动方法9、 理解pwm的通信原理,学习arm pwm资源的通信编程10、 学习在lpc2131上移植ucos系统2、 实验内容及要求 (1)通过键盘输入,进入mp3播放器相应的功能选项。 (2)mp3播放器具备的功能选项为:播放、暂停、停止、音量控制、音乐下载。 (3)mp3播放器响应进入各功能状态时,蜂鸣器蜂鸣。 (4)流水灯表示mp3播放器当前所处的功能状态。 (5)蜂鸣器蜂鸣声音的大小代表音量的大小,音量控制状态和音乐下载状态可分别与其他3种状态同事存在。 (6)数码管数字大小表示执行mp3各功能状态的时间。3、 系统总体设计(总体方案及系统框图)系
22、统主要创建了六个任务,分别为mp3总任务、判断按键任务、播放音乐任务、控制音量任务、播放上一曲或下一曲任务及暂停或停止任务,然后启动多任务环境,通过创建的消息邮箱发送并接收消息,进而实现mp3播放的一些简单功能。蜂鸣器模块数码管显示模块lpc2131pwm串口模块led显示与键盘模块4、 系统详细设计(模块详细设计及流程图)5、 系统测试(数据测试结果及分析)通过键盘按键输入相应功能,发送到开发板,数码管和led灯接收到数据后,数码管会自动变化到该按键号,并且相应的led灯在数码管变化的同时会点亮。在程序运行的任何期间都可以从键盘输入相应功能,而且程序会自动判断要满足的用户的优先级。此次试验实
23、现了简单的基本mp3功能。6、 总结通过这次课程设计,使我对以前完全陌生的arm 软件有了初步的接触,我学到了如何在arm中实现基本的mp3播放功能。原先我对嵌入式系统并没有很深刻的了解,在做完课程设计后,我对数码管、蜂鸣器及流水灯的结构和功能有了更进一步的了解,并且知道了一些相关函数的功能与运用,真正的把所学的东西运用到了实际中,更好的把课本知识与实际相结合,对我以后的学习有很大帮助。7、 附录(代码+注释)#include config.h#include stdlib.h#include music.h#definekey11 16 / p0.16连接key1#definekey21 1
24、7 / p0.17连接key2#definekey31 18 / p0.18连接key3#definekey41 19 / p0.19连接key4#definekey51 20 / p0.20连接key5#definekey61 21 / p0.21连接key6#define beep 1 7 / p0.7控制蜂鸣器beep#define hc595_cs (1 0; dly-) for(i = 0; i 0x7ffff; i+);uint8 const disp_tab10 = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x9
25、0; os_stktaskstk taskstklengh;/define the task0 stack 定义用户任务0的堆栈os_stktask0stk taskstklengh;os_stktask1stk taskstklengh;os_stktask2stk taskstklengh;os_stktask3stk taskstklengh;os_stktask4stk taskstklengh;void mp3(void *pdata); /对mp3主任务声明void is_button_press(void *pdata); /对判断按键任务声明void pwm(void *pda
26、ta); /对音乐播放任务声明void voicepend(void *pdata); /对控制音量任务声明void b_npend(void *pdata); void p_spend(void *pdata);uint32 voice_global;uint32 b_n_global;uint32 p_s_global;void mspi_init(void) /spi初始化 pinsel0 = (pinsel0 & 0xffff00ff) | 0x00005500;/ 设置管脚连接spipinsel0 = (pinsel0 & (0xff 8) | (0x15 8) ; spi_spcc
27、r = 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; / 片选74hc595 spi_spdr = data; while( 0 = (spi_spsr & 0x80);/ 等待spif置位,即等待数据发送完毕 ioset = hc595_cs; return(spi_spdr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阅读《金庸》小说知识竞赛考试题库
- 财产保险合同(2篇)
- 智慧照明控制系统合同(2篇)
- 2025年苏科新版七年级历史下册阶段测试试卷含答案
- 2025年湘师大新版选择性必修2化学上册月考试卷
- 2025年广州体育职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 2025年平顶山工业职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 初级经济师人力资源管理-2025初级经济师《人力资源管理》预测试卷3
- 初级经济师基础知识-初级经济师考试《基础知识》模拟试卷4
- 2025年商丘职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 走新型城镇化道路-实现湘潭城乡一体化发展
- 江苏中国中煤能源集团有限公司江苏分公司2025届高校毕业生第二次招聘6人笔试历年参考题库附带答案详解
- 【语文】第23课《“蛟龙”探海》课件 2024-2025学年统编版语文七年级下册
- 北师版七年级数学下册第二章测试题及答案
- 2025年全体员工安全意识及安全知识培训
- 2025警察公安派出所年终总结工作汇报
- 机动车检测站新换版20241124质量管理手册
- 2024年决战行测5000题言语理解与表达(培优b卷)
- 中国游戏发展史课件
- 2025年慢性阻塞性肺疾病全球创议GOLD指南修订解读课件
- 工程数学试卷及答案
评论
0/150
提交评论