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

下载本文档

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

文档简介

班级:电自094学号:09401300417姓名:赵兴发指导教师:陈玮成绩:嵌入式系统课程设计报告设计任务一 十字路口交通灯控制一、设计目的:1了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O控制寄存器的设置方法;2掌握ARM7应用系统编程开发方法,能用C语言编写应用程序;3熟练掌握ADS1.2软件的使用以及PROTEUS仿真调试的方法;二、具体任务:1采用PROTEUS完成十字路口交通灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106,东西南北方向分别设置红黄绿3个指示灯,东西方向和南北方向各用1个数码管显示通行时间;2用ADS1.2编写C语言应用程序,完成十字路口交通灯控制;3采用PROTEUS将应用程序装载在LPC2106中,进行仿真验证。要求东西方向和南北方向的数码管显示通行时间并倒计时,可以设置成一样,例如都是9秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。三、硬件电路设计。(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面,并用文字对所设计的电路功能、原理进一步说明)附图:硬件电路说明:1设置所有I/O口为第一功能,将硬件电路图按上图所示连接。2东西南北四个方向分别装有红、黄、绿三灯,通过放置标号的方式连接到LPC2106。3数码管为交通灯一位十进制倒计时显示,两个数码管显示同样的数字。四、源程序。(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:#include config.h void delay(uint32 time) /*延时1ms子程序*/ uint32 p; for(;time0;time-) for(p=2210;p0;p-); int main() int32 i; int32 a10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F; /*数码管0-9的显示*/ PINSEL0=0x00000000; /*设置P0.0-P0.15工作模式为I/O口*/ PINSEL1=0x00000000; /*设置P0.16-P0.31工作模式为I/O口*/ IODIR = 0x00007FFF; /*设置所有用到的I/O口为输出*/ IOCLR = 0x00007E7F; /*清零输出端,消隐*/ while(1) for(i=9;i0;i-) /*东西红灯、南北绿灯延时9秒*/ IOSET=0x00004200; /*东西红灯、南北绿灯LED显示*/ IOSET=ai; /*数码管显示时间*/ delay(1000); /*延时1秒*/ IOCLR=0x00007E7F; /*输出端清零*/ for(i=3;i0;i-) /*东西红灯、南北黄灯延时3秒*/ IOSET=0x00002200; /*东西红灯、南北黄灯LED显示*/ IOSET=ai; /*数码管显示时间*/ delay(1000); /*延时1秒*/ IOCLR=0x00007E7F; /*输出端清零*/ for(i=9;i0;i-) /*东西绿灯、南北红灯延时9秒*/ IOSET=0x00001800; /*东西绿灯、南北红灯LED显示*/ IOSET=ai; /*数码管显示时间*/ delay(1000); /*延时1秒*/ IOCLR=0x00007E7F; /*输出端清零*/ for(i=3;i0;i-) /*东西黄灯、南北红灯延时3秒*/ IOSET=0x00001400; /*东西黄灯、南北红灯LED显示*/ IOSET=ai; /*数码管显示时间*/ delay(1000); /*延时1秒*/ IOCLR=0x00007E7F; /*输出端清零*/ 五、仿真效果。(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)设计任务二 uC/OS-的移植与应用一、设计目的:1了解嵌入式实时操作系统uC/OS-可移植、可裁剪等性能特点,正确理解实时操作系统中任务、信号、消息、中断等基本概念以及uC/OS-多任务管理的调度算法;2掌握uC/OS-在ARM7上移植的方法;3能将uC/OS-移植在LPC2106中,并根据具体要求创建用户任务,解决实际问题;二、具体任务:1uC/OS-移植在LPC2106中。2编写用户任务程序,完成实时温度的采集控制。硬件电路见参考硬件电路图,图中用滑动变阻器代替温度传感器转换后的电压,用ADC0809完成A/D转换,并用数码管显示出来。三、参考硬件电路。(用文字对所设计的电路功能、原理做详细说明)附图:硬件电路说明:硬件电路图说明:1用仿真可调滑动变阻器控制输入电压变化代替温度传感器的输入电压变化,间接仿真环境温度变化。2ADC0808芯片用作A/D转换主芯片,12脚为参考电压,10脚接脉冲控制A/D转换速度。23、24、25引脚为通道选择。000为IN0通道。数码管显示模拟数值。3图中有按钮两个,按钮KEY为开关,按一下启动A/D转换并显示电压数值,再按一下停止显示;按钮RST为复位按键。4设置LPC2106引脚连接ADC0808的P0.14-P0.22和P0.12为输入,其他的引脚为输出。四、源程序。(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:#include config.h#define TASK_STK_SIZE64#define KEY0x00001000 /管脚P0.12#define ADCS0x00002000 /管脚P0.13#define ADCEND0x00004000 /管脚P0.14uint32 led_code10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F; /共阴极数码管字形码 OS_STK Task0StkTASK_STK_SIZE; /定义任务堆栈OS_STK Task1StkTASK_STK_SIZE;OS_STK Task2StkTASK_STK_SIZE;uint32 i; /ADC转换值void Task0(void *data); /任务1,按下按键,启动数据采集void Task1(void *data); /任务2,A/D转换void Task2(void *data); /任务3,数码管显示/* 函数名称: main* 功能描述: c语言的主函数,由它启动多任务环境*/int main (void) OSInit(); /操作系统初始化 OSTaskCreate(Task0, (void *)0, &Task0StkTASK_STK_SIZE - 1, 2); OSTaskCreate(Task1, (void *)0, &Task1StkTASK_STK_SIZE - 1, 3); OSTaskCreate(Task2, (void *)0, &Task2StkTASK_STK_SIZE - 1, 4); OSStart(); /启动操作系统 return 0;void delay(uint32 t) /延时子程序while(t-);void IO_init(void) PINSEL0=0x00000000; /设置P0.0-P0.15工作模式为输入输出口 PINSEL1=0x00000000; /设置P0.16-P0.31工作模式为输入输出口 IODIR=0x00002FFF; /P0.00-P0.11、P0.13为输出口,其它全为输入口/* 函数名称: Task0* 功能描述: COS-II的第一个任务,判断按键状态,若按下并松开,则开始下一个任务,否则一直等待*/void Task0(void *p_arg) p_arg=p_arg; /避免编译警告 TargetInit(); /目标板初始化 IO_init(); while (TRUE) /等待按键按下 while (IOPIN & KEY) != 0); /判断按键按下delay(2000); while (IOPIN & KEY) = 0); /判断按键松开 IOCLR=0x0000FFFF; /P0.00-P0.15输出全部清零 OSTaskSuspend(2); /挂起本任务 /* 函数名称: Task1* 功能描述: COS-II的第二个任务,进行AD转换*/void Task1(void *p_arg)p_arg=p_arg; /避免编译警告 TargetInit(); /目标板初始化 IO_init(); while (TRUE) /ADC启动时序模拟,START接口需要20us的脉冲输入 IOCLR=ADCS; /ADC_START低电平输入清零 delay(20); /延时20us IOSET=ADCS; /ADC_START高电平输入有效 delay(20); /延时20us IOCLR=ADCS; /ADC_START低电平输入清零 while (IOPIN & ADCEND) = 0);/判断 EOC若为高电平,则表示转换完毕 IOSET=115;/处理数据 用作输出数据 OSTaskSuspend(3); /挂起本任务 /* 函数名称: Task2* 功能描述: COS-II的第三个任务,LED数码管显示转换值*/void Task2(void *p_arg)int32 gw,sw,bw;p_arg=p_arg; /避免编译警告IO_init();while (TRUE) gw=i%10; /取个位数据 sw=i%100/10; /取十位数据 bw=i/100; /取百位数据 IOSET=(110)|led_codegw; /显示个位数据 delay(2000);IOCLR=0x0000FFFF; /清零IOSET=(19)|led_codesw; /显示十位数据delay(2000);IOCLR=0x0000FFFF; /清零IOSET=(18)|led_codebw; /显示百位数据 delay(2000);IOCLR=0x0000FFFF; /清零OSTaskResume(3); /恢复ADC任务 五、仿真效果。(用屏幕抓图的方式将PROTEUS运行仿真效果图粘贴在下面)课程设计心得体会光阴似箭,日月如梭,为期两周的嵌入式系统课程设计在同学们紧张的钻研中画上了完满的句号。通过这两个星期的课程设计,我学到了很多知识,也开拓了自己的视野和知识面,受益匪浅,现谈谈自己的心得体会。在做第一个嵌入式课程设计之前,我们所学的知识都是理论性的,所以一旦要求把理论性的东西用到实践中来,刚开始有一定的难度。我在听了老师的部分讲解之后,自己独立地写出了程序并进行了仿真,并且学会了使用ADS1.2软件和Proteus软件进行设计的调试和仿真,让我受益匪浅,并为我做下一个课程设计奠定了基础。我在这次课程设计中感受到最重要的一点是一定要学以致用,把所学知识用到生活中来。发明和创造就是这样产生的。并且,在设计与创造的过程中,遇到困难不要气馁,一定要坚持不懈,特别是对与科学研究,爱迪生进行了九千九百九十九次实验,才发明了电灯泡,造福了人类,如果他失败了九千九百九十八次就放弃了,那就不可能有这样的成就。伟人毕竟是伟人,作为一名学生,在学习中一定要抱有积极地心态去对待学习遇到中的问题,不说要像伟人一样能那么执着地去克服困难,但至少要坚持完成自己的学习任务,为今后就业创造好的条件。像这次的课程设计中的交通灯,但并没有实际中交通灯那么复杂。当然,我虽然独立地完成了这次课程设计,但是,未来的路还很长,有更多更具挑战的事情在等着我们。所以我一定要争取学习更多的嵌入式知识,以赶上时代的步伐。在做了第一个课程设计以后再做第二个课程设计就变得不是那么难了,但是对C/OS-II操作系统还是很陌生,我和搭档在分析设计目的以后,坚持独立思考,根据老师的指导,独立完成了程序的编写。在编写程序的过程中,我们遇到失败总是没有放弃

温馨提示

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

评论

0/150

提交评论