交通灯设计

时间:2024.5.15

交通灯控制系统设计

一、 实验摘要

一个好的交通灯控制系统,将给道路拥挤、违章控制等方面给予技术革新。随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技术方面的广泛应用,智能设备有了很大的发展,是现代科技发展的主流方向。本实验,我们应用了单片机MSP430,先是在软件proteus上进行了仿真实验,实现了我们的基本要求;然后我们用IAR FOR 430将编程好的程序烧到实验板上,在LCD显示屏上可以清晰的显示交通灯的变化,以及紧急情况下(救护车来时)的变化。

二、 实验目的

(1) 学习MSP430 内部的定时器的原理及应用。

(2) 掌握外部中断技术的原理及应用。

(3) 掌握独立按键的识别方法和数码显示电路的设计。

(4) 了解Proteus和IAR FOR 430(EW430)软件的应用。

三、 设计指标

(1)用发光二级管模拟东、西、南、北四个路口的交通信号灯。

(2)在十字路口处,交通灯的基本变化规律为:当东西方向放行、南北方向禁

行时,东西方向放行的总时间为 30 s,其中绿灯亮 25 s,接着黄灯亮 5 s后,红灯开始点亮,东西方向禁行,南北方向又开始放行。

(3)用 2位数码管进行 30 s递减时间显示。

(4)当有急救车到达时,路口的信号灯全部变红,以便让急救车通过。急救车通过的时间为 10 s。

四、 设计要求

(1)硬件设计:设计电路原理图,并进行系统功能描述。

(2)软件设计:设计程序流程图并编制编程。

(3)在软件平台中进行仿真调试。

(4)搭建实验电路,下载程序,进行硬件调试。

(5)整理实验报告,并对设计过程进行归纳总结。

五、 实验设备

材料清单:MSP430F149单片机最小系统版×1

双面PCB板×1

单排针

LCD液晶显示屏×1

实验器材:示波器,万用表,PC机

实验软件:Proteus,IAR For 430

六、 实验内容

1.实验中,使用的MSP430f149的最小系统:

如图所示,MSP430最小系统由复位电路、晶振电路、JTAG等组成。MSP430单片机的64个引脚大致可分为4类:电源、时钟、控制和I/O引脚。MSP430系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。当系统处于省电的备用状态时,用中断请求讲它唤醒只有6us。超低功耗MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。首先,MSP430系列单片机的电源电压采用的是1.8~3.6V电压。因而可使其在1MHz的时钟条件下运行时,芯片的电流会在200~400uA左右,时钟关断模式的最低功耗只有0.1uA。其次,独特的时钟系统设计,在

MSP430系列中有两个不同的系统时钟系统:基本时钟系统和锁频(FLL和

交通灯设计

FLL+)

时钟系统或DCO数字振荡器时钟系统。有的使用一个晶体振荡器(32768Hz),有的使用两个晶体振荡器。由系统时钟系统产生CPU和各功能所需的时钟,并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。

2.软件介绍

(1)IAR FOR 430简介

IAR Systems是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于19xx年,迄今已有27年,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。

国内普及的MSP430开发软件种类不多,主要有IAR公司的Embedded Workbench forMSP430(简称EW430)和AQ430。目前IAR的用户居多。IAR EW430软件提供了工程管理,程序编辑,代码下载,调试等所有功能,并且软件界面和操作方法与IAR EW for ARM等开发软件一致,因此,学会了IAR EW430,就可以很顺利的过度到另一种新处理器的开发工作。

(2)Proteus仿真软件简介

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、

PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,20xx年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

a.互动的电路仿真

用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。

b.仿真处理器及其外围电路

可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

3.本实验硬件仿真部分 利用Proteus软件进行电路仿真:

①打开Proteus软件,点击ISIS软件模块,进入原理图设计仿真界面。

②通过对象选择按钮Pick Device, 利用其搜索引擎, 将所需元器件加入到对象选择器窗口.

③放置元器件至图形编辑窗口, 并调整到合适位置。放置总线至图形编辑窗口。 完成元器件之间以及元器件与总线的连线。给与总线连接的导线贴标签, 以便于系统识别。

④Proteus 与IAR联合仿真,先通过IAR编辑、修改、编译源程序并生成.HEX单片机能识别的文件,然后再运行Proteus将HEX文件与原理图中的单片机系统进行仿真。连着联合仿真的优点在于,可以一边修改程序一边进行电路仿真。在EW430中修改好文件电机编译连接,在Proteus中立马就可以重新点击运行进行新的仿真(因为.Hex文件的路径是不变的)。Proteus 软件中绘制仿真电路,然后选中单片机芯片,将生成的HEX格式的文件加载,最后按左下方的开始按钮即可运行仿真,查看实验效果。

4.本实验软件系统的设计

下图是我们常见到的十字路口的交通灯:

从图中我们可以看出东西方向共用一个红黄绿灯,南北方向共用一个红黄绿灯。

实验前,我们是想用6个LED灯模拟交通信号灯,用七段数码管显示倒计时,这与我们最初的硬件模拟相一致,但是在实验过程中,鉴于实验设备有限和老师的要求,我们修改了最初的方案,我们把实验用来显示倒计时的数码管和显示交通信号的红绿黄交通灯都显示在LCD屏上(其中R=红灯,G=绿灯,Y=黄灯),另外,为了模拟救护车,我们做了以下设定:救护车=ambu,C=救护车到达,A=救护车离开。

首先我们在老师的要求下,建立了一个实验模型,如下图:

交通灯设计

在这个实验模型的基础上,我们把实验软件部分可以分为三个部分,第一,液晶屏LCD和定时器A的初始化;第二,信号交通灯和倒计时在显示屏LCD上的显示;第三,中断程序的设计。终端任务的主要进行紧急情况处理,并保护当前的现场,以便于恢复,在处理紧急情况时,按下按键,所有方向的红灯都亮10s。处理结束后,恢复到处理之前的状态,并继续执行交通.

交通灯设计

交通灯设计

交通灯设计

交通灯设计

将单片机通过USB线与电脑连接,用IAR将程序烧录到单片机内,观察LCD液晶显示屏上的显示情况。

七、 实验结论

烧录程序后,显示屏上显示我们的姓名和交通信号灯(R,Y,G)以及倒计时. 实现了:(1)南北绿灯,东西红灯(25S);(2)南北黄灯闪烁(5S),东西红灯;(3)南北红灯,东西绿灯(25S);(4)南北红灯,东西黄灯闪烁(5S);救护车来时,按下按键,所有方向为红灯。

具体如下截图:

交通灯设计

八、 实验的不足和改进

实验时因为LCD显示屏上只能显示4行,所以我们很难在LCD上显示更多信息。而且,LCD显示的半角、全角问题我们也没有特别清晰,以致我们的程序的稳定性不好,略微的变动都可能会使出现在显示屏上的信息为乱码,由于时间问题我们不能更进一步的完善程序,但是即使实验结束后我们也会继续去完善它。我们之前想过能不能使显示屏上的信息更加动态一些,但是我们发现这样会使问题过于复杂,脱离了我们能力范畴,所以,我们放弃了。但是我认为如果时间充足,我们还是可以完成的,改进后,显示屏将更直观的显示我们需要的信息。

九、 心得体会

本次我们的实验是完成《用MSP430单片机实现的交通灯控制》的设计与实现。在这之前我们还没有系统的接触过单片机,所以,这次课程设计对我们也是一个考验。但是,我们通过近一周的努力,基本完成了《用MSP430单片机实现的交通灯控制》的设计与实现。在实验过程中我们收获了知识和友谊。

交通灯设计

从接触这个题目,我们一方面不停地到图书馆,网上收集资料来弥补自身知识

的不足,一步步完善自己的方案;另一方面我们在遇到困境时,也会寻求同学老师的帮忙。试验中,我们学习到了MSP430的一些基本应用,同时也加深了对一些常用电路的了解及设计方法。同时也第一次初步掌握了EW430软件以及Proteus软件的应用。我相信这对培养我们解决问题的能力,锻炼良好的逻辑思维能力,培养了弃而不舍的求学精神和严谨作风起到了关键的作用。回顾此次创新实验设计,宝贵之处并不在于结果与学分而在于过程与其中所需到的知识与能力。

附 录

/*********************************************************** 程序功能:在12864液晶上显示一屏汉字

-----------------------------------------------------------

----------------------------------------------------

测试说明:观察液晶显示

***********************************************************/ #include "msp430.h"

#include "cry12864.h"

#include "cry12864.C"

unsigned char hang1[] = {"杨万生& 蒋薛松 "};

unsigned char hang2[] = {"00U* 东西 "};

unsigned char hang3[] = {"00U* 南北 "};

unsigned char hang4[] = {"@ ambulance "};

unsigned char hangData[]={"0123456789无有"};

//void Timer_A(void);

void timerA0_init(void);

/***************************************/

#define GREEN 1 //定义字符

#define YELLOW 2

#define RED 4

#define COUNT_INIT 60

#define COMING 1

#define AWAY !COMING //定义救护车字符

typedef struct

{//定义液晶屏显示内容结构体

unsigned char NS,WE; //南北,东西

unsigned char count; //计数器

unsigned char show_Num_WE; //南北行时间

unsigned char show_Num_NS; //东西行计数

}Light_Str;

unsigned char DispArray[2]; //显示数据的数组

Light_Str Light; //结构体声明

unsigned char AmbulanceFlag=AWAY; //救护车的标志,初始状态为0

void sys_init(void); //系统初始化

void interrupt_handler(Light_Str*); //中断处理函数

void interrupt_handler(Light_Str* LightSt) //正常处理程序

{

/*NS:59-30R红 29-5G绿 4-0Y黄

具体形式: 29-0

29------0 南北行60秒的显示布局

WE:59-35G绿 34-30Y黄 29-0R红 东西行30秒的显示布局

具体形式: 29-5 4-0 29-0 */

(*LightSt).count--; //init=60,倒计时程序

//////////////////////////////////////////南北方向显示与计时

if((*LightSt).count>=30) { (*LightSt).NS=RED; //NS:59-30R红 (*LightSt).show_Num_NS=(*LightSt).count-30; //南北红灯禁止通行,东西通行时间到达

} else if((*LightSt).count>5) { (*LightSt).NS=GREEN; //NS: 29-5G绿 (*LightSt).show_Num_NS=(*LightSt).count;//东西红灯禁止通行,南北绿灯通行时间的倒计时显示

} else { (*LightSt).NS=YELLOW; //NS: 4-0Y黄 (*LightSt).show_Num_NS=(*LightSt).count;//东西红灯禁止通行,南北黄灯闪烁时间的倒计时显示

///////////////////////////////////////////东西方向显示与计时

if((*LightSt).count>35) { (*LightSt).WE=GREEN; //WE:59-35G绿 }

(*LightSt).show_Num_WE=(*LightSt).count-30;//南北红灯禁止通行,东西绿灯通行时间的倒计时显示

} else if((*LightSt).count>=30)//WE:34-30Y黄 { (*LightSt).WE=YELLOW; (*LightSt).show_Num_WE=(*LightSt).count-30;//南北红灯禁止通行,东西黄灯闪烁时间的倒计时显示

} else { (*LightSt).WE=RED; //WE: 29-0R红 (*LightSt).show_Num_WE=(*LightSt).count;//东西红灯禁止通行,南北通行时间得到

}

/////////////////////////////////////////

}

/***************************主函数*************************/

void main( void )

{

/*下面六行程序关闭所有的IO口*/

P1DIR = 0XFF;P1OUT = 0XFF; if((*LightSt).count==0) { } (*LightSt).count=COUNT_INIT;//reset复位,60秒倒计时显示开始

P2DIR = 0XFF;P2OUT = 0XFF;

P3DIR = 0XFF;P3OUT = 0XFF;

P4DIR = 0XFF;P4OUT = 0XFF;

P5DIR = 0XFF;P5OUT = 0XFF;

P6DIR = 0XFF;P6OUT = 0XFF;

WDTCTL = WDTPW + WDTHOLD; //关狗 看门狗-》执行喂狗指令 --》system reset

Ini_Lcd(); //初始化液晶

timerA0_init(); //定时器初始化

Disp_HZ(0x80,hang1,16); //显示第一行内容

Disp_HZ(0x90,hang2,3); // 显示第二行内容二

Disp_HZ(0x88,hang3,3); // 显示第三行内容 三

Disp_HZ(0x98,hang4,1);

P1DIR &=~0x04; //P1.0输入

P1IE |=0x04; //P1.0中断使能

P1IES |=0x04; //P1.0下降沿触发中断

P1IFG =0x00; //P1.0中断标志设为0

while(1);//程序进入正常轨道

/*while(1)

{

if(P1IN&0x01==0x00)

{

AmbulanceFlag=COMING;

}

//dispNum(DispArray);

}*/

}

# pragma vector=PORT1_VECTOR //救护车到达,执行IO中断程序 __interrupt void Amb(void)

{

P1IFG = 0x00;

AmbulanceFlag=COMING;

}

#pragma vector=TIMERA0_VECTOR //定时器TIMERA0的中断程序 __interrupt void _A(void)

{

static unsigned char cnt=10;

CCR0=32768;

if(AmbulanceFlag==COMING) //救护车来啦的计时程序 {

cnt--;

if(cnt==0)

{

AmbulanceFlag=AWAY; //倒计时十秒结束,cnt计数归位

cnt=10;

}

DispArray[0]=cnt; //救护车计时显示在LCD上

DispArray[1]=cnt;

}

else

{

interrupt_handler(&Light); //计数cnt不为0,救护车通行程序执行 }

/*根据救护车是否来临在LCD的四行显示内容*/

if(AmbulanceFlag==AWAY) //救护车已经离开

{

hang4[0]=hangData[10]; //第四行显示救护车离开信息

//正常运行时的显示程序

hang2[0]=hangData[Light.show_Num_WE/10]; //显示十位

hang2[1]=hangData[Light.show_Num_WE%10]; //显示个位

hang3[0]=hangData[Light.show_Num_NS/10]; //南北同东西

hang3[1]=hangData[Light.show_Num_NS%10];

}

else

{

hang4[0]=hangData[11]; //救护车来了以后的显示程序

hang2[0]=hangData[cnt/10];

hang2[1]=hangData[cnt%10];

hang3[0]=hangData[cnt/10];

hang3[1]=hangData[cnt%10];

}

switch (Light.NS) //对南北方向红绿灯进行字符转换以显示于LCD上 {

case RED:

hang2[2]='R';

break;

case YELLOW:

hang2[2]='Y';

break;

case GREEN:

hang2[2]='G';

break;

default:

break;

} //end of seitch NS

switch (Light.WE) //对东西方向红绿灯进行字符转换以显示于LCD上 {

case RED:

hang3[2]='R';

break;

case YELLOW:

hang3[2]='Y';

break;

case GREEN:

hang3[2]='G';

break;

default:

break;

} //end of seitch WE

/*根据救护车是否来临在LCD上转化字符显示内容*/

if(AmbulanceFlag==COMING) //救护车的显示 第四行显示来了or没有来 {

hang2[2]='R';

hang3[2]='R';

hang4[0]='C'; //coming,救护车到达

}

else

{

hang4[0]='A'; //away,救护车离开

}

Disp_HZ(0x80,hang1,8); //按照上面的内容具体显示就可以了 Disp_HZ(0x90,hang2,6);

Disp_HZ(0x88,hang3,6);

Disp_HZ(0x98,hang4,4);

//P2OUT=~P2OUT;

}//end of __interrupt

void timerA0_init(void) //定时器初始化

{

Light.count=COUNT_INIT; //初始值可能是60/59 /*

TimerA init

*/

CCTL0=CCIE; //中断使能

CCR0=32768;

TACTL=TASSEL_1+MC_1; //时钟源ACLK,加计数模式

_EINT();

}//end of timerA0_init

更多相关推荐:
单片机交通灯设计报告[1]

河南理工大学电子设计综合训练报告单片机控制的交通灯控制系统设计姓名:***学号:***专业班级:电气本09-2班指导老师:**所在学院:电气工程与自动化学院20XX年4月15日1摘要2系统总体方案及硬件设计12…

交通灯控制电路设计报告

华北科技学院数字电路设计报告交通灯控制电路设计报告目录一设计任务和要求2二设计方案的总体思路与选择31时钟信号发生器电路设计论证42定时器设计论证43控制器论证44信号灯的论证4三电路设计计算与分析51秒脉冲的...

交通灯控制电路的设计报告

一概述随着社会经济的发展城市交通问题越来越引起人们的关注人车路三者关系的协调已成为交通管理部门需要解决的重要问题之一交通灯通常指由红黄绿三种颜色灯组成用来指挥交通的信号灯绿灯亮时准许车辆通行黄灯亮时已越过停止线...

交通灯的设计心得体会总结

通过此次课程设计,使我更加扎实的掌握了有关电子线路方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知…

交通灯控制系统设计报告

交通信号灯控制系统设计一、设计目的1、学习LED数码管的原理及编程方法。2、学习键盘的原理及编程方法。3、掌握51单片机定时器与中断的使用。4、掌握交通信号灯控制系统的原理和实现方法。二、设计内容设计一个交通信…

交通灯控制电路设计报告

数字电路课程设计交通灯控制电路设计学院:信息科学技术学院班级:姓名:学号:指导老师:20##年4月26日目录一、设计任务.............................................…

51单片机c语言交通灯设计报告

xxxxxxxxx基于AT89S52交通灯设计学院电子信息工程专业班级xxxxxxxxxxxxxx姓名xxxx学号指导老师摘要交通灯在我们日常生活中随处可见它在交通系统中处于至关重要的位置交通灯的使用大大减少了...

交通灯实验报告

摘要交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞…

交通灯实习报告

河南科技学院新科学院单片机课程设计报告题目交通灯控制器设计专业班级电气工程及其自动化101姓名马佳佳时间20xx12320xx1221指导教师徐君鹏邵锋苗青林完成日期20xx年12月21日交通灯控制器设计任务书...

EDA交通灯实验报告

实验:交通灯设计一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;…

单片机交通灯设计报告

单片机课程设计论文前言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不…

交通灯控制器电路设计报告

交通灯控制器电路设计报告一设计要求1设计一个十字路口的交通灯控制器先是绿灯亮25秒紧接着黄灯亮5秒紧接着红灯亮30秒依此顺序循环控制2用计算机画出设计电路图进行仿真分析验证其正确性3写设计说明书一份画总原理图以...

交通灯设计报告(35篇)