交通灯控制系统设计_第1页
交通灯控制系统设计_第2页
交通灯控制系统设计_第3页
交通灯控制系统设计_第4页
交通灯控制系统设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、交通灯控制系统设计 _交通灯控制系统设计_ -基于单片机MSP430实验结果总体设计设计指标感想程序代码设计要求设计目的摘 要 一个好的交通灯控制系统,将给道路拥挤、违章控制等方面给予技术革新。随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技术方面的广泛运用,智能设备有了很大的发展,是现代科技发展的主流方向。基于MSP430单片机的交通控制系统以MSP430F149单片机为路口控制核心、液晶屏12864和LED灯作为显示、驱动电路与部分模拟器件构成的一种电子产品。MSP430F149单片机为控制核心,能实时的进行控制;此系统可以长时间稳定的运行,可用于各种十字路口,进行自动的交通

2、控制,由于留有其它接口,可以很方便的进行升级扩展。 本设计实现的功能为:液晶屏上东西方向与南北方向的交通灯控制;液晶屏上交通灯的时间显示;LED红绿黄三种灯的交替发光;当有救护车出现两个方向的红灯亮起。1.设计目的(1)学习MSP430 内部定时器的原理及应用。(2)掌握外部中断技术的原理及应用。(3)掌握独立按键的识别方法及数码显示电路的设计。(4)了解Proteus 及IAR FOR 430(EW430)软件的应用。2.设计指标(1)用发光二级管模拟东、西、南、北四个路口的交通信号灯。(2)在十字路口处,交通灯的基本变化规律为:当东西方向放行、南北方向禁行时,东西方向放行的总时间为30 s

3、,其中绿灯亮25 s,接着黄灯亮5 s 后,红灯开始点亮,东西方向禁行,南北方向又开始放行。(3)用2 位数码管进行30 s 递减时间显示。(4)当有急救车到达时,路口的信号灯全部变红,以便让急救车通过。急救车通过的时间为10 s。3.设计要求(1)硬件设计:设计电路原理图,并进行系统功能描述。(2)软件设计:设计程序流程图并编制编程。(3)在软件平台中进行仿真调试。(4)搭建实验电路,下载程序,进行硬件调试。(5)整理实验报告,并对设计过程进行归纳总结。4.总体设计 系统设计思路在硬件上,为了简洁,做成两个部分。一方面在液晶屏上标识东西方向和南北方向交通灯的状态和时间倒数,一方面用LED灯来

4、显示十字路口灯的状态。在液晶屏上面我们把显示设置为十字路口的样子,用_和来画出路口,左上角和右上角显示我们组的姓名,东西两侧中文显示,路口处用“R”“Y”“G”来代表红灯、黄灯和绿灯,旁边来倒数显示剩余通行时间。左下角和右下角显示救护车的状态(救护车出现coming和不在away)。此外我们将P1.2作为救护车信号的输入端,LED灯方面设置P3.0,P3.1,P3.2作为南北方向的红黄绿灯的输出端口连接相应的灯,同时P4.0,P4.1,P4.2作为东西方向的。而主程序中设置四种状态。设计思路如下图。LED灯显示 液晶显示屏显示无救护车的四种状态系统的主要组成 本系统主要包括单片机电路、1286

5、4液晶显示电路以及LED数码灯电路。 C语言部分设计1.中断处理函数:在该函数中每次循环一次,增加计数的data1,判断data1的大小从而判断处于哪种状态,从而对南北和东西方向的时间进行记录;2.主函数中进行端口的初始化和其他函数(中断函数,初始化程序,汉字显示函数等)的引用;3.输入输出端口的中断函数对救护车来的情况进行处理,并对显示的时间和此时显示的字符进行定义,并定义输出端口的高/低电平。MSP430单片机系统MSP430 是德州公司新开发的一类具有16 位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16 位的总线,外设和内存统一编址,寻址范

6、围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16 位定时器、一个14 路的12 位的模数转换器、一个看门狗、6 路P 口、两路USART通信端口、一个比较器、一个DCO 内部振荡器和两个外部时钟,支持8M 的时钟.由于FLASH型,则可以在线对单片机进行调试和下载,且JTAG 口直接和FET的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作,对环境和人体的辐射小,测量结果为100mw 左右的功耗(电流为14mA 左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相

7、信MSP430 单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP 系列的桥梁,随着自动控制的高速化和低功耗化 ,MSP430 系列将会得到越来越多人的喜爱。MSP430单片机的管脚图如下:原理图为:基于MSP430基本性质的设计思路1. 时钟部分,关闭看门狗,运用time_A内部的输入时钟源ACLK,并且选择增计数模式,以一秒为基本时间单位;2. 通过计数,if语句的选择来定义四种状态;3. P1做为输入端口,P3和P4作为输出端口;所参考的资料一、MSP430单片机的端口概述 P1P6每组有8个I/O 口,P3,P4,P5,P6具有I/O,及其它片内外设功能,每组具有4

8、个寄存器。P1,P2除具有上述功能外还具有中断能力,每组具有7个寄存器。 二、PX端口 1. P1,P2端口 (1)PxDIR 输入/输出方向寄存器相互独立的八位分别定义了Px7Px0,8个引脚的输入输出方向。 0 输入模式,只能读。 1 输出模式,可读可写。 8为在PUC后都被复位及置为0.  (2)PxIN 输入寄存器 输入寄存器是CPU扫描I/O引脚信号的只读寄存器。用户不能对它写入,只能通过读取该寄存器中内容知道I/O端口的输入信号。此时引脚的方向必须选定为输入。(3)PxOUT输出寄存器

9、0;该寄存器为I/O端口的输出缓冲寄存器。可用所有包含目的操作数的指令修改,以达到改变I/O口状态的目的。在读取时输出缓存的内容与引脚方向定义无关。改变方向寄存器的内容,输出缓存的内容不受影响。(4)PxIFG中断标志寄存器 0 表示没有中断请求 1 表示有中断请求 中断标志PxIFG.0 PxIFG.7共用一个中断向量,属于多源中断。当对应的I/O口有上升沿或下降沿出现时,对应的标志位会置位,如果中断允许而且系统总中断允许,则表明在该引脚上有中断事件发生,并执行中断处理程序。 (5)PxIE中断使能寄存器 76543210PnIE.7PnIE

10、.6PnIE.5PnIE.4PnIE.3PnIE.2PnIE.1PnIE.00 禁止中断 1 允许中断 只有跳变才能引起中断请求,而静电平不能.(6)PxIES中断触发沿选择寄存器 0 上升沿使相应标志位置位 1 下降沿使相应标志位置位 (7)PxSEL功能选择寄存器 0 选择引脚为I/O功能 1 选择引脚为外围模块功能 单片机内还有丰富的外围模块,这些模块通常也需要和外界进行通信,但是单片机的引脚有限,故采用P1和P2引脚复用的方法来实现。2. 端口P3,P4,P5,P6 (1)端口P3,P4,P5,P

11、6除没有中断能力外,其余功能和P1,P2相同,包括输入输出功能和外围模块功能。 (2)由于端口P3,P4,P5,P6没有中断能力,所以它们没有和中断相关的寄存器,每组端口有4个寄存器分别为:PxDIR 输入/输出方向寄存器,PxIN 输入寄存器,PxOUT输入寄存器,PxSEL功能选择寄存器。 Timer_A定时器: 注:MSP430有两个16位定时器Timer_A和Timer_B.二者基本相同。主要有TACTL,TAR,CCTL0,CCR0,CCTL1,CCR1,CCTL2,CCR2,TAIV几个寄存器。(1.)TACLK 控制寄存器15109876543210

12、0未用SSEL1SSEL0ID1ID0MC1MC0未用CLRTAIETAIFGSSEL1,SSEL0选择输入分频器的输入时钟源SSEL1SSEL0输入时钟源 说明00TACLK使用外部引脚信号作为输入01ACLK辅助时钟10MCLK系统主时钟11INCLK外部输入时钟ID1,ID0 选择输入分频器的分频系数MC1,MC0选择定时器工作模式CLR 定时器清除位,计数器内容清零TAIE 中断允许位,允许定时器溢出中断TAIFG 定时器溢出标志位,在不同定时器工作模式下,该位置位条件不一样。  LCD显示本次采用的LCD显示屏为LCD12864。带中文字库的128X64是一种具有

13、4 位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192个16*16 点汉字,和128个16*8点ASCII 字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16 点阵的汉字。也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶 显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。12864芯片主要用于显示时间和定时时间。由

14、点阵字符液晶显示器件和专用的行、列驱动器、控制及必要的链接件、结构件组装而成,可以显示数字和西文字符,但不能显示图形,已经可以满足本次设计的需要。运用:在工程中添加芯片汉字显示的C语言文件,然后在main.c中引用该函数,从而显示需要在液晶屏上显示的内容。显示电路 单片机应用系统中使用的显示器主要有发光二极管LED液晶显示器和液晶LCD显示。因此LCD实现非常简单,只需要LCD模块就可以实现。LCD12864共有20个引脚,Vss为接地电源,Vcc、Vee接+5V的电源。RS为寄存器选择,高电平时,选择数据寄存器;低电平时,选择指令寄存器。当RS和RW共同为低电平时,进行读操作,低电平时,进行

15、写操作。当RS和RW共同为低电平时,可以写入指令或者显示地址,当RS为低电平、RW为高电平时,可以读忙信号,当RS为高电平、RW为低电平,可以写入数据。E为使能端,A和K用于带背光模块,不带背光模块。DB0-DB7为8位双向数据线。下图为显示模块流程图:5程序代码#include "msp430.h"#include "cry12864.h"#include "cry12864.C"unsigned char hang1 = " |00| "unsigned char hang2 = "西 U 东&quo

16、t;unsigned char hang3 = "00U_ U _00U"unsigned char hang4 = "救护车|00| "unsigned char hangData="0123456789"unsigned char DispArray2; void timerA0_init(void);unsigned char data1,state,dataWE,dataNS;unsigned char AmbulanceFlag=0; /救护车的标志 void sys_init(void); /系统初始化void inter

17、rupt_handler(void); /中断处理函数void interrupt_handler(void) if(data1<26) state=0; dataWE=31-data1; dataNS=26-data1; else if(data1<31) state=1; dataWE=31-data1; dataNS=31-data1; else if(data1<56) state=2; dataWE=56-data1; dataNS=61-data1; else if(data1<61) state=3; dataWE=61-data1; dataNS=61-

18、data1; if(data1>=60)data1=0;void main( void ) P1DIR = 0XFF;P1OUT = 0XFF; /*六行程序关闭所有的IO口*/ P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; WDTCTL = WDTPW + WDTHOLD; /设置控制寄存器,关闭看门狗 Ini_Lcd(); /初始化液晶 timerA0_init(

19、); /定时器初始化 Disp_HZ(0x80,hang1,8); /显示第一行内容 Disp_HZ(0x90,hang2,8); / 二 Disp_HZ(0x88,hang3,8); / 三 Disp_HZ(0x98,hang4,8); P1DIR &=0x04; /P1.0输入 P1IE |=0x04; /P1.0中断使能 P1IES |=0x04; /P1.0下降沿触发中断 P1IFG =0x00; /P1.0中断标志设为0 while(1); # pragma vector=PORT1_VECTOR /IO中断程序_interrupt void Amb(void) P1IFG

20、= 0x00; AmbulanceFlag=1; #pragma vector=TIMERA0_VECTOR /定时器TIMERA0的中断程序_interrupt void _A(void) static unsigned char cnt=11; CCR0=32768; if(AmbulanceFlag=1) /救护车来啦的计时程序 cnt-; if(cnt=0) /倒计时十秒 AmbulanceFlag=0; cnt=11; DispArray0=cnt; DispArray1=cnt; else interrupt_handler(); /中断处理程序 if(AmbulanceFlag=

21、0) /没有救护车的情况 hang30=hangDatadataWE/10; /显示南北方向的灯控时间 hang31=hangDatadataWE%10; hang313=hangDatadataWE/10; /显示东西方向的灯控时间 hang314=hangDatadataWE%10; hang17=hangDatadataNS/10; hang18=hangDatadataNS%10; hang47=hangDatadataNS/10; hang48=hangDatadataNS%10; else /救护车来了以后的显示程序 hang30=hangDatacnt/10; hang31=ha

22、ngDatacnt%10; hang313=hangDatacnt/10; hang314=hangDatacnt%10; hang17=hangDatacnt/10; hang18=hangDatacnt%10; hang47=hangDatacnt/10; hang48=hangDatacnt%10; switch (state) /对红绿灯进行字符转换以显示于LCD上 case 0: hang28='G' hang38='G' hang32='R' hang315='R' break; case 1: hang28='

23、;Y' hang38='Y' break; case 2: hang28='R' hang38='R' hang32='G' hang315='G' break; case 3: hang32='Y' hang315='Y' break; if(AmbulanceFlag=1) /救护车的显示 hang28='R' hang38='R' hang32='R' hang315='R' hang410='C&

24、#39;/COMING hang411='o' hang412='m' hang413='i' hang414='n' hang415='g' else hang410='A' /AWAY hang411='w' hang412='a' hang413='y' hang414=' ' hang415=' ' if(hang32='R') P4OUT=BIT0; P4OUT&=BIT1; P4OUT

25、&=BIT2; if(hang32='Y') P4OUT|=BIT1; P4OUT&=BIT0; P4OUT&=BIT2; if(hang32='G') P4OUT|=BIT2; P4OUT&=BIT1; P4OUT&=BIT0; if(hang28='R') P3OUT=BIT0; P3OUT&=BIT1; P3OUT&=BIT2; if(hang28='Y') P3OUT|=BIT1; P3OUT&=BIT0; P3OUT&=BIT2; if(hang28='G') P3OUT|=BIT2; P3OUT&=BIT1; P3OUT&=BIT0; Ini_Lcd(); /初始化液晶 Disp_HZ(0x80,hang1,8); Disp_HZ(0x90,hang2,8); Disp_HZ(0x88,hang3,8); Disp_HZ(0x98,ha

温馨提示

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

评论

0/150

提交评论