字路口嵌入式系统课程设计报告_第1页
字路口嵌入式系统课程设计报告_第2页
字路口嵌入式系统课程设计报告_第3页
字路口嵌入式系统课程设计报告_第4页
字路口嵌入式系统课程设计报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. 十字路口交通灯 uC/OS-的移植与应用嵌入式课程设计 班级:电气工程*班学号:*姓名: *指导教师:*成绩:嵌入式系统课程设计报告设计任务一 十字路口交通灯控制一、设计目的:1了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O控制寄存器的设置方法;2掌握ARM7应用系统编程开发方法,能用C语言编写应用程序;3熟练掌握ADS1.2软件的使用以及PROTEUS仿真调试的方法;二、具体任务:1采用PROTEUS完成十字路口交通灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106,东西南北方向分别设置红黄绿3个指示灯,东西方向和南北方向各用1个数码管显示通行时间;2用AD

2、S1.2编写C语言应用程序,完成十字路口交通灯控制;3采用PROTEUS将应用程序装载在LPC2106中,进行仿真验证。要求东西方向和南北方向的数码管显示通行时间并倒计时,可以设置成一样,例如都是9秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。三、硬件电路设计。(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面,并用文字对所设计的电路功能、原理进一步说明)硬件电路说明:此电路设计实现的功能是:模拟实现十字路口的交通灯管理控制。东西绿灯南北红灯亮30秒,然后是东西绿灯变为黄灯亮3秒,南北红灯不变。再到东西黄灯变为红灯

3、,南北红灯变为绿灯,都是亮30秒。最后是南北绿灯变为黄灯亮3秒,东西红灯不变。因为此电路只采用两个数码管,仅仅可以完成一些简单的功能,这样可以先编写简单的程序。按理是要4个数码管来显示的,这样就可以调整由绿灯变为黄灯时,而红灯不变的时间差。因为时间有限,所以只实现交通灯的基本功能实现,后续电路还需改进!四、源程序。(只将C语言应用程序附在后面,其它项目文档不要提供)#include"config.h"#include"LPC2106.h" uint32 table1=0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06

4、,0x3f;uint32 table2=0x2600,0x2500,0x4100,0x1a00,0x1900;uint32 table3=0x5b,0x06,0x3f;void delay(uint32 n)/延时函数,当n为1时大致延时1毫秒 uint32 i,j; for(i=n;i>0;i-) for(j=2000;j>0;j-); int main() int i=0,n=0,m=0; PINSEL0=0x0000000;/寄存器初始化,选择其I/0口功能 PINSEL1=0x00000000; IODIR=0x0000ffff; /清0寄存器设置 while(1) for

5、(i=0;i<3;i+) for(n=0;n<10;n+) for(m=0;m<50;m+) IOSET=table20 + table3i; delay(10); IOCLR=0x0000ffff; IOSET=table21+ table1n ;delay(10); IOCLR=0x0000ffff;for(n=6;n<10;) IOCLR=IOSET;IOSET=table22+ table1n+;delay(500); IOCLR=0x0000ffff; for(i=0;i<3;i+)for(n=0;n<10;n+)for(m=0;m<50;m

6、+) IOSET=table23 + table3i; delay(10); IOCLR=0x0000ffff; IOSET=table24 + table1n;delay(10);IOCLR=0x0000ffff;for(n=6;n<10;) IOCLR=IOSET;IOSET=table22+ table1n+;delay(10);IOCLR=0x0000ffff; 五、仿真效果。(PROTEUS运行仿真效果图如下)图一:图二:图三:设计任务二 uC/OS-的移植与应用一、设计目的:1了解嵌入式实时操作系统uC/OS-可移植、可裁剪等性能特点,正确理解实时操作系统中任务、信号、消息、

7、中断等基本概念以及uC/OS-多任务管理的调度算法;2掌握uC/OS-在ARM7上移植的方法;3能将uC/OS-移植在LPC2106中,并根据具体要求创建用户任务,解决实际问题;二、具体任务:1uC/OS-移植在LPC2106中。2编写用户任务程序,完成实时温度的采集控制。硬件电路见参考硬件电路图,图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,并用数码管显示出来。三、参考硬件电路。(用文字对所设计的电路功能、原理做详细说明)附图:硬件电路说明:硬件电路要实现的功能时完成实时温度的采集控制。图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,

8、并用数码管显示出来。每当我们按下启动键时,ADC0808将通道0的电压值转换并显示在数码管上显示出来。由于此电路使用了嵌入式实时操作系统uC/OS-,电路功能的实现可以划分为3个任务,第一个任务按键识别;第二个任务A/D转换;第三个任务数码管显示。四、源程序。(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:/*/#include "config.h"#define TASK_STK_SIZE 64#define con 0x00001fff#define key 0x00001000#define adstart 0x00002

9、000#define adend 0x00004000const uint32 led_code16=0x0000003F,0x00000006,0x0000005B,0x0000004F,0x00000066,0x0000006D,0x0000007D,0x00000007, 0x0000007F,0x00000006F,0x00000077,0x0000007C,0x00000039,0x0000005E,0x00000079,0x00000071; /定义任务堆栈大小OS_STK Task0StkTASK_STK_SIZE;OS_STK Task1StkTASK_STK_SIZE;OS_

10、STK Task2StkTASK_STK_SIZE;INT32U data; /任务声明void Task0(void *data);void Task1(void *data);void Task2(void *data);/* 函数名称: main* 功能描述: c语言的主函数,由它启动多任务环境*/ int main (void) OSInit();/操作系统初始化 OSTaskCreate(Task0, (void *)0, &Task0StkTASK_STK_SIZE - 1, 1); OSTaskCreate(Task1, (void *)0, &Task1StkT

11、ASK_STK_SIZE - 1,2); OSTaskCreate(Task2, (void *)0, &Task2StkTASK_STK_SIZE - 1,3); OSStart();/启动操作系统 /while(IOPIN&key)!=0); return 0;void delay(INT32U t)while(t-);void L_Init (void) PINSEL0=0x00000000; PINSEL1=0x00000000; IODIR|= 0x00002fFF; /* 函数名称:Task0* 功能描述: COS-II的第一个任务,通常由它初始化目标板和建立其它任

12、务*/ void Task0(void *p_arg) p_arg = p_arg; TargetInit(); L_Init(); for(;) while(IOPIN&key)!=0); L_Init(); while(IOPIN&key)=0); IOCLR= 0x0000ffFF; OSTaskSuspend(OS_PRIO_SELF);/无条件挂起一个任务(任务优先级) /* 函数名称:Task1* 功能描述: COS-II的第2个任务,AD转换*/ void Task1(void *p_arg) p_arg = p_arg; L_Init(); for(;)/送单次

13、脉冲,启动A/D转换 IOCLR=adstart; delay(50); IOSET=adstart; delay(50); IOCLR=adstart; delay(50); L_Init(); while(IOPIN&adend)=0);/A/D转换是否结束 IOSET=1<<11;/OE置1,将A/D转换后的数据读入 / OSTimeDlyHMSM(0,0,0,50); data=IOPIN; data=data>>15; OSTaskSuspend(OS_PRIO_SELF); /* 函数名称:Task2* 功能描述: COS-II的第3个任务,LED显

14、示*/ void Task2(void *p_arg) INT32U d,g,s,b; p_arg = p_arg; L_Init(); while(1) b=data/100; d=data %100; s=d/10; g=d%10; IOSET=(1<<10)|led_codeg;delay(30); IOCLR=0x00000fff; IOSET=1<<10; IOCLR=1<<10; IOSET=(1<<9)|led_codes; delay(30); IOCLR=0x00000fff; IOSET=1<<9; IOCLR=1

15、<<9; IOSET=(1<<8)|led_codeb; delay(30); IOCLR=0x00000fff; IOSET=1<<8; IOCLR=1<<8; while(IOPIN&key)=0) OSTaskResume(2); /唤醒挂起的任务2需要的函数 / OSTaskResume(0);五、仿真效果。(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)图一:图二:嵌入式课程设计总结课程设计共耗时两个星期,终于到了结尾总结的时刻了。作为电气自动化专业的学生,设计是我们将来必需的技能,这次课程设计恰恰给我们提供了一个应

16、用自己所学知识的机会,从到图书馆查找资料到对电路的设计到最后电路的成型,都对我所学的知识进行了检验。可以说,本次课程设计有苦也有甜。设计思路是最重要的,只要你的设计思路是成功的,那你的设计已经成功了一半。因此我们应该在设计前做好充分的准备,像查找详细的资料,为我们设计的成功打下坚实的基础。本次为期两周的课程设计,通过“十字路口交通灯控制”和“uC/OS-的移植与应用”这两个课题,让我对proteus这个软件的操作和使用环境有了进一步的了解和深入,知道如何更加准确的去设计嵌入式程序和硬件图,再通过proteus的仿真,得到设计结果。同时也了解了嵌入式芯片引脚的各种功能,明白如何合理的运用和使用它们。在此次的嵌入式课程设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。也锻炼了自己独立思考问题的能力和通过查看相关资料来解决问题的习惯。虽然这只是一次简单的课程设计,但通过这次课程设计我们了解了课程设计的一般步骤,和设计中应注意的问题。设计本身并不是有很重要的意义,而是对待问题时的态度和处理事情的能力。设计的过程,设计的思想和设计硬件电路中的每一个环节,电路中各个部分的功能是如何实现的。各个芯片能够完成什么样的功能,使用芯片时应该注意哪些要点。实验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论