嵌入式系统设计实验报告
嵌入式系统实习报告

嵌入式系统实习报告一、嵌入式系统实习报告1、实习项目简介(1)在实习期间,我参与了一项嵌入式系统开发项目。
该项目的目标是设计和开发一个嵌入式系统,用于控制并监测一个温室的环境参数,如温度、湿度和光照强度等。
为了实现这个目标,我需要进行硬件设计、嵌入式编程和外设控制等方面的实践。
2、硬件设计经验和成果展示(1)在硬件设计方面,我负责选择和设计相应的传感器和执行器,并与其他团队成员进行紧密合作,确保系统的整体性能和稳定性。
我了解了传感器的工作原理和选择方法,并根据项目的需求选择了适合的温度、湿度和光照传感器。
在执行器方面,我选择了合适的风扇和灯光控制器,以便对温室内的环境进行调控。
(2)在设计过程中,我还学习了相关的电路原理和布局设计。
我根据传感器和执行器的要求,设计了相应的电路,并进行了仿真和测试。
通过这个过程,我熟悉了硬件设计的流程和方法,并深入了解了嵌入式系统的硬件架构。
3、嵌入式编程经验和成果展示(1)在嵌入式编程方面,我使用C语言进行了嵌入式系统的软件开发。
我根据项目的需求,编写了相应的程序,实现了对传感器和执行器的数据读取和控制。
我学习了嵌入式系统的基本编程思想和方法,如中断处理、定时器和IO口控制等。
(2)在编程过程中,我遇到了一些困难,如如何优化程序的运行效率和内存开销,以及如何处理实时数据的采集和处理等。
为了解决这些困难,我查阅了相关的资料并与导师和同事进行了讨论和交流。
最终,我通过对程序的优化和对数据采集时间的控制,成功解决了这些问题,并达到了预期的效果。
4、外设控制经验和成果展示(1)为了实现对温室环境的控制,我学习并实践了外设控制的方法。
我使用了GPIO接口来控制风扇和灯光的开关,通过PWM信号来控制风扇和灯光的转速和亮度。
我还学习了串口通信和I2C总线通信等方法,以实现与其他设备的数据交换和控制。
(2)在外设控制过程中,我也遇到了一些问题,如如何正确配置和使用外设引脚、如何处理外设的中断和异常等。
嵌入式系统实习报告

嵌入式系统实习报告一、引言嵌入式系统作为一种高度集成的计算机系统,广泛应用于各行各业。
为了更好地学习和了解嵌入式系统的设计和开发过程,本文将对笔者在实习期间所参与的嵌入式系统项目进行总结和分享。
二、实习项目介绍实习期间,我参与了一家科技公司的嵌入式系统项目。
该项目旨在开发一款智能家居系统,通过将各种传感器、控制器和网络通信模块集成在一起,实现对家居设备的控制和监测。
我在项目中主要负责嵌入式系统的硬件设计和软件开发。
三、硬件设计1. 系统架构设计在项目初期,我与团队成员一起进行了系统架构设计,确定了系统所需的主要功能和硬件组件。
我们选择了一款高性能的处理器作为系统的核心,并根据需求选用了适当的传感器和控制器。
同时,为了提高系统的可靠性和稳定性,我们对系统进行了冗余设计和电磁兼容性测试。
2. 电路设计与组装在确定了系统所需的硬件组件后,我负责进行电路设计和组装工作。
我使用Altium Designer等工具进行电路设计,确保电路的稳定性和可靠性。
在组装过程中,我严格按照设计要求和标准进行操作,保证每个电路板的质量和性能。
3. 硬件调试与验证完成电路设计和组装后,我进行了硬件调试和验证工作。
我使用示波器、逻辑分析仪等工具进行信号波形监测和分析,确保硬件与软件之间的正常通信。
同时,我进行了一系列功能测试,包括传感器的准确性和响应速度测试,以及控制器的稳定性和可控性测试。
四、软件开发1. 系统软件架构设计在硬件设计和调试完成后,我开始进行系统软件的开发工作。
我采用C语言和汇编语言进行编程,根据系统需求和硬件设计规范,设计了系统的软件架构。
我采用了模块化设计思想,将系统的不同功能分解为独立的模块,并通过消息队列和信号量进行模块之间的通信和同步。
2. 驱动程序开发为了实现对各种传感器和控制器的控制和读取,我编写了相应的驱动程序。
通过底层硬件接口的封装,我实现了对各种硬件设备的访问和控制。
同时,我对驱动程序进行了性能优化和稳定性测试,确保其能够正常运行和响应系统的指令调用。
嵌入式系统实验报告

嵌入式系统实验报告引言嵌入式系统作为一种广泛应用于各行各业的计算机系统,其本身具有一定的难度与挑战。
本实验报告将围绕嵌入式系统的设计、开发以及应用展开讨论,旨在总结并分享在实验中所获得的经验与知识。
一. 实验背景嵌入式系统是指以特定功能为目标的计算机系统,其设计与开发过程相较于传统的计算机系统更为复杂和精细。
本次实验的主要目标是通过设计一个基于嵌入式系统的智能家居控制器,来探索嵌入式系统的应用与实践。
二. 实验内容2.1 硬件设计嵌入式系统的硬件设计是整个实验的基础,其合理性与稳定性直接影响系统的性能和可靠性。
在本次实验中,我们选择了一块主频为xx的处理器作为核心,配备了丰富的外设接口,如GPIO、串口等。
我们还为系统增加了一块液晶显示屏和一组按键,以实现简单的用户交互。
2.2 软件开发在硬件设计完成后,我们开始进行软件开发。
首先,我们需要选择一个合适的操作系统作为嵌入式系统的基础。
针对本次实验,我们选择了xx操作系统,其具备较强的实时性和稳定性,能够满足我们对系统性能的要求。
接着,我们进行了嵌入式系统的驱动程序开发。
通过编写各个外设的驱动程序,我们实现了与液晶显示屏和按键的交互,并将其与处理器进行了适当的接口配置。
另外,我们还开发了嵌入式系统的应用程序。
通过编写智能家居控制器的代码,我们成功实现了对家居设备的远程控制和监测。
用户可以通过液晶显示屏和按键进行交互,实现对家居设备的开关、调节和状态查看等操作。
三. 实验结果与分析经过实验测试,我们发现嵌入式系统在智能家居领域的应用具有较高的可行性与实用性。
通过嵌入式系统的控制,用户可以方便地实现对家居设备的远程操控,提升了家居智能化的程度。
同时,嵌入式系统的实时性和稳定性使得智能家居控制器具备了较高的安全性和可靠性。
然而,在实验过程中我们也遇到了一些挑战。
其中,系统的驱动程序开发是较为复杂的一环,需要仔细理解硬件接口和协议,并进行合理的配置。
此外,系统的稳定性和功耗管理也是需要重点关注的问题。
精选嵌入式系统实习报告3篇

精选嵌入式系统实习报告3篇嵌入式系统实习报告篇1ARM嵌入式系统综合设计一.实习时间和地点安排1.实习时间:20xx年XX月03 日—— 20xx年XX月14日,共两周的时间。
2.每天的实习时间安排:上午:8:30——11:30下午:13:30——15:303.实习地点:校内。
二.实习目的1.掌握电子元器件的焊接原理和方法。
2.掌握ARM7 LPC2132控制程序的编写方法。
3.掌握调试软件和硬件的方法。
三.实习内容与要求1.根据设计要求焊接好电路板并测试焊接无误。
2.绘制流程图并编写程序。
3.编译通过后,将程序下载到LPC2132进行调试。
4.调试成功后编写实习报告。
四.LPC2132芯片介绍LPC2132最小系统图及其介绍概述LPC2132是基于一个支持实时仿真和嵌入式跟踪的32/16 位 ARM7TDMI-STM CPU 的微控制器,并带有 32kB、64kB、512 kB 的嵌入的高速Flash 存储器。
128 位宽度的存储器接口和独特的加速结构使 32 位代码能在最大时钟速率下运行。
对代码规模有严格控制的应用可使用 16 位 Thumb?模式将代码规模降低超过 30%,而性能的损失却很小。
较小的封装和极低的功耗使 LPC2131/2132/2138 可理想地用于小型系统中,如访问控制和 POS 机。
宽范围的串行通信接口和片内 8/16/32kB 的 SRAM 使LPC2131/2132/2138 非常适用于通信网关、协议转换器、软 modem 、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。
多个 32 位定时器、1 个或 2 个 10 位 8 路 ADC 、10 位 DAC 、PWM 通道和 47 个 GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制和医疗系统。
特性1.小型 LQFP64 封装的 16/32 位 ARM7TDMI-S 微控制器。
嵌入式报告实验报告

嵌入式报告实验报告1. 引言嵌入式系统作为一种特殊的计算机系统,应用广泛且日益重要。
嵌入式报告实验是对嵌入式系统进行实际操作和测试的过程,旨在验证嵌入式系统的功能和性能,以评估其是否满足设计要求。
本报告将详细介绍嵌入式报告实验的设计与实施,并对实验结果进行分析与总结。
2. 实验设计2.1 实验目的嵌入式报告实验的目的是通过设计和实施一系列测试来评估嵌入式系统的性能和功能。
具体目标包括但不限于:验证系统的实时性、稳定性和可靠性;测试系统的各种输入输出功能;评估系统对异常情况的处理能力。
2.2 实验环境实验使用的嵌入式系统硬件为XX处理器,集成了XX模块和XX接口。
软件方面,使用XX嵌入式操作系统和XX开发工具进行系统开发和测试。
2.3 实验步骤1) 配置硬件环境:将嵌入式系统与外部设备连接,确保硬件环境正常。
2) 编写测试程序:根据实验目标,编写相应的测试程序,包括输入输出测试、性能测试和异常情况测试等。
3) 软件调试:通过软件调试工具对测试程序进行调试,确保程序逻辑正确。
4) 硬件调试:通过硬件调试工具对嵌入式系统进行调试,确保硬件模块正常工作。
5) 实验运行:将测试程序下载到嵌入式系统中,运行测试程序并记录实验数据。
6) 数据分析与总结:对实验数据进行分析和总结,评估嵌入式系统的性能和功能是否满足设计要求。
3. 实验结果与分析3.1 输入输出测试通过设计一系列输入输出测试用例,测试嵌入式系统的输入输出功能。
测试包括但不限于:按键输入、传感器数据采集、外部设备通信等。
实验结果表明,嵌入式系统的输入输出功能正常,能够准确获取和处理各种输入信号,并成功输出相应的结果。
3.2 性能测试通过设计一系列性能测试用例,测试嵌入式系统的处理能力和实时性。
测试包括但不限于:任务切换速度、响应时间、系统负载等。
实验结果表明,嵌入式系统具有较高的处理能力和实时性,能够快速响应各种任务并保持系统的稳定性。
3.3 异常情况测试通过设计一系列异常情况测试用例,测试嵌入式系统对异常情况的处理能力。
嵌入式实训报告范文2篇

嵌入式实训报告范文嵌入式实训报告范文精选2篇(一)嵌入式实训报告一、实训目的和背景嵌入式实训的目的是通过设计和实现一个嵌入式系统,培养学生的嵌入式系统开发才能和团队协作才能。
本次实训的背景是为了满足社会对嵌入式系统开发人才的需求,进步学生的实际动手才能。
二、实训内容1. 硬件平台的选择和搭建:选择了一款ARM开发板作为硬件平台,并搭建了相应的开发环境。
2. 系统设计和分析:根据实训要求,我们团队设计了一个智能门锁系统,包括用户认证、门锁控制和远程监控功能。
3. 软件开发:使用C语言和嵌入式开发工具进展软件开发,实现了用户认证、门锁控制和远程监控等功能。
4. 硬件连接和调试:将开发板和相关传感器、执行器等硬件设备进展连接和调试,确保系统可以正常运行。
5. 功能测试和调优:对系统进展全面测试,发现并修复了一些问题,并对系统进展了性能优化。
三、实训心得和体会通过本次实训,我深入认识到嵌入式系统开发的复杂性和挑战性。
在实训过程中,我们团队遇到了许多问题,比方硬件和软件的兼容性、性能优化等方面。
但是通过团队的努力和合作,我们成功解决了这些问题,并完成了一个功能完善的嵌入式系统。
此外,我还学到了许多软件开发和硬件调试的技巧,进步了自己的实际动手才能。
在团队协作方面,我们团队成员之间互相配合,共同解决问题,形成了良好的协作机制。
总结起来,本次嵌入式实训让我受益匪浅,学会了许多实际应用的技能和知识,并进步了自身的综合才能。
四、实训成果展示在实训完毕后,我们团队成功完成了一个智能门锁系统,具备用户认证、门锁控制和远程监控等功能。
系统的稳定性和可靠性得到了验证,并且在实际使用中得到了积极的反应。
附图:〔展示系统界面、硬件设备连接示意图等〕五、实训改良意见尽管本次实训获得了良好的成果,但仍有一些方面需要改良。
首先,实训的时间安排可以更合理一些,以便更充分地利用时间进展理论操作。
其次,可以增加一些真实场景的案例分析和解决方案的设计,以提升学生的实际应用才能。
嵌入式系统实验报告.doc

嵌入式系统实验报告..嵌入式系统设计实验报告班级:学号:姓名:成绩:指导教师:1. 实验一1.1 实验名称博创UP-学号:姓名:成绩:指导教师:1. 实验一1.1 实验名称博创UP:运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端;在接下来的对话框中选择ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
(2)JTAG 驱动程序的安装:执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装JTAG 软件。
1.6 实验过程与分析(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装1.7 实验结果总结通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。
1.8 心得体会通过本次实验对嵌入式实验有了初步的了解,对基本开发流程也有了初步的了解。
2. 实验二2.1 实验名称ADS1.2软件开发环境使用方法2.2 实验目的熟悉ADS1.2开发环境,学会ARM仿真器的使用。
使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
2.3 实验环境(1)ADS1.2开发环境(2)博创UP-在接下来的对话框中选择ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
(2)JTAG 驱动程序的安装:执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装JTAG 软件。
1.6 实验过程与分析(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装1.7 实验结果总结通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。
嵌入式实验设计实训报告

一、实验背景随着信息技术的飞速发展,嵌入式系统在各个领域得到了广泛的应用。
为了让学生更好地掌握嵌入式系统设计的相关知识,提高学生的动手能力和实际操作能力,我们开展了嵌入式实验设计实训。
本次实训以ARM处理器为平台,通过实际操作,让学生了解嵌入式系统的基本原理和设计方法。
二、实验目的1. 熟悉ARM处理器的基本架构和编程环境。
2. 掌握嵌入式系统设计的基本流程和方法。
3. 培养学生的动手能力和实际操作能力。
4. 提高学生对嵌入式系统的认知和应用能力。
三、实验内容1. 实验环境(1)硬件平台:ARM处理器开发板(2)软件平台:Keil uVision5、GNU ARM Embedded Toolchain2. 实验步骤(1)搭建实验环境首先,将开发板连接到计算机,并安装Keil uVision5和GNU ARM Embedded Toolchain软件。
接着,配置开发板,使其能够正常运行。
(2)编写程序根据实验要求,编写嵌入式系统程序。
程序主要包括以下几个方面:1)初始化:设置时钟、GPIO、中断等。
2)主循环:实现程序的主要功能。
3)中断处理:处理外部中断。
4)延时函数:实现延时功能。
(3)编译程序将编写好的程序编译成可执行文件。
(4)下载程序将编译好的程序下载到开发板上。
(5)调试程序在开发板上运行程序,通过串口调试软件观察程序运行情况,并对程序进行调试。
(6)实验报告根据实验内容,撰写实验报告。
3. 实验项目(1)点亮LED灯通过控制GPIO端口,实现LED灯的点亮和熄灭。
(2)按键控制LED灯通过检测按键状态,控制LED灯的点亮和熄灭。
(3)定时器实现定时功能使用定时器实现定时功能,例如定时关闭LED灯。
(4)串口通信实现串口通信,发送和接收数据。
四、实验结果与分析1. 点亮LED灯实验成功实现了通过控制GPIO端口点亮LED灯的功能。
2. 按键控制LED灯实验成功实现了通过检测按键状态控制LED灯的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电大学嵌入式系统设计实验报告专业班级学号学生姓名指导教师学期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 64 //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;TargetInit (); //初始化目标板PINSEL1 = 0x00000000; //选择管脚连接到GPIOIO0DIR = BEEP; //设置蜂鸣器为输出IO0DIR = ~(0x3F) << 16; //选择按键作为输入PINSEL2 &= ~0x08; //选择管脚连接到GPIOIO1DIR = 0xFF << 18; //选择流水灯作为输出IO1SET = 0xFF << 18; //使流水灯处于高电平,灯熄灭MSPI_Init(); //SPI初始化IODIR = HC595_CS; //将SPI作为输出IO0DIR = ~(0x3F) << 16; //将p0.16~p0.21作为输入OSTaskCreate (Is_button_press,(void *)0, &Task0Stk[TaskStkLengh - 1], 4); //创建任务OSTaskCreate (Direction_change,(void *)0, &Task1Stk[TaskStkLengh - 1], 5);OSTaskCreate (Up_down,(void *)0, &Task2Stk[TaskStkLengh - 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 (semaphore[1] != 1) //{IO1CLR = 1 << 18; //使第一个流水灯点亮semaphore[1] = 1; //将信号量置位work_count++; //电梯工作量增加}}else if ((IO0PIN & KEY2) == 0) //按下2号键时{if (semaphore[2] != 1){IO1CLR = 1 << 19; //使第二个流水灯点亮semaphore[2] = 1;work_count++;}}else if ((IO0PIN & KEY3) == 0) //按下3号键时{if (semaphore[3] != 1){IO1CLR = 1 << 20; //使第三个流水灯点亮semaphore[3] = 1;work_count++;}}else if ((IO0PIN & KEY4) == 0) //按下4号键时{if (semaphore[4] != 1){IO1CLR = 1 << 21; //使第四个流水灯点亮semaphore[4] = 1;work_count++;}}else if ((IO0PIN & KEY5) == 0) //按下5号键时{if (semaphore[5] != 1){IO1CLR = 1 << 22; //使第五个流水灯点亮semaphore[5] = 1;work_count++;}}else if ((IO0PIN & KEY6) == 0) //按下6号键时{if (semaphore[6] != 1){IO1CLR = 1 << 23;semaphore[6] = 1;work_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, down;pdata = pdata;TargetInit (); //目标板初始化direction = 0;while (1){OSFlagPend(direct_chan, 0x03, OS_FLAG_W AIT_SET_ALL + OS_FLAG_CONSUME, 0, &error); //接收事件标志组发送的消息if (direction == 1){for (floor_temp = current_floor + 1; floor_temp <= 6 && !semaphore[floor_temp]; floor_temp++);if (floor_temp == 7) //如果楼层已到达顶层时,改变方向向下运行{direction = -1;}}else if (direction == -1){for (floor_temp = current_floor - 1; floor_temp >= 1 && !semaphore[floor_temp]; floor_temp--);if (floor_temp == 0) //如果楼层已到达底层时,改变方向向上运行{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 <= 6 && !semaphore[floor_temp]; floor_temp++);if (current_floor > floor_temp){direction = -1;}else{direction = 1;}}else {if (current_floor == 1){direction = 1;}else if (current_floor == 6){direction = -1;}else{for (floor_temp = current_floor + 1; floor_temp <= 6 && !semaphore[floor_temp]; floor_temp++);up = floor_temp;for (floor_temp = current_floor - 1; floor_temp >= 1&& !semaphore[floor_temp]; floor_temp--);down = floor_temp;if (up - current_floor > current_floor - down) //首先响应距离较近的楼层{direction = -1;}else if (up - current_floor < current_floor - down){direction = 1;}else {if (6 - current_floor > current_floor - 1){direction = -1;}else if (6 - current_floor < current_floor - 1){direction = 1;}else {direction = 1;}}}}}OSSemPost(u_d);}}void Up_down(void *pdata){int count;uint8 error;pdata = pdata;TargetInit (); //目标板初始化current_floor = 1;MSPI_SendData(DISP_TAB[current_floor]);IO1CLR = 1 << 18; //使第一个流水灯点亮OSFlagPost(direct_chan, 0x01, OS_FLAG_SET, &error);while (1) {OSSemPend(u_d, 0, &error); //接收信号量OSTimeDly(OS_TICKS_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_TAB[current_floor]); //向数码管发送楼层消息if (semaphore[current_floor] == 1){count = 3;while (count) //到达目标楼层后灯闪三下{OSTimeDly(OS_TICKS_PER_SEC / 2);IO1SET = 1 << (17 + current_floor); /OSTimeDly(OS_TICKS_PER_SEC / 2);IO1CLR |= 1 << (17 + current_floor);count--;}work_count--;semaphore[current_floor] = 0; //信号量还原为0 }OSFlagPost(direct_chan, 0x01, OS_FLAG_SET, &error);}}基于lpc2131的模拟MP3播放器实验一、实验目的6、熟悉ARM & ADS V1.2 的环境7、理解LPC2131芯片引脚功能的选择8、理解GPIO的使用设置、输入驱动方法9、理解PWM的通信原理,学习ARM PWM资源的通信编程10、学习在LPC2131上移植ucosⅡ系统二、实验内容及要求(1)通过键盘输入,进入MP3播放器相应的功能选项。