基于MSP430的交通灯控制系统

更新时间:2023-08-26 18:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

**大学

课程设计说明书

题目: 智能仪器仪表课程设计

姓 名: *** 院 (系): 电气信息工程学院 专业班级: 自动化09-2班 学 号: 540901010204 指导教师: 李银华 毋媛媛

成 绩:

时间: 2013 年 1 月 2 日至 2013 年 1 月 18 日

说 明

1、课程设计进行期间,学生应按教学计划,将每天的学习情况(包括学习内容、遇到问题及解决办法、心得体会等)如实进行记录。 2、结束时,根据课程设计内容和学习记录书写报告。

3、指导教师应综合考虑学生的学习态度、报告内容和实际操作情况等,给出评语和成绩。

课程设计报告撰写格式

1、课程设计说明书用纸一律采用16开幅面,有条件最好打印。打印正文用宋体小四号字;版面页边距:上2.5cm,下2.5cm,左3cm,右2cm;页码用小五号字底端居中;左边装订。

2、课程设计报告一般由以下几部分组成:A.任务书; B.目录; C.正文; D.参考文献;E.附录。

3、报告正文撰写的题序层次格式:

**大学

课 程 设 计 任 务 书

题目 交通信号灯控制系统 专业、班级 自动化09-2班 学号 04 姓名 *** 主要内容、基本要求、主要参考资料等:

主要内容:

设计内容参见附件

基本要求:

明确课程设计任务,复习与查阅有关资料。

按要求对设计进行简要说明,总体设计方案,设计电路,使用计算机绘图,画出详细的电路接线图,列出元器件清单。电路图要求工整、清楚、正确,并标明管脚。

软件编程必须有流程图,程序必须加注释,各程序段的开始要注明该段功能和作用。 写出体会和总结。

要求使用B5打印稿或16开纸手写,不少于5000字。格式遵照学校规定。 主要参考资料:

“单片机与控制技术” 杨宁主编,北京航空航天大学出版社。

“单片机应用程序设计技术” (修订版) 周航慈主编,北京航空航天大学出版社。 “电子技术应用”、“电子设计应用”、“单片机与嵌入式系统应用”等期刊 http://www.77cn.com.cn(单片机和元器件资料) http://www.77cn.com.cn (元器件资料) http://www.77cn.com.cn(电子产品世界)

完 成 期 限: 2012年1月6日 指导教师签名: 课程负责人签名:

2011年 12 月 16 日

基于MSP320单片机的交通信号灯控制器设计

摘要

一个好的交通灯控制系统,将给道路拥挤、违章控制等方面给予技术革新。随着大规模集成电路及计算机技术的迅速发展,以及人工智能在控制技术方面的广泛运用,智能设备有了很大的发展,是现代科技发展的主流方向。基于MSP430单片机的交通控制系统以MSP430F149单片机为路口控制核心、LED作为显示、驱动电路与部分模拟器件构成的一种电子产品。MSP430F149单片机为控制核心,能实时的进行控制;由于LED有高节能、安全性高 、寿命长 、快速响应、运行成本低等优点,所以用作显示很合理;74HC573驱动电路用于对LED的驱动;此系统可以长时间稳定的运行,可用于各种十字路口,进行自动的交通控制,由于留有其它接口,可以很方便的进行升级扩展。 在本设计中充分利用了单片机内部资源,涉及到了键盘控制、数码管显示、中断系统、定时/计数器、串口通信等。

关键字 交通灯 MSP430单片机 数码管

目 录

摘要 ........................................................... 4 1.系统设计 .................................................... 5 1.1 硬件系统框图 ............................................ 6 1.2 软件系统设计 ............................................ 6

1.2.1 软件系统主流程 ........................................ 6 1.2.2 程序设计 ............................................. 7

2.硬件系统单元电路设计 ........................................ 8 2.1 MSP430最小系统 ......................................... 8 2.2 电源电路 ................................................ 9 2.3 数码管显示电路 .......................................... 9 2.4 LED显示电路 ........................................... 10 3.软件系统单元设计 ........................................... 10 3.1 protel 99概述 ......................................... 10 3.2 IAR FOR 430简介 ....................................... 11 3.3 子任务流程 ............................................. 11 4.系统测试 ................................................... 12 5.结论 ....................................................... 12 参考文献 ...................................................... 14 附录 .......................................................... 15

1.系统设计

1.1 硬件系统框图

该系统由MSP430单片机最小系统、电源电路、按键电路、数码管显示电路、红绿

灯显示电路组成。强大的处理能力MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7种源操作数寻址、4种目的操作数寻址)、简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储都可以参加多种运算;还有高效的查表处理指令;有较高的处理速度,在8MHZ晶体驱动下指令周期为125ns。这些特点保证了可编制出高效率的源程序,完全可以满足本系统的需要;与其他控制方法相比,所用器件可以说是比较简单经济的。电源电路主要负责对整个系统进行供电,让系统能够正常运行。按键电路实现对一些时间和工作模式的转换,很好的实现了人机交互的功能。数码管显示电路实现对倒计时间的显示功能,红绿灯显示电路实现十字路口红黄绿之间的转换。系统框图如图1所示,

图1 硬件系统框图

1.2 软件系统设计

1.2.1 软件系统主流程

如图2所示为软件系统主流程图:

图2 软件系统主流程框图

1.2.2 程序设计

道口交通控制系统程序主要分为以下几个模块:初始化程序、主程序、键盘显示和延时。

(1)初始化程序

初始化程序主要完成的是对显示初值以及定时器初值。 (2)主程序

主程序要负责总体程序管理功能,实现人机交换设定。由于采用动态扫描方式显示时间,因此主程序大部分时间要调用扫描显示程序。键盘也加在主程序中了。 (3)延时服务程序

主要是在整个电路中,在动态显示时间得用延时来保证数码管亮足够的时间。

(4)显示

主要是对数码管的显示,让人们能更准确的看清时间,可以什么时间通过。 在整个程序流程图中,提高了系统的灵活性中断任务主要进行紧急情况处理,并保护当前的现场,以便于恢复。

2.硬件系统单元电路设计

2.1 MSP430最小系统

图3 MSP430单片机最小系统

如图3所示,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.2 电源电路

图4 电源电路

接入电路时(如图5),P1为DC5V输入接头,D1二极管防止电源接反,对电路具有保护作用,ASM1117-3.3电源管理芯片输出稳定的+3.3V电压。C6、C3、C5为滤波电容,实现高频和低频滤波。D2的发光二极管是电源指示灯。

2.3 数码管显示电路

图5 数码管显示电路

采用74HC573数据锁存器,对数码管进行驱动,同时还具有数据所存作用,方便程序设计。采用两个独立的共阳极数码管实现倒计时间的显示。两PNP三极管实习对数码

管的为控制还具有驱动功能。C9和C10两个电容实现对电源高频和低频的滤波作用,保证锁存器的电源稳定。

2.4 LED显示电路

图6 红绿灯显示电路

由于LED有高节能、安全性高 、寿命长 、快速响应、运行成本低等优点,所以用作显示很合理,特别是室外运作,LED更有优势。采用灌电流的输出方式,提高了了电流驱动能力,保证了LED灯的亮度。

3.软件系统单元设计

3.1 protel 99概述

(1) 将电原理图编辑(Schematic Edit)、印制电路板设计(PCB)、可编程逻辑器件PLD设计、自动布线(Route)、电路模拟/仿真(Sim)等功能有机地结合在一起,是真正意义上的EDA软件,智能化、自动化程度高。

(2) 支持由上到下或由下到上的层次电路设计,使Protel98能够完成大型、复杂的电路设计。

(3) 当电原理图中的元件来自仿真元件库时,可以直接对电原理图中的电路进行仿真测试。

(4) 提供ERC(电气法则检查)和DRC(设计规则检查),最大限度地减少设计差错. (5) 库元件的管理、编辑功能完善,操作非常方便。通过基本的作图工具,即可完成原理图用元件电气图形符号以及PCB用元件封装图形的编辑、制作。

(6) 全面兼容TANGO及Protel for DOS,即在Protel98中可以使用、编辑TANGO或低版本Protel建立的文件,并提供了与OrCAD格式文件转换功能。

(7) Schematic和PCB之间具有动态链接功能,保证了原理图与印制板的一致性,以便相互检查、校验。

(8) 具有连续操作功能,可以快速地放置同类型元件、连线等。

3.2 IAR FOR 430简介

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

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

3.3 子任务流程

在本设计中有两个任务和一个中断,任务0创建了两个任务,任务1用于对红绿灯的驱动控制与计时;任务2用于LED显示驱动器。两个任务同时进行,相互渗透;任务1计时改变当前的倒计时Time,而任务2进行当前Time的显示;同时还进行中断控制,提高了系统的灵活性,在本系统中,中断与两个任务实时进行,并行执行。中断任务主要进行紧急情况处理,并保护当前的现场,以便于恢复。在处理紧急情况时,所有方向的红灯都亮10S。处理结束时,恢复到处理之前的状态,并继续执行交通控制。

图7 任务1流程

任务1用于对红绿灯的驱动控制与计时,改变当前的倒计时Time(如图7)。任务2主要进行LED显示,通过动态扫描的方法进行2位LED显示。

4.系统测试

基于MSP430单片机的交通控制系统测试,实现了:(1)南北绿灯时,东西红灯(30S);(2)南北黄灯闪烁(3S),东西红灯;(3)南北红灯,东西绿灯(30S);(4)南北红灯,东西黄灯闪烁(3S);倒计时显示用2位LED显示;有紧急情况处理机制,当紧急情况触发时,所有方向亮红灯(10S);紧急情况处理后,可以恢复到紧急情况处理这前的状态,即现场保护。在整个测试中,运行正常无异常。

5.结论

经过几个月的努力,我终于完成了这次的毕业设计《基于MSP430单片机的交通信号灯控制系统》。从接受到这个课题到逐步的完成,每一步的完成对我来说都有着新的

体会。

在大学期间,这是给我的最大的一个挑战。从拿到这个题目开始,到收集这方面的资料,一步一步的逐步完善自己的方案设计,在这个过程中可以说自己收获了很多,同时也发现了自身知识的不足,我们必须具备一定的专业基础知识,才能成功的设计出一件合格的东西。当然最重要的是学到了关于基本MSP430的一些基本应用,同时也加深了对一些常用电路的了解及设计方法。但是其中遇到的问题也不少,因为我们之前学的都是51单片机,现在着手做MSP430的芯片,这是一个很有难度和挑战性的设计,所以很多的内容都是需要自己去自学的,比如有些MSP430的芯片和引脚问题不懂的时候就可以试着去参考51单片机的,两者相比较一下,一些问题就能迎刃而解,这也是一种很好的学习方法。

通过这一阶段的毕业设计,我受益匪浅,不仅锻炼了良好的逻辑思维能力,而且培养了弃而不舍的求学精神和严谨作风。回顾此次毕业设计,是大学三年所学知识很好的总结。

参考文献

[1] 姜志海.单片机原理及应用[M].北京:电子工业出版社,2005.7.27-71

[2] 龙脉工作室.51单片机C语言应用开发技术大全[M].北京:人民邮政出版社,2008.9.240-500

[3] 彭为 黄科 雷道仲.单片机典型系统设计[M].北京:电子工业出版社,2006.5.246-273

[4] 谢维成.单片机原理及应用[M].北京:清华大学出版社,2009.2.11-26

附录

部分程序源码

*********************************************************************** 设计者:***

----------------------------------------------- 设计时间:2013年1月7日

***********************************************/ typedef unsigned char uchar; typedef unsigned int uint; //宏定义

#define DUAN_OFF P5OUT |= BIT2 #define DUAN_ON P5OUT &= ~BIT2 #define SHI_OFF P5OUT |= BIT0 #define SHI_ON P5OUT &= ~BIT0 #define GE_OFF P5OUT |= BIT1 #define GE_ON P5OUT &= ~BIT1 #define keyin (P1IN & 0x0f) #include <msp430x14x.h> //数码管7位段码:0--f

uchar scandata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; /********************设置全局变量********************/ uchar num,numx,shi,ge,state;

/********************子函数声明********************/ void display_shu(uchar shi,uchar ge); void display_led();

void delayms(uint xms);

/********************主函数********************/ void main(void) {

WDTCTL = WDT_ADLY_1000; // 设置内部看门狗工作在定时器模式,1s中断一次 IE1 |= WDTIE; // 使能看门狗中断

TACCR0 = 50000; // 设置定时器初值,设定黄灯闪烁频率为2Hz TBCCR0 = 50000;

TACTL = TASSEL_2 + MC_1;// 设置定时器时钟为SMCLK,递增方式为连续方式 TBCTL = TBSSEL_2 + MC_1;

P1IES = 0x01; // 设置P1.0为下降沿中断 P1IE = 0x0f; // 打开PI口外部中断使能

P2DIR = 0xff; // 设置P2、P4、P3、P5的IO方向为输出 P3DIR = 0xff; P4DIR = 0xff; P5DIR = 0xff;

P2OUT = 0xff;//设置P4,P5的输出初值,关闭数码管和交通灯 P3OUT = 0xff;

P4OUT = 0xff; P5OUT = 0xff;

_EINT(); //打开全局中断 while(1)//循环 {

display_shu(shi,ge); display_led(); } }

/******************************************* 函数名称:display_shu

功 能:让数码管显示倒计时间 参 数:shi,ge 返回值 :无

********************************************/ void display_shu(uchar shi,uchar ge) {

DUAN_ON;//打开锁存器,送入十位段选信号 P5OUT = scandata[shi];

GE_OFF;//关闭个位数据,显示十位数据 SHI_ON;

delayms(5);//延时

DUAN_ON;//打开锁存器,送入个位段选信号 P5OUT = scandata[ge]; DUAN_OFF;

SHI_OFF;//关闭十位数据,显示个位数据 GE_ON;

delayms(5);//延时 }

/******************************************* 函数名称:display_led

功 能:让数码管显示倒计时间 参 数:无 返回值 :无

********************************************/ void dispay_led() {

if(num==0&&state==0) {

P2OUT &= ~(BIT4+BIT5+BIT6+BIT7);//东西方向绿灯,南北方向红灯

P2OUT |= BIT0+BIT1+BIT2+BIT3; state++; }

if(num==5&&state==1) {

P2OUT &= ~(BIT4+BIT5);//东西方向黄灯,南北方向红灯 P2OUT |= BIT0+BIT1+BIT2+BIT3+BIT6+BIT7;

TACCTL0 = CCIE; // 打开定时器A中断,东西方向黄灯闪烁 state++; }

if(num==0&&state==2) {

P2OUT &= ~(BIT0+BIT1+BIT2+BIT3);//东西方向红灯,南北方向绿灯 P2OUT |= BIT4+BIT5+BIT6+BIT7; state++; }

if(num==5&&state==3) {

P2OUT &= ~(BIT0+BIT1);//东西方向红灯,南北方向黄灯 P2OUT |= BIT2+BIT3+BIT4+BIT5+BIT6+BIT7;

TBCCTL0 = CCIE;// 打开定时器B中断,南北方向黄灯闪烁 state=0; } }

/******************************************* 函数名称:delayms

功 能:实现毫秒延时 参 数:xms 返回值 :无

********************************************/ void delayms(uint xms) {

uint tmp;

for(tmp = 1000*xms;tmp > 0;tmp--); }

/******************************************* 函数名称:watchdog_timer

功 能:看门狗中断服务函数,设置显示时间和位数 参 数:无 返回值 :无

********************************************/ #pragma vector=WDT_VECTOR

__interrupt void watchdog_timer(void) {

num--; if(num==0) num=numx; shi=num/10; ge=num%10; }

/******************************************* 函数名称:TIMERA0_VECTOR

功 能:定时器A中断服务函数,实现东西方向黄灯闪烁 参 数:无 返回值 :无

********************************************/ #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) {

P3OUT ^= BIT0+BIT1; // 东西方向黄灯闪烁 }

/******************************************* 函数名称:TIMERB0_VECTOR

功 能:定时器B中断服务函数,实现南北方向黄灯闪烁 参 数:无 返回值 :无

********************************************/ #pragma vector=TIMERB0_VECTOR __interrupt void Timer_B (void) {

P3OUT ^= BIT2+BIT3;// 南北方向黄灯闪烁 }

/******************************************* 函数名称:PORT1_ISR

功 能:P1端口的中断服务函数 参 数:无 返回值 :无

********************************************/ #pragma vector=PORT1_VECTOR __interrupt void PORT1_ISR(void) {

P4OUT = 0xff;//关闭数码管时间显示。 if(keyin == 0x0f) //如果有按键被按下 {

delayms(2);//延时去抖动 if(keyin == 0x0f) {

while(keyin != 0x0f);//等待按键放开

if(keyin==0x0e)//如果是增加按键按下,增加时间数,但不超过60秒 {

numx++; if(numx==61) numx=60; }

if(keyin==0x07)//如果是减少键按下,减少时间数,但不低于20秒 {

numx--;

if(numx==19) numx=20; }

if(keyin==0x0d)//如果是自动键按下,退出中断,转向自动模式 {

P1IFG = 0; } } } }

***********************************************************************

本文来源:https://www.bwwdw.com/article/x51i.html

Top