DSP交通灯综合控制
- 格式:doc
- 大小:265.00 KB
- 文档页数:21
DSP十字路口交通灯课程设计问题描述在城市交通中,十字路口是交通流量极大的交汇点。
为了保障交通安全和交通效率,交通信号灯的设计和优化显得尤为重要。
本文将介绍一种基于数字信号处理(DSP)技术的十字路口交通灯控制系统的设计。
需求分析在设计十字路口交通灯系统时,需要满足以下需求:1.实现交通信号灯的控制,包括红灯、绿灯和黄灯的变化;2.根据交通流量调整信号灯的时长,以提高交通效率;3.实现紧急情况下的临时信号灯控制,例如救护车或警车的经过;4.提供人行道信号灯,以保障行人的交通安全。
系统设计硬件设计本系统的硬件设计包括以下组成部分:1.十字路口交通信号灯,包括红灯、绿灯和黄灯的LED灯;2.交通流量检测器,用于检测不同道路上的车辆数量;3.紧急情况检测器,用于检测救护车或警车的到达;4.人行道信号灯,用于指示行人过马路的时机。
软件设计本系统的软件设计包括以下几个主要模块:1.交通信号灯控制模块:根据交通流量和紧急情况,控制交通信号灯的变化。
可以使用DSP算法对交通流量进行实时分析和预测,以决定不同道路上的信号灯时长。
2.交通流量检测模块:利用传感器或计数器等装置,实时监测不同道路上的车辆数量,并将数据传输给交通信号灯控制模块。
3.紧急情况检测模块:通过紧急情况检测器,实时检测救护车或警车的到达,并将信号传输给交通信号灯控制模块,暂停其他道路的交通以保障紧急车辆的通行。
4.人行道信号灯控制模块:根据人行道上的行人数量以及交通信号灯的变化,控制人行道信号灯的显示,保障行人的交通安全。
系统实现为了实现DSP技术在十字路口交通灯设计中的应用,我们可以按照以下步骤进行实施:步骤一:选择合适的DSP芯片根据实际需求和性能要求,选择适合的DSP芯片,具有足够的计算能力和IO接口以支持交通信号灯和其他传感器的连接。
步骤二:确定交通信号灯控制算法根据交通流量和紧急情况的检测数据,设计合适的控制算法,以控制交通信号灯的变化。
dsp课程设计 交通灯一、课程目标知识目标:1. 学生能理解并掌握交通灯的基本工作原理,包括灯色变化规律及控制逻辑。
2. 学生能够运用数字信号处理(DSP)的基本概念,分析交通灯控制系统中的信号处理流程。
3. 学生能够描述交通灯控制系统中各组件的功能及其相互关系。
技能目标:1. 学生能够设计并实现一个简易的交通灯控制系统模型,运用所学DSP知识进行信号处理。
2. 学生通过小组合作,培养实际操作、问题解决和团队协作能力。
3. 学生能够运用图表、流程图等工具,展示交通灯控制系统的设计思路和操作步骤。
情感态度价值观目标:1. 学生培养对工程技术的兴趣,激发对电子控制系统的好奇心和创新意识。
2. 学生在学习过程中,树立安全意识,认识到遵守交通规则的重要性。
3. 学生通过课程学习,增强环保意识,认识到科技对解决交通问题的作用。
分析课程性质、学生特点和教学要求,本课程针对高年级学生设计,注重理论与实践相结合。
课程目标旨在帮助学生将所学DSP知识应用于实际交通灯控制系统中,培养其动手能力、团队协作能力和创新能力。
通过本课程的学习,学生能够更好地理解科技在生活中的应用,提高其综合素质。
1. 交通灯控制系统概述:介绍交通灯的基本构成、功能及其在交通管理中的作用,结合教材相关章节,理解交通灯控制系统的基本原理。
- 教材章节:第三章“交通控制系统”2. 数字信号处理(DSP)基础知识:回顾DSP的基本概念、算法和应用,为分析交通灯控制系统中的信号处理打下基础。
- 教材章节:第二章“数字信号处理基础”3. 交通灯控制系统的设计:- 信号处理算法:讲解交通灯控制系统中信号处理算法的选择和应用。
- 系统组件:分析交通灯控制系统中各组件的功能和相互关系。
- 教材章节:第四章“交通灯控制系统的设计与实现”4. 简易交通灯控制系统的设计与实现:- 设计思路:引导学生运用所学知识,设计交通灯控制系统的模型。
- 实践操作:组织学生分组进行实际操作,实现简易交通灯控制系统。
基于DSP实现道路交通灯控制系统设计道路交通灯控制系统是现代城市中的重要组成部分,它通过使用数字信号处理(Digital Signal Processing,DSP)技术,能够在不同的交通情况下实现自动化的交通信号控制。
本文将以DSP技术为基础,设计一种道路交通灯控制系统,并详细介绍其实现原理和设计步骤。
首先,我们需要明确系统的设计目标。
本文设计的道路交通灯控制系统旨在提高交通流畅性、减少交通拥堵、优化交通信号时长,并提高城市交通系统的效率和安全性。
设计步骤如下:(1)采集交通流量数据。
为了准确地控制交通信号灯的时长和变化,我们需要实时地获得各个道路的交通流量数据。
这可以通过在道路上安装传感器,如车辆、摄像头、雷达等,来检测交通流量和车辆速度信息。
然后,将这些数据传输给DSP系统进行处理和分析。
(2)信号处理和分析。
DSP系统将采集到的交通流量数据进行处理和分析,通过对交通数据的统计和分析,可以准确地估计出各个道路的交通状况,并预测未来一段时间内的交通流量。
这些分析结果将用作交通信号灯控制的依据。
(3)交通信号灯控制算法。
基于分析得到的交通数据,我们可以设计一种控制算法来自动化地控制交通信号灯的时长和变化。
这个算法可以根据交通流量来动态地调整不同方向的交通信号灯的时长。
例如,在交通繁忙时,可以适当延长绿灯亮起的时间,从而提高车辆通过的效率。
(4)控制信号输出。
根据控制算法的结果,DSP系统将输出控制信号,控制交通信号灯的时长和变化。
这个信号可以通过控制器直接控制交通信号灯的开关,使交通信号灯能够根据实际交通状况及时地调整和变化。
(5)实时监测和反馈。
为了保证交通信号灯控制系统的稳定性和可靠性,需要实时监测交通信号灯的状态和交通流量,在需要的时候进行调整和反馈。
这可以通过在交通信号灯上安装传感器,并将监测到的数据传输给DSP系统进行实时监测和分析。
通过以上设计步骤,基于DSP实现的道路交通灯控制系统能够自动化地根据实际交通状况来调整交通信号灯的时长和变化,提高交通系统的流畅性和效率,减少交通拥堵,提高交通安全性。
DSP实验设计报告交通灯设计目的本实验旨在根据交通灯控制的实际情况,通过DSP进行流程设计,实现交通灯的各种状态的控制,以此提高实验者的DSP编程能力,增加其对控制系统的理解。
设计原理本实验的主要控制器是TMS320C6748 DSP芯片,通过硬件与LED灯连接,实现交通灯的开关控制。
同时为了保证控制系统可靠稳定,使用了光电隔离模块,充分隔离DSP和LED灯的电路。
本设计的交通灯状态转换流程采用了状态机设计思想,为灯控中的状态设计了相应的状态表,每种灯的状态都在状态表里有清晰的描述。
设计方案交通灯设有3种状态:绿灯进车、黄灯过渡、红灯停车,每一种状态都有对应的时间段,为保证交通的顺畅性,在每一个灯的状态下,都会伴随一个闪烁的灯,以提醒司机进行注意。
以此设计的状态图如下图所示。
在进入程序正式实现之前,本设计还首先对TMS320C6748芯片进行了硬件初始化。
然后,通过while(1)循环语句,对交通灯的各个状态进行了详细的代码实现。
在绿灯进车状态下,程序会调用绿灯程序来实现灯的亮灭控制,同时启动两个计时器,一个是绿灯定时器,另一个是闪烁灯定时器,用于定时绿灯亮起的时间和检测闪烁灯是否需要亮起。
设计结果本设计成功实现了交通灯的几种不同状态的控制,在调试过程中,程序运行稳定,性能良好,每种状态的时间也能够精确控制。
同时闪烁灯的提醒功能也能够很好的保证交通的顺畅性。
当交通灯进入红灯时,即停车状态,道路上的车辆就需要停车等待,因此为了达到更好的交通效果,可将道路的长度设置得适当加长,同时还需要设置好交通灯的时间参数,适时地调节程序中各种灯亮起的时间,使得交通灯控制系统的效率和安全性能得到了很大地提升。
不过需要注意的是,在程序运行过程中,还需要注重一些细节问题的处理,如各种定时器的时间调整、闪烁灯的速度设置等。
只有这样才能够保证一套良好的交通灯控制系统的建立。
本科生毕业(学位)论文论文题目:基于DSP的交通灯控制与设计学生姓名:庞文轩学号: 1415系别:电气信息系专业:电气工程及其自动化年级: 11级电气工程指导教师:张恒时间:2015年5月摘要数字信号处理(Digital Signal Processing,简称DSP)就是用数值计算的方式对信号进行加工的理论和技术,是一门涉及而又广泛应用于许多领域的学科。
数字信号处理的目的是对真实世界的连续模拟信号进行测量或滤波,执行转换或提取信息,从而处理现实信号。
这项技术在二十世纪六十年代从校园中兴起,到七十年代才由计算机实现部分实时处理,而多用于八十年代前后的高尖端领域。
陆续有公司设计出适合于DSP处理技术的处理器。
在过去的二十年中,数字信号处理技术飞速发展,在许多领域得到广泛的应用。
本设计是基于DSP原理,使用ICETEK-VC5509-A实验箱设计交通灯控制系统软硬件系统,同时利用DSP实验箱显示控制模块发光二极管的亮灭模拟十字路口交通信号,同时考虑紧急情况处理,模仿紧急情况发生时交警手动控制,利用TMS320VC5509DSP片上定时器定时产生时钟计数,再利用计数对应具体时间,设计模拟实际生活中十字路口交通灯。
【关键词】:DSP;TMS320VC5509;交通灯控制;发光二极管AbstractDigital Signal Processing is the theory and technology of signal processing by numerical calculation. It is a discipline that involves and is widely used in many fields .The purpose of digital signal processing is to measure or filter the continuous analog signal of the real world. In addition it can perform conversion or extract information to process the real signal. The technology emerged from the campus in the sixty's in twentieth Century, by the seventy's by the computer to achieve real-time processing. DSP used for high - point areas in eighty’s. One after another, the company has been designed for DSP processing technology processor. Over the past twenty years, the Digital Signal Processing technology had a rapid development and had a widely used in many areas. This design is based on DSP, operate atICETEK-VC5509-A experiment box to achieve the aim of controlling the software and hardware system. At the same time, the traffic signal of the traffic signal is simulated by the light of the DSP experimental box. We also consider processing emergency and imitate manual control by policeman when emergency happens. It can produce clock count by timer on TMS320VC5509DSP.And we can correspond the actual time by using count to design simulation of real life crossroads traffic lights. [Key Words]: DSP, TMS320VC5509, Traffic Light Control, LED目录1.绪论 (6)2.课程设计的目标 (7)2.1研究背景 (7)2.2 设计目的 (7)2.3 交通灯控制要求 (8)3.课程设计总体方案 (10)3.1 设计流程图 (10)3.2 系统工作原理 (10)4.DSP芯片介绍 (11)4.1 DSP芯片的特点 (11)4.2 DSP芯片的分类 (12)4.3 DSP芯片的选择 (12)4.4 所用DSP芯片介绍 (14)5.系统硬件设计 (15)5.1硬件组成 (15)5.2硬件各模块设计 (15)5.2.1 通用定时器部分 (15)5.2.2 时钟部分 (16)5.2.3 计数器部分 (16)5.2.4 JTAG插头部分 (16)5.2.5 存储空间部分 (17)5.2.6 I/O寄存器部分 (17)6.系统调试 (17)6.1电源调试 (17)6.2 Emulator调试 (18)6.3 USB驱动程序 (19)6.4 软件设置 (20)6.5程序运行 (22)6.6 系统联调 (22)7.软件部分设计 (24)7.1 总体设计流程 (24)7.2 时钟发生器 (24)7.2.1 时钟工作模式 (24)7.2.2 时钟模式的初始化设定 (24)7.3 信号灯控制模块 (24)7.4 通用定时器 (30)8.致谢 (32)参考文献 (33)附录............................................................................. 错误!未定义书签。
D S P课程设计交通灯控制设计报告IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】《D S P器件及应用》课程设计报告题目:基于DSP的交通灯控制系统的设计专业:电子信息工程班级:大探131班2016年6月28日评分表小组成绩:基于DSP的交通灯控制系统的设计ThedesignoftrafficlightcontrolsystembasedonDSP摘要随着计算机技术、网络技术的、通讯技术的飞速发展,这个世界已经步入了信息时代。
作为世界上最大的发展中国家,中国人的生活方式发生了巨大的变化。
经济在高速发展,城市化进程在不断加快,车辆猛增,城市交通问题成为一个日益引起人们关注的问题。
人、车、路三者关系的协调,成为交通管理部门需要解决的当务之急。
城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。
如何采用合适的控制方法,最大限度利用好城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,成为交通运输管理和城市规划部门需要解决的问题之一。
数字信号处理器(DSP,即DigitalSignalProcessor)是进行数字信号处理的专用芯片,是伴随着微电子学、数字信号处理技术、计算机技术的发展而产生的新器件。
由于它特殊的结构设计,可以把数字信号处理中的一些理论和算法实时实现,因而在计算机应用领域中得到了广泛的使用。
本报告提出了基于DSP的交通灯控制系统的设计。
关键词:数字信号处理器(DSP),交通灯控制系统,三色灯目录1引言1.1课题背景1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
DSP原理及C程序开发交通灯综合控制实验及程序代码一、实验目的◇熟悉使用ICETECK-F2812-A评估板控制ICETECK-CTR上交通灯的方法◇掌握TMS320F2812DSP定时器的使用和编程◇掌握TMS320F2812DSP外中断的使用和编程二、实验要求1、交通灯控制要求◇交通灯分红黄绿三色,东、南、西、北各一组◇计时显示:8*8点阵显示两位计数◇正常交通控制信号顺序①南北绿灯:东西红灯(20s)②南北绿灯闪烁③南北黄灯④南北红灯,东西黄灯⑤东西绿灯(20s)⑥东西绿灯闪烁⑦东西黄灯⑧返回1循环控制◇紧急情况处理①当任意方向通行剩余时间多于10s,将时间给为10s②正常变换到四面红灯(20s)③直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)2、交通灯模拟利用ICETECK-CTR上的一组发光二极管(共12只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟;3、计时显示利用ICETEK-CTR上的发光二极管显示阵列模拟显示4、计时利用TMS320F2812DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间5、紧急情况利用ICETECK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况6、程序设计由于控制是由不同的各种状态按顺序发生的,可采用状态机控制方法来实现、◇首先列举所有可能发生的状态◇然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制◇对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成三、实验步骤1.实验准备(1)连接实验设备:(2)连接实验箱附带的键盘的PS2插头到ICETEK-CTR的“键盘接口”P8。
(3)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。
2.设置Code Composer Studio3.3在硬件仿真(Emulator)方式下运行。
3.启动Code Composer Studio 3.3,选择菜单Debug→Connect ; Debug→Reset CPU。
毕业设计(论文)基于DSP的交通灯控制系统设计与实现姓名系别、专业计算机科学系、通信工程导师姓名、职称完成时间目录摘要 (I)ABSTRACT ........................................................................................................ I I 1绪言 .. (1)2DSP与VISUAL C++技术简介 (1)2.1DSP概述 (1)2.2TMS320CF2812DSP结构以及组成 (3)2.3DSP的开发流程 (4)2.4C++语言 (6)3总体设计方案 (8)3.1系统功能描述 (9)3.2系统设计流程图 (10)3.3硬件设计 (11)3.4软件设计 (13)4系统测试 (20)4.1DSP系统测试环境 (20)4.2程序的调试 (23)4.3系统测试结果 (23)5总结 (26)参考文献 (27)致谢 .................................................................................. 错误!未定义书签。
摘要数字信号处理(Digital Signal Processing,DSP),是20世纪60年代前后发展并广泛应用于许多领域的学科。
20世纪70年代以来,随着大规模集成电路(LSI)和超大规模集成电路(VLSI)及微处理器技术的迅猛发展,数学信号处理的理论和技术得到长足发展,使其在数字通信、雷达、遥感、声纳、语音合成、图像处理、测量与控制、多媒体技术、生物医学工程及机器人等各个领域都得到广泛的应用。
交通拥堵在我国的大部分城市特别是大城市一直是一个难以解决的问题,也成为了困扰我国城市发展的一个大问题。
所以本设计是基于DSP原理设计的交通灯控制系统,采用的是软硬件结合的方法。
在硬件上利用TI公司德州仪器生产的用于工业自动控制TMSC320F2812系列的DSP芯片,四组发光二极管,在软件上使用CCS集成开发环境,在此环境中用C语言编写定时器程序来控制发光二极管的亮灭情况以达到模拟十字路口的交通灯,从而管理十字路口车辆的秩序,使交通畅通无阻。
基于DSP的交通灯综合控制系统的设计
徐向美;黄乡生
【期刊名称】《电子质量》
【年(卷),期】2008(000)008
【摘要】介绍了一种基于DSP芯片TMS320VC5509A的交通灯综合控制系统的设计,主要采用了DSP中的定时器进行定时设计模拟实际生活中交通灯的控制情况.【总页数】2页(P32-33)
【作者】徐向美;黄乡生
【作者单位】东华理工大学电子与机械工程学院,江西抚州,344000;东华理工大学电子与机械工程学院,江西抚州,344000
【正文语种】中文
【中图分类】TP273
【相关文献】
1.基于DSP的交通灯控制系统的硬件设计 [J], 周锦荣;冯翰辉;王辉;何安玲
2.基于图像处理和DSP的交通灯实时智能控制系统研究 [J], 张爱梅;孔文杰
3.基于dsPIC30F4011的氢燃料电池备用电源综合控制系统的设计 [J], 林健一;叶永武
4.基于DSP煤矿照明信号综合保护装置控制系统设计 [J], 王宇鹍; 倪瑞; 朱书明; 张红奎
5.基于DSP煤矿照明信号综合保护装置控制系统设计 [J], 王宇鹍;倪瑞;朱书明;张红奎
因版权原因,仅展示原文概要,查看原文内容请购买。
DSP原理及应用课程设计交通灯综合控制学院电气信息工程专业电子信息工程班级学号分组成员指导教师2013 年 6 月目录1引言 (1)2课程设计的目标 (2)2.1课程设计的背景 (2)2.2设计要求 (2)2.3设计思路简介 (2)2.4交通灯控制要求 (3)2.5交通灯模拟 (3)2.6计时 (4)2.7紧急情况 (4)2.8程序设计 (4)3DSP定时器的算法原理 (6)3.1CPU定时器的原理 (6)3.2CPU定时寄存器原理 (6)4系统程序设计 (7)4.1流程图 (7)4.2试验程序 (8)5心得体会 (19)1引言DSP (Digital Signal Processing)是一门涉及许多学科和领域的新兴学科。
数字信号的应用。
本次设计是基于DSPTMS320VC5416DSP片上定时器定时产生时钟计数来模拟实际生活中十字路口交通灯。
关键词:DSPTMS320VC5416;交通灯;2课程设计的目标2.1课程设计的背景DSP是一种将处理器的计算核心和一定的外部设备集成在一个单片芯片上DSP的性能。
数字信号处理已经在通信、信号处理等领域得到极为广泛的应用。
十字此次简单道路交通灯控制系统软硬件设计来进一步研究交通灯的内部结构。
最重要的是将学习到的DSP系统的组成与原理应用到交通灯的设计当中。
通过《DSP技术及应用》课程设计,是学生能够将学到的DSP系统的组成与原理用到具体的实际系统中,加深对DSP系统的理解,是将该门课程与实际问题相连接的关键步骤。
通过课程设计,能够提高学生分析问题,解决问题,从而运用所学知识解决实际问题的能力,并培养基本的、良好的软硬件射进能力。
2.2设计要求利用C语言在CCS环境中编写一个交通灯综合控制程序,并能通过硬件仿真对所编写的程序及其应用性、可行性进行验证。
2.3设计思路简介在TMS320C54x系统开发环境CCS(Code Composer Studio)下对交通灯综合控制的实现原理进行讨论。
通过实验仿真,可以在硬件实验箱上看到对交通灯的模拟控制。
交通等综合控制的控制原理2.4交通灯控制要求利用ICETEK-S60 实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制的程序。
要求如下:- 交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。
- 计时显示:液晶屏幕上8×8 点阵显示0-9 计数。
- 正常交通控制信号顺序:正常交通灯信号自动变换:⑴南北方向绿灯,东西红灯(20 秒)。
⑵南北方向绿灯闪烁。
⑶南北方向黄灯。
⑷南北方向红灯,东西方向黄灯。
⑸东西方向绿灯(20 秒)。
⑹东西方向绿灯闪烁。
⑺东西方向黄灯。
⑻返回⑴循环控制。
- 紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制⑴当任意方向通行剩余时间多于10 秒,将时间改成10 秒。
⑵正常变换到四面红灯(20 秒)。
⑶直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。
2.5交通灯模拟利用ICETEK-CTR 上的一组发光二极管(共12 只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟。
发光二极管的控制方法可参见第二部分、第二章、二、2。
2.6计时使用TMS320VC5416DSP 片上定时器,定时产生时钟计数,再利用此计数对应具体时间。
定时器控制及中断编程可参考实验3.3 程序。
2.7紧急情况利用ICETEK-CTR 上键盘产生外中断,中断正常信号顺序,模拟突发情况。
外中断编程控制可参考实验3.4 程序。
2.8程序设计根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。
这种方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制。
对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。
时钟计数:采用250ms 一次中断进行累加计数。
表格 1状态编号信号灯状态状态定义保持时间(计数值,起始时间,结束时间)计数显示1 南北绿灯,东西红灯statusNSGreenEWRed 20秒(160,0,159) 20-02 南北绿灯闪烁,东西红灯statusNSFlashEWRed 6秒(24,160,183) 03 南北黄灯,东西红灯statusNSYellowEWRed 4秒(16,184,199) 204 南北红灯,东西黄灯statusNSRedEWYellow 4秒(16,200,215) 205 南北红灯,东西绿灯statusNSRedEWGreen 20秒(160,216,375) 20-16 南北红灯,东西绿灯闪烁statusNSRedEWFlash 6秒(24,376,399) 07 南北红灯,东西黄灯statusNSRedEWYellow 4秒(16,400,415) 208 南北黄灯,东西红灯statusNSYellowEWRed 4秒(16,416,431) 20* 南北红灯,东西红灯StatusHold 20秒(160,0,159) 20-1 其中,正常顺序每112 秒(计数值448)为一个循环,状态“*”为非顺序状态。
这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。
对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状态中的计数值增量,根据增量判断是否更新计数显示。
3DSP定时器的算法原理3.1CPU定时器的原理本次设计主要用的是F2812器件上的3个32位CPU定时器(TIMER0/1/2)。
其中定时器1和定时器2预留给实时操作系统使用(如DSP-BIOS),只有定时器0用户可以在应用程序中使用。
定时器功能框图如下:3.2CPU定时寄存器原理定时器在工作过程中,首先把周期寄存器(PRDH:PRD)的值装入32位计数寄存器。
计数寄存器根据SYSCLKOUT时钟递减计数。
当计数寄存器等于0时,定时器中断输出产生一个中断脉冲。
(1)定时器计数寄存器(TIMERxTIM和TIMERxTIMH)(2)定时器控制寄存器(TIMERxTCR):使能中断,定时功能;(3)定时器周期寄存器(TIMERxPRD):符合条件则周期性重新装载并保存周期值(4)定时器预定标寄存器(TIMERxTPR和TIMERxTPRH):控制多久减1。
4系统程序设计4.1流程图图4-1实验程序流程图设计总流程图4.2试验程序#include "scancode.h"#define SPSA0 *(unsigned int *)0x38 #define SPSD0 *(unsigned int *)0x39#define REGISTERCLKMD (*(unsigned int *)0x58) #define TIM *(int *)0x24 #define PRD *(int *)0x25 #define TCR *(int *)0x26 #define IMR *(int *)0x0 //IM R 中断屏蔽寄存器开始 初始化DSP 全部红灯,延时1秒南北绿灯、东西红灯,延时20秒南北绿灯闪3次、东西红灯南北绿灯闪3次、东西红灯南北黄灯、东西红灯,延时3秒南北红灯、东西绿灯,延时20秒南北红灯、东西绿灯闪3次南北红灯、东西黄灯,延时3秒图 4-2设计总流程图#define IFR *(int *)0x1 //IFR中断标志寄存器#define PMST *(int *)0x1d //PMST处理器模式状态寄存器(地址1dh)#define nStatusNSGreenEWRed 160 //状态1计数结束时间#define nStatusNSFlashEWRed 184#define nStatusNSYellowEWRed 200#define nStatusNSRedEWYellow 216#define nStatusNSRedEWGreen 376#define nStatusNSRedEWFlash 400#define nStatusNSRedEWYellow1 416#define nStatusNSYellowEWRed1 432#define nTotalTime 448#define nStatusHold 160#define statusNSGreenEWRed 0#define statusNSFlashEWRed 1#define statusNSYellowEWRed 2#define statusNSRedEWYellow 3#define statusNSRedEWGreen 4#define statusNSRedEWFlash 5#define statusHold 6#define LCDDELAY 1#define LCDCMDTURNON 0x3f#define LCDCMDTURNOFF 0x3e#define LCDCMDSTARTLINE 0xc0#define LCDCMDPAGE 0xb8#define LCDCMDVERADDRESS 0x40ioport unsigned int port3004;// CTR扩展寄存器定义ioport unsigned int port8000;ioport unsigned int port8001; //8001:读键盘扫描值,写液晶控制寄存器地址ioport unsigned int port8002; //8002:液晶控制寄存器地址ioport unsigned int port8003; //8003,8004:液晶显示数据寄存器地址ioport unsigned int port8004; //ioport unsigned int port8005; //8005:发光二极管显示阵列控制寄存器地址ioport unsigned int port8007; //8007:发光二极管显示阵列控制寄存器地址#define CTRGR port8000#define CTRLCDCMDR port8001#define CTRKEY port8001#define CTRCLKEY port8002#define CTRLCDCR port8002#define CTRLCDLCR port8003#define CTRLCDRCR port8004#define CTRLA port8005#define CTRLR port8007void InitDSP(); //void表示此函数为空类型,执行此函数后不产生函数值void InitTimer();void InitICETEKCTR();void interrupt time(void);void interrupt xint2(void); // XINT2中断服务程序void SetLEDArray(int nNumber); // 修改显示内容void RefreshLEDArray(); // 刷新显示void EndICETEKCTR();void TurnOnLCD();void LCDCLS();void Delay(unsigned int nDelay);unsigned int uWork,nTimeCount;unsigned int uLightStatusEW,uLightStatusSN;unsigned int bHold;unsigned char ledbuf[8],ledx[8];unsigned char led[40]={0x7E,0x81,0x81,0x7E,0x00,0x02,0xFF,0x00,0xE2,0x91,0x91,0x8E,0x42,0x89,0x89,0x76,0x38,0x24,0x22,0xFF,0x4F,0x89,0x89,0x71,0x7E,0x89,0x89,0x72,0x01,0xF1,0x09,0x07,0x76,0x89,0x89,0x76,0x4E,0x91,0x91,0x7E};unsigned char ledkey[10][8]={{0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00}, //0{0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00}, //1{0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00}, //2{0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00},{0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00},{0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00},{0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00},{0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00},{0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00},{0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}};main(){int nWork1,nWork2,nWork3,nWork4,tKey;int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus; unsigned int nScanCode;nTimeCount=0; bHold=0;uLightStatusEW=uLightStatusSN=0;nNowStatus=0; nOldStatus=1; nOldTimeCount=0;InitDSP(); // 初始化DSP,设置运行速度InitICETEKCTR(); // 初始化显示/控制模块InitTimer(); // 设置定时器中断// 根据计时器计数切换状态// 根据状态设置计数和交通灯状态while ( 1 ){if ( bHold && nNowStatus==statusHold ){if ( nTimeCount>=nStatusHold ){nNowStatus=nSaveStatus;nTimeCount=nSaveTimeCount;bHold=0;}}else if ( nTimeCount<nStatusNSGreenEWRed ) nNowStatus=statusNSGreenEWRed;else if ( nTimeCount<nStatusNSFlashEWRed ) nNowStatus=statusNSFlashEWRed;else if ( nTimeCount<nStatusNSYellowEWRed ) nNowStatus=statusNSYellowEWRed;else if ( nTimeCount<nStatusNSRedEWYellow ) nNowStatus=statusNSRedEWYellow;else if ( nTimeCount<nStatusNSRedEWGreen ) nNowStatus=statusNSRedEWGreen;else if ( nTimeCount<nStatusNSRedEWFlash ) nNowStatus=statusNSRedEWFlash;else if ( nTimeCount<nStatusNSRedEWYellow1 ) nNowStatus=statusNSRedEWYellow;else if ( nTimeCount<nStatusNSYellowEWRed1 ) nNowStatus=statusNSYellowEWRed;if ( nNowStatus==nOldStatus ){switch ( nNowStatus ){case statusNSFlashEWRed:nWork1=nTimeCount-nStatusNSGreenEWRed;nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;nWork3=nWork2/3;nWork4=nWork3/2;if ( nWork1>=0 && nWork2>0 && nWork3>0 && nWork4>0 )uLightStatusSN=( (nWork1%nWork3)<=nWork4 )?(0x49):(0x40); //满足条件,取0x49地址的值,否则,取0x48的值break;case statusNSRedEWFlash:nWork1=nTimeCount-nStatusNSRedEWGreen;nWork2=nStatusNSRedEWYellow1-nStatusNSRedEWFlash;nWork3=nWork2/3;nWork4=nWork3/2;if ( nWork1>=0 && nWork2>0 && nWork3>0 && nWork4>0 )uLightStatusEW=( (nWork1%nWork3)<=nWork4 )?(0x09):(0x00);break;case statusNSGreenEWRed:nWork1=nStatusNSGreenEWRed/20;if ( nWork1>0 ){nWork2=20-nTimeCount/nWork1;if ( bHold ){if ( nWork2>10 ){nTimeCount=nWork1*10;nWork2=10;}}if ( nOldTimeCount!=nWork2 ){nOldTimeCount=nWork2;SetLEDArray(nWork2);}}break;case statusNSRedEWGreen:nWork1=(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20;if ( nWork1>0 ){nWork2=20-(nTimeCount-nStatusNSRedEWYellow)/nWork1;if ( bHold ){if ( nWork2>10 ){nTimeCount=nStatusNSRedEWYellow+nWork1*10;nWork2=10;}}if ( nOldTimeCount!=nWork2 ){nOldTimeCount=nWork2;SetLEDArray(nWork2);}}break;case statusHold:nWork1=nStatusHold/20;if ( nWork1>0 ){nWork2=20-nTimeCount/nWork1;if ( nOldTimeCount!=nWork2 ){nOldTimeCount=nWork2;SetLEDArray(nWork2);}}break;}}else{if ( bHold ){nSaveStatus=nNowStatus;nSaveTimeCount=nTimeCount;nNowStatus=statusHold;nTimeCount=0;if ( nSaveStatus==statusNSFlashEWRed || nSaveStatus==statusNSYellowEWRed ){nSaveStatus=statusNSRedEWGreen;nSaveTimeCount=nStatusNSRedEWYellow;}else if ( nSaveStatus==statusNSRedEWFlash || nSaveStatus==statusNSRedEWYellow ){nSaveStatus=statusNSGreenEWRed;nSaveTimeCount=0;}}nOldStatus=nNowStatus;switch ( nNowStatus ){case statusNSGreenEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49;SetLEDArray(20);break;case statusNSFlashEWRed:uLightStatusEW=0x24; uLightStatusSN=0x49;SetLEDArray(0);break;case statusNSYellowEWRed:uLightStatusEW=0x24; uLightStatusSN=0x52;SetLEDArray(20);break;case statusNSRedEWYellow:uLightStatusEW=0x12; uLightStatusSN=0x64;SetLEDArray(20);break;case statusNSRedEWGreen:uLightStatusEW=0x09; uLightStatusSN=0x64;SetLEDArray(20);break;case statusNSRedEWFlash:uLightStatusEW=0x09; uLightStatusSN=0x64;SetLEDArray(0);break;case statusHold:uLightStatusEW=0x24; uLightStatusSN=0x64;SetLEDArray(20);break;}}CTRLR=uLightStatusEW; CTRLR=uLightStatusSN; // 设置交通灯状态RefreshLEDArray(); // 刷新发光二极管显示nScanCode=port8001; // 读键盘扫描码nScanCode&=0x0ff;tKey=CTRCLKEY;if ( nScanCode==SCANCODE_9 ) break;}EndICETEKCTR();exit(0);}// 定时器中断服务程序,进行时钟计数void interrupt time(void){nTimeCount++;nTimeCount%=nTotalTime;}// 设置发光二极管显示内容void SetLEDArray(int nNumber){int i,ShowNumber;ShowNumber=nNumber/2;if(ShowNumber>9) ShowNumber=0;CTRLCDCMDR=LCDCMDPAGE; // 设置操作页=0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS; // 起始列=0Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=0;i<8;i++ ){CTRLCDLCR=ledkey[ShowNumber][i];Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}}// 将缓存中点阵送发光二极管显示void RefreshLEDArray(){int i;for ( i=0;i<8;i++ ){CTRGR=ledx[i];CTRLA=ledbuf[i];}}// 初始化DSP,设置运行速度=8MHzvoid InitDSP(){REGISTERCLKMD=0; // 复位PLLREGISTERCLKMD=0x1007; // 速度设置=16MHz}// 设置定时器参数、允许中断void InitTimer(){unsigned int k;asm(" ssbx INTM"); // 关中断,进行关键设置时不许打扰// 设置通用定时器k=PMST; // 设置PMST寄存器PMST =k&0xff; // 中断向量表起始地址=80HIMR = 0x0c; // 使能TINTTCR = 0x41f; // 预分频系数为16TIM = 0; // 时钟计数器清0PRD = 0x0f423; // 周期寄存器为0ffHTCR = 0x42f; // 复位、启动IFR = 0x0c; // 清中断标志位port3004=0; // 使能XINT2asm(" rsbx I NTM"); // 开中断}// 初始化ICETEK-CTR板上设备void InitICETEKCTR(){int k;CTRGR=0; // 初始化ICETEK-CTRCTRGR=0x80;CTRGR=0;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40; // 关闭南北方向的交通灯CTRLR=0x0c1; // 开启发光二极管显示阵列CTRLR=0xc8; //使能外部中断for ( k=0;k<8;k++ ){ledbuf[k]=0x0ff; // 显示为空白ledx[k]=(k<<4); // 生成显示列控制字}k=CTRCLKEY; // 清除键盘缓冲区TurnOnLCD(); // 打开显示LCDCLS(); // 清除显示内存CTRLCDCMDR=LCDCMDSTARTLINE; // 设置显示起始行CTRLCDCR=0;}void interrupt xint2(void) // XINT2中断服务程序{bHold=1;}void EndICETEKCTR(){int k;CTRLR=0; // 关闭东西方向的交通灯CTRLR=0x40; // 关闭南北方向的交通灯CTRLR=0x0c0; // 关闭发光二极管显示阵列k=CTRCLKEY; // 清除键盘缓冲区}void TurnOnLCD(){CTRLCDCMDR=LCDCMDTURNON;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDSTARTLINE;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}void LCDCLS(){int i,j;CTRLCDCMDR=LCDCMDSTARTLINE;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( i=0;i<8;i++ ){CTRLCDCMDR=LCDCMDPAGE+i;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( j=0;j<64;j++ ){CTRLCDLCR=0;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}CTRLCDCMDR=LCDCMDPAGE+i;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);CTRLCDCMDR=LCDCMDVERADDRESS;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);for ( j=0;j<64;j++ ){CTRLCDRCR=0;Delay(LCDDELAY);CTRLCDCR=0;Delay(LCDDELAY);}}}void Delay(unsigned int nDelay){int ii,jj,kk=0;for ( ii=0;ii<nDelay;ii++ ){for ( jj=0;jj<1024;jj++ ){kk++;}}}5心得体会这次DSP课程设计前前后后一共用了一周左右的时间,期间也遇到了很多的困难,主要是对DSP的中断不够熟悉,以及对课上老师讲过的知识点的掌握还不够深刻,所幸通过查阅大量的资料,以及同老师同学的讨论,最终问题得以顺利解决,收获颇丰,有一种柳暗花明的感觉。