嵌入式系统原理与应用综合设计课程设计交通信号灯控制器设计_第1页
嵌入式系统原理与应用综合设计课程设计交通信号灯控制器设计_第2页
嵌入式系统原理与应用综合设计课程设计交通信号灯控制器设计_第3页
嵌入式系统原理与应用综合设计课程设计交通信号灯控制器设计_第4页
嵌入式系统原理与应用综合设计课程设计交通信号灯控制器设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、.嵌入式系统原理与应用综合设计交通信号灯控制器设计系 部:电子与信息工程系专业班级:姓 名:学 号:小组成员:指导教师:时 间:2011.5.302011.6.24完 成 日 期 2011年 6月目录1.绪论.22.课程设计要求及实验设备与器材.22.1课程设计题目.22.2课程设计目的.22.3设计要求.32.4工作流程.32.5实验设备与器材.33.硬件设计.43.1设计系统介绍及原理框图.43.2电源供电系统.43.3arm开发板.53.4led显示系统.53.5键盘系统.73.6原理电路图.94.软件设计方案.54.1程序流程图.54.2方案论证.74.3调试过程.74.4运行结果.7

2、4.4.1结果分析.84.4.2体会与收获.8参考文献.10特别致谢.10附录.15 1.绪论嵌入式计算机系统的出现,是现代计算机发展历史山的里程碑。嵌入式系统诞生于微型计算机时代,与通用计算机的发展道路完全不同,形成了独立的单芯片的技术发展道路。由于嵌入式系统的诞生,现代计算机领域出现了通用计算机与嵌入式计算机两大分支。不可兼顾的技术发展道路,形成了两大分支的独立发展:通用计算机按照高速、海量的技术发展;嵌入式计算机系统则为满足对象系统按照嵌入式智能化控制要求发展。由于独立的分工发展,20世纪末,现代计算机的两大分支都得到了迅猛的发展。2.课程设计要求及实验设备与器材2.1课程设计题目模拟交

3、通灯控制器设计2.2课程设计目的通过本次综合设计,运用已学的课程知识,根据题目要求进行软硬件系统的设计和调试,对嵌入式系统原理与应用课程中涉及的芯片结构、控制原理、硬件和编程等方面有一定的感性认识和实践操作能力,从而加深对本课程知识点的理解,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等方面有显著提高。2.3设计要求 利用实验系统的资源来设计一个“模拟交通灯控制器”。 控制面板包括:8位数码显示器、2组交通灯(每组交通灯包括红、黄和绿3个灯)、十个数字按键键盘、电源按键、电源指示灯和一个运行键。具体设计要求如下:1.设计一交通灯控制系统,其结构如图1.1所示,工作方式满足上述要求。2

4、.主干道和次干道的通行时间及黄灯点亮的时间可以手动设置。3.在没有手动设置通行时间时,系统自动按表1.1的模式进行工作。十字交叉路口的交通灯控制系统的结构图1.1所示 往南和往北的信号一致,即红灯(绿灯或黄灯)同时亮或同时熄灭。用两个数码管来显示被点亮的指示灯还将点亮多久。往东和往西的方向的信号一致。其工作方式与南北方向一样。也采用两个数码管来倒计时,当南北方向为绿灯和黄灯时,东西向的红灯点亮禁止通行,而东西方向为绿灯和黄灯时,南北向的红灯点亮禁止通行。假设南北方向为主干道,通行时间为60秒,东西方向是次干道,通行时间为30秒,黄灯点亮的时间均为4秒,则其工作方式如表1.1所示循环点亮信号灯。

5、表1.1交通信号灯工作模式南北向绿灯亮60秒黄灯亮4秒红灯亮34秒东西向红灯亮64秒绿灯亮30秒黄灯亮4秒2.4工作流程a. 按下电源键,电源指示灯亮;b. 按下运行键,模拟交通灯控制器工作;c. led实时显示当前的交通状况;d. 红灯和绿灯的工作顺序如下:图2.1 红灯工作顺序图图2.2 绿灯工作顺序图e. 用2位数码管实时倒计时时间,倒计时流程如下:图2.3 led等结合数码管工作顺序图f.运行过程中,若再按下电源键,则控制器停止工作,电源指示灯灭。2.5实验设备与器材(1)电源模块(2)arm开发板lm3s2110(3)1602液晶显示3.硬件系统设计3.1设计系统介绍及原理框图(1)

6、接通电源时或系统复位后,系统按程序给定的时间工作,即南北向通行60秒,东西向通行30秒,黄灯亮4秒,工作模式如表1.1所示。首先南北向通行,然后东西向通行,如此循环。 (2)通行时间的设置:当需要更改主、次干道的通行时间时,可以用“设置键、增加键、减少键”进行设置。 第一次按“设置键”时,南北向的绿灯亮,南北向的数码管显示当前南北向的通行时间,并且按每秒3次的频率闪烁(每秒亮3次暗3次),其余的信号指示灯和东西向的数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向的通行时间。按一次“增加键”或“减少键”,数码管的显示增加一秒或减小一秒,长按“增加键”或“减少键”(按下的时间超过一秒钟以上

7、)则数码管显示的时间按每秒钟增加或减少10的速度快速变化。 第二次按“设置键”时,南北向的黄灯亮,南北向的数码管显示当前南北向黄灯点亮时间,并且按每秒3次的频率闪烁每秒亮3次暗3次),其余的信号指示灯和东西向的数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向黄灯的点亮时间。 第三次按“设置键”时,东西向的绿灯亮,东西向的数码管显示当前东西向的通行时间,并且按每秒3次频率闪烁,此时可以用“增加键”和“减少键”来改变东西向的通行时间。 第四次按“设置键”时,东西向的黄灯亮,东西向的数码管显示当前东西向黄灯的点亮时间,并且按每秒3次频率闪烁,此时可以用“增加键”和“减少键”来改变东西向黄灯的

8、点亮时间。 第五次按“设置键”时,系统退出设置状态,回到交通信号灯状态,并且南北向先通行,东西向后通行。“设置键”的功能表图1.2所示。表1.2设置键的功能按“设置键”的次数第1次第2次第3次第4次第5次调整内容南北向的绿灯点亮时间南北向的黄灯点亮时间东西向的绿灯点亮时间东西向的黄灯点亮时间恢复交通灯工作状态调整范围099秒09秒09秒09秒3.2电源供电系统本系统采用220v电源供电,应设计相应的稳压电源电路。但课程设计受时间限制,也可采用现成的5v直流稳压电源供电,这样可节约设计时间,简化设计过程。图3.1电源模块硬件图3.3arm开发板arm建设选用ti lm3s2110芯片,便于设计和

9、调试。3.4led显示系统南北向和东西向各采用2个数码管计时,对该方向的指示灯的点亮时间进行倒计时,最长计时范围为99秒。设计时可利用芯片的pd口和pa口作为字段和位选信号输出,经驱动芯片后驱动数码管显示倒计时时间,数码管采用动态扫描方式显示。图3.2数码管模块硬件图图3.3led模块硬件图3.5 键盘系统设置3个程序按键:设置键、增加键、减少键,因键盘使用频率很小,建议采用查询方式来读取键盘。另需配置一个非程序按键:系统复位键。图3.4 矩阵键盘模块硬件图3.6原理电路图 图3.5 硬件电路图4.软件设计方案4.1程序流程图图3.6 软件流程图4.2方案论证电源模块采用单片机控制模块提供电源

10、。改方案的优点是系统简明扼要,节约成本;缺点是输出功率不高。 显示模块用数码管与点阵led 相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与led灯分别显示时间与提示信息。这种方案既满足系统功能要求,又减少了系统实现的复杂度。输入模块采用4*4矩阵键盘,由于单片机/嵌入式实践平台的试验箱对于交通灯及数码管的控制,只用lm3s2110芯片本身与试验箱管脚相连,通过程序就可实现。综上所述,以lm3s2110芯片为核心器件,采用连接8段led数码显示管,4*4矩阵键盘电路组成。利用单片机的优势设计电路直接在管脚上接上按键开关。因为设计的时候仅见和

11、优化了电路,所以剩余的管教资源还比较多。由于该系统对于交通灯以及数码管的控制,只需要单片机本身就可以实现,所以选择这种方案。4.3调试过程我们的程序分为2大部分,第一部分是嵌入式lm3s2110芯片上的led灯程序的调试;第二部分是试验箱上数码显示管与4*4矩阵键盘程序的调试。先把嵌入式lm3s2110芯片与pc机连接,在pc机上安装芯片的驱动,路径为c:program filesiar systemembedded workbench 5.4 kickstartarmdriversluminaryftdi,设定管脚为gpiob口的pin1pin4,即为芯片上的led3led6。我们的程序是先

12、让led3和led6点亮50秒,再闪烁5次,再让led4和led5点亮10秒。可是起初是led3和6亮完之后就是led4和5亮,没有闪烁的过程,后来发现是程序中的延时循环出现了问题,然后经过了一次次更改,一次次错误,最后终于成功的让交通灯正确点亮。第二部分是把试验箱与嵌入式lm3s2110芯片的管脚依次相连。这次程序还没有调试就有一个大问题出现,就是管脚怎么连接。我们需要的是8位显示管模块和矩阵键盘模块,8位公阳显示管模块中的段和位我们分别定义为gpiod口的pin1pin7,gpioe口的pin0pin1;矩阵键盘中的横向以及纵向分别定义为gpioa口的pin2pin5,gpioc口的pin

13、4pin7。然后根据我们找到的资料ychd-3和arm2110的管脚图依次相连,然后再连接地线。第一次的问题是8个8位数码管一次只能显示一位,可是我们的倒计时需要十位和个位同时显示,正当我们无从着手时候,有同学给了我们一个建议:利用人眼的视觉暂留,让数码管不断地刷不断的闪,只要时间足够短暂那我们看起来就像是2位数码管同时亮。改程序,1秒内十位个位互相闪烁50次,果然成功了。期间有许多失败的经历,就不赘述了。第二次的问题是按键与数码管没有互相作用,程序中的提示也是定义按键为多余的警告。使能了按键后,虽然警告没有了,可是数码管依然不受按键控制。找了许多同学寻求帮助,虽然找出了我们程序中存在的问题,

14、但是没有改变现状,又一次的束手无策。最后终于发现原来是管脚的链接问题,我们忽略了矩阵键盘中的j1模块和j3模块的短接。利用跳线帽短接j1模块的2个管脚和j3模块的两个管脚。连接之后重新烧入程序,调试成功了。当按下k1键时,倒计时50秒,按下k2键时,倒计时10秒,k3键40秒,一次类推,一直到100秒。但是因为我们用了2位的8段数码管,所以当到99秒时候,自动归零。4.4运行结果4.4.1结果分析把lm3s2110芯片与pc机连接后,把led程序进行仿真,把程序烧入芯片内,led1和led6点亮(见图3.7),亮50秒后,闪烁5次。让led2和led5点亮(见图3.8),亮10秒后,闪烁5次。

15、依次往复循环。图4.1led1和led6亮图4.2 led2和led5亮4.4.2体会与收获 这次课程设计带给我们的不仅仅是对课本知识的加深的理解,也锻炼了我们对于把书本知识运用到实践中的能力。平时在课堂上学到的东西有的虽然明白了,但是毕竟没有实际操作经验,操作起来容易出错;有的只是一知半解,用于实践中就出现了问题。对于知识的理解知识单纯的停留在书本阶段,自己动手尝试了以后,这些知识对于我们而言更加鲜活生动起来了。从刚刚开始的无从下手,到逐步的知道自己该做什么,该怎么做。不断地遇到新的问题,不断地尝试各种方法解决,即使失败了也有了经验。渐渐的发现问题,解决问题,遇到新问题,再解决问题,这种循环

16、让我们体会到了靠自觉解决问题的成就感。从实践中直接得到的知识会比书本上老师传授所得到的知识更容易让我们掌握。当然专业知识也收获不少,当初的c语言学的半吊子,考试阶段的临时抱佛脚让我们到了关键时刻都不知道各种语句怎么用,可是又不得不写出来。当然就网上收集资料,学习别人的程序,在别人的模板上逐渐修改,渐渐地这段程序的绝大多数都是我们自己的成果了。还有一些作图软件以前从未接触或者有少许接触的通过这次的锻炼也让我们熟练掌握了它们的用法。参考文献1 李朝青. 单片机原理及接口技术(第 3 版). 北京:北京航空航天大学出版社,2006 2 何立民. 单片机应用技术大全. 北京:北京航空航天大学出版社,1

17、994 第 19 页3周立功,lm3s2110微控制器eb/ol. 2010年6月。4周立功,arm嵌入式系统基础教程m.北京:北京航空航天大学出版社,2004 p213p2165张齐 朱宁西,单片机应用系统设计技术m.北京:电子工业出版社,2004 p251p255,p256p260。6张军 宋涛 avr单片机c语言程序实例精粹m.北京:电子工业出版社,1997 p122p133。7张大明,单片微机控制应用技术m.北京:机械工业出版社,2006 p65p70。特别致谢 本次关于模拟交通灯设计与制作是在王永明老师和徐会彬老师以及其他辅导老师的悉心指导下,和同组内的其他两位成员的共同讨论,互相交

18、流才得以顺利完成。经过本次设计我们把大学里所学的理论知识转为成为实际的应用,既锻炼了我们的实际草操作能力,又使理论知识得到升华,激发了我们的创新意识。 特别感谢与我同组的两位组员,在工作中我们积极配合,互相帮助,勇于创新。更要感谢身边的同学,虽然不是我们一组的,但是在我们遇到使我们措手不及的时候,在程序上给我们很多提示很多帮助,感谢他的无偿帮助。用过本次设计使我们的动手能力得到很大的提高,让我们走出了实践盲区,为以后的毕业设计以及工作后的动手能力打下坚实的基础。最后感谢学院为我们提供了这次机会。再次感谢老师们和同学们的帮助!附录程序清单#include "systeminit.h&q

19、uot;#define lcden gpio_pin_0 /pb0;#define lcdrs gpio_pin_1 /pb1; unsigned char data; /pd0-pd7;unsigned int shi=48+5,ge=48;void write_com(unsigned char com) /写命令 gpiopinwrite(gpio_portb_base,lcdrs,0x00); / lcdrs=0; gpiopinwrite(gpio_portd_base,gpio_pin_0|gpio_pin_1|gpio_pin_2| gpio_pin_3|gpio_pin_4|g

20、pio_pin_5|gpio_pin_6|gpio_pin_7,com);/pd=com;sysctldelay(5 * (thesysclock / 4000); / 延时 5msgpiopinwrite(gpio_portb_base,lcden,0xff); / lcden=1; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0; void write_data(unsigned char date)gpiopinwrite(gpio_portb_base,l

21、cdrs,0xff); / lcdrs=1;gpiopinwrite(gpio_portd_base,gpio_pin_0|gpio_pin_1|gpio_pin_2| gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7,date);/pd=date; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gpio_portb_base,lcden,0xff); / lcden=1; sysctldelay(5 * (thesysclock / 4000); gpiopinwrite(gp

22、io_portb_base,lcden,0x00); / lcden=0;void init()sysctlperienable(sysctl_periph_gpiod); /使能a端口 gpiopintypeout(gpio_portd_base, gpio_pin_0|gpio_pin_1|gpio_pin_2| gpio_pin_3|gpio_pin_4|gpio_pin_5|gpio_pin_6|gpio_pin_7); sysctlperienable(sysctl_periph_gpiob); gpiopintypeout(gpio_portb_base, gpio_pin_0|g

23、pio_pin_1); gpiopinwrite(gpio_portb_base,lcden,0x00); / lcden=0; write_com(0x38);write_com(0x0e);write_com(0x06);write_com(0x01); / 在开始清屏write_com(0x80+0x10); /数据指针地址/ 定义led#define led1_periph sysctl_periph_gpiof#define led1_port gpio_portf_base#define led1_pin gpio_pin_1#define led2_periph sysctl_p

24、eriph_gpiof#define led2_port gpio_portf_base#define led2_pin gpio_pin_2#define led3_periph sysctl_periph_gpiob#define led3_port gpio_portb_base#define led3_pin gpio_pin_0#define led4_periph sysctl_periph_gpiob#define led4_port gpio_portb_base#define led4_pin gpio_pin_1#define led5_periph sysctl_peri

25、ph_gpiob#define led5_port gpio_portb_base#define led5_pin gpio_pin_2#define led6_periph sysctl_periph_gpiob#define led6_port gpio_portb_base#define led6_pin gpio_pin_3#define beep_periph sysctl_periph_gpioh#define beep_port gpio_porth_base#define beep_pin gpio_pin_0unsigned char i;void led1flash ()

26、unsigned char ucval; ucval = gpiopinread(led1_port, led1_pin); / 翻转led gpiopinwrite(led1_port, led1_pin, ucval); ucval = gpiopinread(led6_port, led6_pin); / 翻转led gpiopinwrite(led6_port, led6_pin, ucval); sysctldelay(500 * (thesysclock / 3000); gpiopinwrite(led1_port, led1_pin, ucval); gpiopinwrite(

27、led6_port, led6_pin, ucval); sysctldelay(500 * (thesysclock / 3000); void led2flash () unsigned char ucval; ucval = gpiopinread(led2_port, led2_pin); / 翻转led gpiopinwrite(led2_port, led2_pin, ucval); ucval = gpiopinread(led5_port, led5_pin); / 翻转led gpiopinwrite(led5_port, led5_pin, ucval); sysctlde

28、lay(500 * (thesysclock / 3000); gpiopinwrite(led2_port, led2_pin, ucval); gpiopinwrite(led5_port, led5_pin, ucval); sysctldelay(500 * (thesysclock / 3000); void led3flash () unsigned char ucval; ucval = gpiopinread(led3_port, led3_pin); / 翻转led gpiopinwrite(led3_port, led3_pin, ucval); ucval = gpiop

29、inread(led4_port, led4_pin); gpiopinwrite(led4_port, led4_pin, ucval); / 翻转led sysctldelay(500 * (thesysclock / 3000); gpiopinwrite(led3_port, led3_pin, ucval); gpiopinwrite(led4_port, led4_pin, ucval); sysctldelay(500 * (thesysclock / 3000); void beep() unsigned char ucval; ucval = gpiopinread(beep

30、_port, beep_pin); / 翻转led gpiopinwrite(beep_port, beep_pin, ucval); sysctldelay(100 * (thesysclock / 3000); / 延时约10ms,消除按键抖动 gpiopinwrite(beep_port, beep_pin, ucval); sysctldelay(100 * (thesysclock / 3000); / 延时约10ms,消除按键抖动 viod display() /显示函数 write_com(0x80+0x00); write_data(shi); /write_com(1);wr

31、ite_com(0x80+0x01);/数据指针write_data(ge);sysctldelay(1000 * (thesysclock / 4000); ge-; if(ge=47) shi-; ge=57;/ 主函数(程序入口)int main(void) clockinit(); / 时钟初始化:晶振,6mhz sysctlperienable(led1_periph); / 使能led所在的gpio端口 gpiopintypeout(led1_port, led1_pin); / 设置led所在管脚为输出 sysctlperienable(led2_periph); / 使能led

32、所在的gpio端口 gpiopintypeout(led2_port, led2_pin); / 设置led所在管脚为输出 sysctlperienable(led3_periph); / 使能led所在的gpio端口 gpiopintypeout(led3_port, led3_pin); / 设置led所在管脚为输出 sysctlperienable(led4_periph); / 使能led所在的gpio端口 gpiopintypeout(led4_port, led4_pin); / 设置led所在管脚为输出 sysctlperienable(led5_periph); / 使能led

33、所在的gpio端口 gpiopintypeout(led5_port, led5_pin); / 设置led所在管脚为输出 sysctlperienable(led6_periph); / 使能led所在的gpio端口 gpiopintypeout(led6_port, led6_pin); / 设置led所在管脚为输出 sysctlperienable(beep_periph); / 使能led所在的gpio端口 gpiopintypeout(beep_port, beep_pin); / 设置led所在管脚为输出 gpiopinwrite(led1_port, led1_pin, 0xff); / 熄灭led gpiopinwrite(led2_port, led2_pin, 0xff); / 熄灭led gpiopinwrite(led3_port, led3_pin, 0x

温馨提示

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

评论

0/150

提交评论