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

下载本文档

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

文档简介

.../班级:电气工程及其自动化学号:姓名:班级:电气工程及其自动化学号:姓名:指导教师:成绩:课程设计报告设计任务一十字路口交通灯控制一、设计目的:1.了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O控制寄存器的设置方法;2.掌握ARM7应用系统编程开发方法,能用C语言编写应用程序;3.熟练掌握ADS1.2软件的使用以及PROTEUS仿真调试的方法;二、具体任务:1.采用PROTEUS完成十字路口交通灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106,东西南北方向分别设置红黄绿3个指示灯,东西方向和南北方向各用2个数码管显示通行时间;2.用ADS1.2编写C语言应用程序,完成十字路口交通灯控制;3.采用PROTEUS将应用程序装载在LPC2106中,进行仿真验证。要求东西方向和南北方向的数码管显示通行时间并倒计时,可以设置成一样,例如都是15秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。硬件电路设计。〔参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面,并用文字对所设计的电路功能、原理进一步说明参考图如下:1、无左转弯proteus电路图:2、有左转弯proteus电路图:硬件电路说明:1、无左转弯电路图说明:该电路是一个两位数码管显示的十字交通灯控制proteus硬件仿真图。功能介绍如下:启动后首先东西绿灯和南北红灯都亮15秒〔第一个状态,然后东西方向绿灯变闪烁黄灯〔每0.5秒交替一次南北方向红灯保持亮态,该状态5秒后,转变为东西向红灯和南北向绿灯同时亮15秒,然后南北方向绿灯变闪烁黄灯〔每0.5秒交替一次,东西方向红灯保持亮态,持续5秒后,再转为第一个状态,如此循环往复。2、有左转弯电路图说明:该电路在上电路基础上加一个东西与南北方向左转弯灯的控制,功能介绍如下:首先是只有东西方向直行绿灯亮〔第一个状态,10秒后开始东西黄灯闪烁,维持5秒后转为东西方向左转绿灯亮,其他均为红灯,10秒后绿灯开始闪烁,持续5秒后转为南北方向直行绿灯亮,其他均红灯,10秒后开始南北直行黄灯闪烁,维持5秒后转为南北左转绿灯亮,其他均转红灯,再过10秒后南北左转绿灯开始闪烁,维持5秒后转为第一个状态,如此往复。以上两个程序各状态时间均可由程序参数调节,便可改变交通路口的高峰期时段的各方向流通状态,很简洁方便,在此不详述。四、源程序1、十字路口无左转弯交通灯控制源程序:#include"config.h"#include"LPC2106.h"voiddelay<unsignedintx>//延迟0.xMS{while<x-->{unsignedcharj;for<j=0;j<125;j++>{;}}}uint8led[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管段选值voiddisplay<> //数码管显示{ uint8i=15; while<i> { IOSET=<led[i/10]<<13>|<led[i%10]<<6>; delay<5000>; IOCLR=<led[i/10]<<13>|<led[i%10]<<6>;i--; } }intmain<void>{ uint8k; int8type=1; PINSEL0=0x00000000;//将管脚设置为通用IO端口GPIO PINSEL1=0x00000000; IODIR=0xFFFFFFFF;//将方向寄存器IODIR全设为输出=1while<1>{ switch<type> { case1: //东西绿灯亮,南北红灯亮,15秒。 IOSET=0x00000021; display<>; type=2; break; case2://东西黄灯闪烁,南北红灯亮,5秒。 IOCLR=0xFFFFFFFF; k=5; while<k> { IOSET=0x00000011; IOSET=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; IOCLR=0x00000010; IOCLR=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; k--; } type=3; break; case3: //南北绿灯亮,东西红灯亮,15秒。 IOCLR=0x00000001; IOSET=0x0000000C; display<>; type=4; break; case4://南北黄灯闪烁,东西红灯亮,5秒。 IOCLR=0xFFFFFFFF; k=5; while<k> { IOSET=0x0000000A; IOSET=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; IOCLR=0x00000002; IOCLR=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; k--; } type=1; IOCLR=0x00000008; } }}2、十字路口有左转弯交通灯控制源程序:#include"config.h"#include"LPC2106.h"voiddelay<unsignedintx>//延迟0.xMS{while<x-->{unsignedcharj;for<j=0;j<125;j++>{;}}}uint8led[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; //共阴数码管段选值voiddisplay<> //数码管显示{ uint8i=15; while<i-5> { IOSET=<led[i/10]<<13>|<led[i%10]<<6>; delay<5000>; IOCLR=<led[i/10]<<13>|<led[i%10]<<6>;i--; } }intmain<void>{ uint8k; int8type=1; PINSEL0=0x00000000;//将管脚设置为通用IO端口GPIO PINSEL1=0x00000000; IODIR=0xFFFFFFFF;//将方向寄存器IODIR全设为输出=1while<1>{ switch<type> { case1: //东西绿灯亮,南北红灯亮 IOSET=0x00600021; display<>; k=5;//东西黄灯闪烁 while<k> { IOCLR=0x00000020; IOSET=0x00000010; IOSET=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; IOCLR=0x00000010; IOCLR=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; k--; } /*东西左转弯绿灯亮*/ IOCLR=0x00600021; IOSET=0X00500009; display<>; type=2; break; case2://东西左转弯绿灯闪烁 k=5; while<k> { IOSET=0x00100000; IOSET=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; IOCLR=0x00100000; IOCLR=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; k--; } type=3; break; case3: //南北绿灯亮,东西红灯亮 IOCLR=0x00000001; IOSET=0x0060000C; display<>; k=5;//南北黄灯闪烁 while<k> { IOCLR=0x00000004; IOSET=0x00000002; IOSET=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; IOCLR=0x00000002; IOCLR=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; k--; } /*南北左转弯绿灯亮*/ IOCLR=0X0060000C; IOSET=0x00A00009; display<>; type=4; break; case4://南北左转弯绿灯闪烁 k=5; while<k> { IOSET=0x00800000; IOSET=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; IOCLR=0x00800000; IOCLR=<led[k/10]<<13>|<led[k%10]<<6>; delay<3000>; k--; } type=1; IOCLR=0xFFFFFFFF;//全部清零 } }} 五、仿真效果。〔用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面1、无左转弯仿真效果图。有左转弯仿真效果图。设计任务二uC/OS-Ⅱ的移植与应用一、设计目的:1.了解嵌入式实时操作系统uC/OS-Ⅱ可移植、可裁剪等性能特点,正确理解实时操作系统中任务、信号、消息、中断等基本概念以及uC/OS-Ⅱ多任务管理的调度算法;2.掌握uC/OS-Ⅱ在ARM7上移植的方法;3.能将uC/OS-Ⅱ移植在LPC2106中,并根据具体要求创建用户任务,解决实际问题;二、具体任务:1.uC/OS-Ⅱ移植在LPC2106中。2.编写用户任务程序,完成实时温度的采集控制。硬件电路见参考硬件电路图,图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,并用数码管显示出来。三、参考硬件电路。〔用文字对所设计的电路功能、原理做详细说明DIY设计图:硬件电路说明:该电路是有LPC2106芯片控制的A/D转换实时采集温度并显示的控制,通过创建多用户任务,解决实际问题的装置。工作原理及流程如下:装在hex文件后点击运行,按采样开关按钮后由标号12线的开关信号输入LPC2106芯片后输出启动A/D转换的使能端OE〔标号11,使温度采样的模拟信号通过ADC0808转换为数字信号后经标号15至22八线传给控制芯片,控制芯片将接收的数字信号经控制转换后再通过标号0到7八线输出至数码管进行动态显示,显示出相应的温度值。倘若突然改变温度采样值,数码管会迅速实时地显示出相应的变化,这真是程序中的精髓,也是最难之处,本人设计的硬件和软件结合就解决了此问题,实时控制性能好。四、源程序#include"config.h"#defineTASK_STK_SIZE64#definekey0x00001000//按键#defineadstart0x00002000//AD采样开始#defineadend0x00004000//AD结束constuint32led_code[16]={0x0000003F,0x00000006,0x0000005B,0x0000004F,0x00000066,0x0000006D,0x0000007D,0x00000007,0x0000007F,0x0000006F,0x00000077,0x0000007C,0x00000039,0x0000005E,0x00000079,0x00000071};OS_STKTask0Stk[TASK_STK_SIZE];OS_STKTask1Stk[TASK_STK_SIZE];OS_STKTask2Stk[TASK_STK_SIZE];INT32Ui;voidTask0<void*data>;voidTask1<void*data>;voidTask2<void*data>;/*********************************************************************************************************函数名称:main功能描述:c语言的主函数,由它启动多任务环境********************************************************************************************************/intmain<void>{ OSInit<>;//初始化 OSTaskCreate<Task0,<void*>0,&Task0Stk[TASK_STK_SIZE-1],1>; OSTaskCreate<Task1,<void*>0,&Task1Stk[TASK_STK_SIZE-1],2>; OSTaskCreate<Task2,<void*>0,&Task2Stk[TASK_STK_SIZE-1],3>; OSStart<>; return0;}voiddelay<INT32Ut>//延时子程序{ uint32x,y; for<x=t;x>0;x--> for<y=110;y>0;y-->;}voidL_Init<void>//初始化{PINSEL0=0x00000000;PINSEL1=0x00000000;IODIR|=0x00002fFF;}/*********************************************************************************************************函数名称:Task0功能描述:第一个任务,进行初始化目标板和建立其它任务。********************************************************************************************************/voidTask0<void*p_arg>{p_arg=p_arg;TargetInit<>;L_Init<>;for<;;>//无限for循环{while<<IOPIN&key>!=0>;//假如按键没有按下,则一直循环在这里L_Init<>;while<<IOPIN&key>==0>;//按键被按下又弹起,程序顺序执行IOCLR=0x0000ffFF;//清零低16位OSTaskSuspend<OS_PRIO_SELF>;}}/****************************************************************************************************函数名称:Task1功能描述:第2个任务,AD转换。********************************************************************************************************/voidTask1<void*p_arg>{p_arg=p_arg;L_Init<>;for<;;>{ IOCLR=adstart;//输入高低的脉冲电平 delay<100>; IOSET=adstart; delay<100>; IOCLR=adstart; delay<100>; L_Init<>;while<<IOPIN&adend>==0>; IOSET=1<<11;//11位为AD的OE使能端 i=IOPIN; i=i>>15;//AD的输出OUT8到OUT1分别由15到22位控制 OSTaskSuspend<OS_PRIO_SELF>;}}/*************************************************************函数名称:Task2功能描述:第3个任务,LED显示。*************************************************************/voidTask2<void*p_arg>{ INT32Ugw,sw,bw;

温馨提示

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

评论

0/150

提交评论