dsp课程设计书

2022-06-21

第一篇:dsp课程设计书

DSP课程设计心得 2

心得体会:

课程设计时间虽短,但是这次我也基本熟悉了一种新的集成开发环境CCS,学习新的知识的过程也是自己学习能力培养与提升的过程。

TDS510USB 仿真器驱动程序的安装以及相应的配置流程也有了一定的了解。仿真环境的配置,到工程的建立,文件的加载,到程序的仿真,与目标板的链接与调试,整个过程在摸索中逐渐熟悉。对已有程序进行修改,重复相应的过程也能实现预定的功能,在短短的时间里能掌握这些基本就差不多了,由于有的需要配置的文件的缺失,无法完成对相应工程的配置设置,所以采用的参考例程里的程序,完成整个过程,这也是一个学习的过程。做项目不是一个人的事,每个成员都应积极的参与,为整个项目的完成提供保障,团队的协作,尽可能的去发挥每个成员的专长,在整个项目的完成都能有所收获,这才应该是做项目的真正目的,加强同学之间的交流,用心付出,共同享受带给大家的成功的喜悦。相关课程的学习只是个基础,在此基础之上对相应的硬件与软件结合,切实去体验一个芯片所能实现的各种功能,去发现所学的知识会在哪些方面用到,是如何应用,有怎样可以改进的方法,更深层次去掌握跟其他相关课程的交叉点,提升学习能力,从近期来看,可以为我们将要开始的毕业设计做准备,当做是一次练手,争取出色完成毕业设计,为四年的大学交出一份完美的答卷。从长远看,为自己以后的工作也在一定程度的奠定基础,学习能力强了,自己就能比较快的接受新知识,更能适应社会对人的要求

相信团队的力量,同时也要提高个人解决问题的能力,让自己在团队中发挥的作用,将个人融入团队中,才能让自己有更大的收获。好好珍惜每次锻炼学习的机会,不断提升自己,不断超越自己,成就人生美好的梦想!

专业班级:微电子学

姓名

学号:

第二篇:DSP课程设计教学大纲

DSP课程设计教学大纲 课程名称:DSP课程设计 英文名称:Design of DSP course 学 时:2周 学 分:2 适用专业:电子信息工程、通信工程专业本科生

课程类别:必修 课程性质:集中实践环节 先修课程:数字信号处理、DSP原理与应用

教 材:《DSP系统设计与实现》,电子工业出版社,雷勇,2004年

一、课程性质与任务

DSP课程设计是数字信号处理和DSP原理与应用课程的后续实践环节。通过本课程设计,帮助学生进一步领会和深化课堂上学到的有关数字信号处理的基本概念、基本原理以及基本的数字信号处理操作,进一步理解DSP芯片的硬件实现机理及其内部结构特点,掌握DSP系统的开发流程和基本编程方法,实践工程的调试方法和仿真方法。通过DSP课程设计,加强学生的实际动手能力、分析问题与解决问题能力, 培养学生创新意识,为毕业后从事DSP系统设计方面的工作打下坚实的实践基础。

二、课程教学的基本要求:

作为电子信息工程、通信工程专业本科生的必修实践环节,DSP课程设计要求学生有较扎实的理论基础。进入课程设计前要认真复习数字信号处理和DSP原理与应用课程中的相关部分。课程设计采用课堂讲述、自学、分组实践相结合的方式,通过分析典型的例子,使学生熟悉并掌握DSP的开发流程和基本的编程方法。课程设计要求2—3人组成课设小组,在指定范围内选定题目,每组选一题,题目应侧重一个DSP芯片的具体应用方面。题目选定后,在教师的指导下,学生理解设计原理,分析重要电路单元,计算必要的参数并在此基础上编写程序,最后,在课程设计结束时独立写出理论分析完善、文理通顺、字迹工整的课程设计报告并上交软件程序。教师可根据作品的难易程度、参数指标、编程水平等进行评分。

三、课程内容及教学要求:

学生可从下列题目中任选一个作为DSP课程设计题目。

(一)C54x串口通信及A/D、D/A接口

教学要求:本题目要求学生了解AD50芯片的工作原理,理解C54x串口的工作过程,重点掌握多通道缓冲串口(McBSP)的使用,并在教师的指导下编写程序,实现C54x与AD50之间的数据传输。

重点:1. McBSP的初始化

2.C54x与AD50的硬件接口电路

3.通过McBSP实现DSP芯片与AD50之间的数据交换 难点:程序的编写与调试

(二)设计FIR数字滤波器

教学要求:复习FIR数字滤波器的设计方法,根据题目给出的技术指标,选择合适的窗函数及阶数,进一步得到系数表,实现满足一定技术指标的低通数字滤波器。

重点:1.FIR数字滤波器的设计原理 2.编程实现数字滤波器 难点:窗函数的选择与阶数的确定

(三)设计IIR数字滤波器

教学要求:复习IIR数字滤波器的设计原理,以巴特沃斯模拟滤波器为基础,通过双线性变换法设计IIR数字滤波器,课题要求学生根据给出的技术指标确定巴特沃斯滤波器阶数,求出3dB截止频率,进一步得到数字滤波器极点和零点,并在教师指导下编写程序,完成数字滤波功能。

重点:1. IIR滤波器的设计原理 2.计算滤波器相关参数 3.编程实现IIR滤波器

难点:对设计原理的理解,程序的设计与调试

(四)快速傅立叶变换的DSP实现

教学要求:复习FFT原理,深刻理解C54x辅助寄存器的使用及位倒序寻址等技巧,在教师指导下编程实现数字信号的快速傅立叶变换。

重点:1.快速傅立叶变换原理 2.C54x的位倒序寻址方式 难点:多级蝶形运算的实现

(五)正弦波信号发生器

教学要求:本题目要求学生复习正弦函数和余弦函数的泰勒级数展开式,掌握C54x系列DSP芯片的编程方法,在教师的指导下用C54x芯片产生频率、相位、幅值可变的正弦波。

重点:1. 产生正弦波的算法 2.汇编语言程序的具体实现 难点:正弦波的具体编程实现

四、考核方式

1. 课程设计报告占50% 2. 设计程序的实际工作情况、难易程度和技术指标等,占总成绩的50%

五、课程的主要参考书

1、《DSP原理及应用》,电子工业出版社,邹彦,第1版,2006;

2、《DSP集成开发与应用实例》,电子工业出版社,张雄伟,第1版,2002;

制定人: 何静

审定:

批准:

2006年12月

第三篇:DSP技术课程设计教学大纲

《DSP技术与应用》课程设计教学大纲

适用专业:电子信息工程/通信工程 学 时: 2 周

编写人:刘伟春 审定人:余建坤 何海浪

一、 本课程设计的性质、目的、任务

本课程设计是为电子信息工程专业高年级本科生开设的课程设计课,其目的为通过对课程设计任务的完成,使学生理解课程教学的理论内容,并且能够掌握和熟悉DSP的开发流程和基本的编程方法,开拓学生在现代控制技术上的视野,进一步提高学生硬件设计水平和工程实践能力,同时,由于设计中涉及到各种器件的使用,可以提高学生综合运用各种技术和知识的能力,为今后从事工程实践活动培养严谨的工作作风以及创新的思维和能力。

二、 本课程设计的基本理论(基础理论和基本方法)

本课程设计的基本理论包括三部分。一是数字信号处理的基本理论,包括信号处理系统的概念、离散时间信号处理系统的基本分析方法、连续时间系统的离散化处理等等;二是DSP器件的基本理论,包括器件的结构(总线、CPU、寄存器、存储器等)和工作原理,器件中片内外部设备(定时器、计数器、串行I/O接口、直接内存存取DMA等)的工作原理;三是DSP仿真开发技术基本理论,包括DSP系统设计方法,系统指标分配,器件选择的原则以及DSP系统的抗干扰设计。

三、 程序与要求

课题由指导教师给定,也可由学生根据自己感兴趣的方向选择适合自己的课题,然后在教师的指导下完成设计,题目较大时,可以以组为单位实施。教师在课内外给予及时指导和答疑。基本要求:

1.掌握以实现系统要求为目标的自上而下的DSP系统设计方法,并掌握系统指标分配,器件选择的原则以及DSP系统的抗干扰设计。

2.掌握DSP仿真开发系统的结构。掌握仿真器的连接和安装,熟悉开发软件Code Composer Studio的界面和基本操作。

3.掌握TMS320C54x芯片的硬件结构,了解CPU、寄存器和存储器中各数据的含义。了解TMS320C54x芯片外部设备的工作原理,熟悉数据的处理过程和中断。了解TMS320C54x芯片的指令系统,熟悉各种指令和基本算法。

4.独立完成DSP系统的软硬件设计,程序的编写和调试。课程设计报告应包括方案选择分析、重要单元电路分析、重要参数计算、基本测试数据等。

四、 主要内容提要

1.方案论证(方案比较)与总体设计; 2.单元电路的设计; 3.电子元器件的选择;

4.根据性价比和预设指标,合理选择参数进行计算; 5.程序设计,包括程序流程图与源代码的实现 6.仿真与结果分析。

五、考核方式与评分标准

1.平时表现,占10%;

2.论文排版规范,有摘要、关键词、参考文献,占20%; 3.设计报告方案合理,系统软硬件设计正确,占70%。

六、配套指导教材

[1]戴明桢等编著.TMS320C54X DSP 结构原理及应用. 北京:航空航天大学出版社,第2版,2007;

[2]彭启琮编著.DSP技术的发展与应用.北京:高等教育出版社,2002;

[3]胡广书编著.数字信号处理理论、算法与实现.北京:清华大学出版社,2005; [4]北京合众达电子技术有限公司编著.SEED-DTK系列实验手册.北京合众达电子技术有限公司出版,2007。

第四篇:《DSP原理及应用》课程设计教学大纲范文

课程设计中文名称:DSP原理及应用课程设计

课程编码: 设计周数:2周 学 分:2学分

开课学期:第6学期 开课单位:通信工程学院

一、课程设计的教学目的和任务

通过本课程设计教学所要达到的目的是:通过对课程设计任务的完成,使学生理课题教学的理论

内容,并且能够掌握和熟悉DSP的开发流程和基本的编程方法。同时,由于设计中涉及到各种器件的 使用,可以起到综合运用各种技术和知识的作用。本课程设计的任务是:任务分为基本要求和提高要 求。在基本要求中,学生要通过串口对指示灯进行控制,同时完成对串口数据的采集和发送。提高要 求是通过程序编写,完成对EVM板上的FLASH 进行烧写处理,从而使基本要求的程序可以脱机运行。

二、课程设计的主要内容

在TMS320VC5410EVM板上实现对信号的采集和发送。信号通过信号源提供给串行ADC,而

DSP从串口把ADC转换后的数据读入到DSP中。最后,从同一个串口,DSP把数据发送出去,通过 DAC编程模拟信号。在示波器上可以进行观察,输入同输出的信号是相同的,仅仅具有一定的相。

在程序运行过程当中,需要对一些指示灯进行控制。

三、课程设计的基本教学条件

实验室需要每组一台电脑,一个54XEVM板,仿真器,1M信号源,20M示波器,万用表。

四、参考资料

《TMS320VC54XDSP课程实践指导书》曾浩,重大教材科《DSP技术的发展与应用》 彭启琮,高 教出版社

五、成绩评定标准

实现全部基本要求为中或者良,实现提高要求为优,实现部分基本要求为及格,其他为不及格

第五篇:基于DSP实现道路交通灯控制系统设计

1 引言 .......................................................................................................... 1 2项目设计实现功能 ................................................................................... 2 2.1交通灯控制要求............................................................................... 2 2.2 液晶显示器控制.....................................

DSP原理及应用

基于DSP实现道路交通灯控制系统设计

摘要:DSP数字信号处理,是一门涉及多学科而又广泛应用于许多领域的新兴学科。随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法。本次设计是基于dsp原理设计交通灯控制系统软硬件系统,利用发光二极管亮灭模拟交通信号,数码管倒计时时间,利用TMS320F2812 DSP片上定时器产生时钟计数,设计模拟实际生活中的十字路口交通灯。

关键字:DSP;TMS320F2812;发光二极管;交通灯;

Abstract: DSP digital signal processing, is a multidisciplinary and widely applied in many fields of the emerging discipline. Along with the computer and the rapid development of information technology, digital signal processing technology to emerge as the times require and develop rapidly. Digital signal processing is through the use of a mathematical skills to perform the conversion or extraction of information, to deal with real signal method. The design is based on the principle of DSP design of traffic light control system software and hardware system, using light-emitting diodes to eliminate simulated traffic signal countdown time, digital tube, the use of TMS320F2812 DSP on-chip timer generates a clock counting, designed to simulate the actual life of the crossroads traffic lights. Keyword: DSP; TMS320F2812; light emitting diode; traffic lights; 1 引言

交通是经济、社会发展的基础性产业,是社会、经济活动中人流、物流、资金流和信息 流的主要流动方式。现代社会中,如果没有高效运转的交通运输体系,就不可能有经济的持续发展。然而,随着社会经济的发展,机动车辆迅速增加,人们在赚取由机动车辆所带来的巨额利润以及充分享受汽车带来的巨大便利的同时,越来越被交通拥堵、交通事故频发、环境污染加剧和燃油损耗上升等诸多问题所困扰。

随着交通的不断发展和汽车化进程的加快,交通拥挤加剧,交通事故频发,交通环境恶化,已经成为引人注目的城市问题之一。交通问题不仅在发展中国家,就在发达国家也是一个令人困扰的严重问题。众所周知,缓解交通拥挤的最直接和最有效办法是提高路网的通信能力。但无论哪个国家的大城市,不可能无限制地修建道路,不论是资金

DSP原理及应用

因素还是土地因素,都限制了道路的无节制增长。因此,无限制地修建道路难满足日益增长的交通需求。与此同时,通过限制车辆增加削减交通需求也受到客观因素的制约而无法取得满意的结果。事实上,由于交通系统是一个相当复杂的大系统,无论单独从车辆方面考虑还是从道路方面考虑,都很难从根本上解决问题。

道路交通系统是一个地区、一个城市的主要组成部份,这个系统的运行状况如何,直接反映了一个地区、一个城市的现代化管理水平。在这一系统中,道路不仅仅是易变化的部分,而其它组成部分则存在着较大的可变性和随机性。只有对这一系统的组成及其运行机理进行科学客观的分析研究,对能制定出科学有效的管理和控制对策,从而保障系统的有效运行。

2项目设计实现功能

2.1交通灯控制要求

交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。 计时显示:液晶屏幕上8×8 点阵显示0-9 计数。

正常交通控制信号顺序:正常交通灯信号自动变换: ⑴ 南北方向绿灯,东西红灯(20 秒)。 ⑵ 南北方向绿灯闪烁。 ⑶ 南北方向黄灯。

⑷ 南北方向红灯,东西方向黄灯。 ⑸ 东西方向绿灯(20 秒)。 ⑹ 东西方向绿灯闪烁。 ⑺ 东西方向黄灯。 ⑻ 返回⑴循环控制。

紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制

⑴ 当任意方向通行剩余时间多于10 秒,将时间改成10 秒。

DSP原理及应用

⑵ 正常变换到四面红灯(20 秒)。

⑶ 直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。

2.2 液晶显示器控制

本次设计使用ICETEK-F2812-A板,ICETEK-F2812-A是一块以TMS320F2812DSP 为核心的DSP 扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。液晶显示模块的访问、控制是由2812DSP对扩展扩展接口的操作完成。

控制扩展口的寻址:命令控制扩展接口的地址为0x108001,数据控制扩展接口的地址为0x108003 和0x108004,辅助控制扩展接口的地址为0x108002。

可以观察到液晶显示从0到9的计数。灵活使用控制字,可以实现复杂多变的显示。当使用点阵图形显示时需要在 DSP 内存中建立图形存储缓冲;适当更新显示可取得动画效果。在实际生活中观察点阵显示的霓虹灯广告、交通指示牌、报站牌等领会这种控制的具体应用。

3 项目实现方案

3.1项目设计整体思路

根据DSP的硬件中断、定时器、I/O访问原理。用定时器定时。用I/O口控制红绿黄灯的开关,用硬件中断模拟紧急情况发生(如:急救车,消防车)。有紧急情况发生,两向全红,以便让紧急车通过。紧急车通过后,交通的恢复中断前的状态。

DSP原理及应用

设计总流程图

4 中断服务流程

DSP原理及应用

3.2设计原理 3.2.1 CPU定时器原理

F2810/F2812芯片内部有3个32位CPU定时器(TIMER0/1/2),其中定时器1和定时器2预留给实时操作系统使用(如 DSPBIOS),只有CPU定时器0用户可以在应用程序中使用。定时器功能框图如下:

在F281x芯片中,向CPU申请中断的定时器中断信号(TINT0、TINT1及TINT2)连接方式如下图:

为保证定时器正常,需要进行一下操作:首先将计数值写入32位计数寄存器(TIMH:TIM)内,该计数值放在周期寄存器(PRDH:PRD)中;然后按SYSCLOCKOUT的频率对计数值进行减计数。当计数器的值计到0时,定时器会产生一个中断脉冲输出。

DSP原理及应用

3.2.2 DSP外设中断扩展模块

2812的CPU为了能够及时有效的处理好各个外设的中断请求,设计了一个专门处理外设中断的扩展模块(the Peripheral Interrupt Expansion block),叫做外设中断控制器PIE,它能够对各种中断请求源(例如来自于外设或者其他外部引脚的请求)做出判断以及相应的决策。PIE 可以支持96个不同的中断,这些中断分成了12个组,每个组有8个中断,而且每个组都被反馈到CPU内核的12 条中断线中的某一条上(INT1-INT12)。PIE 目前只使用了96 个终端中的45 个,其他的等待将来的功能扩展。

2812的中断是3级中断机制,分别是外设级,PIE级以及CPU级,对于某一个具体的外设中断请求,任意一级的不许可,CPU最终都不会执行该外设中断。

3.2.3 发光二极原理

显示/控制模块上的发光二极管是由连接在F2812DSP 扩展扩展接口上的寄存器EWR和SNR控制的。这两个寄存器均为6 位寄存器,其位定义见下表:

DSP原理及应用

两个寄存器的地址均映射到 F2812DSP 的扩展空间,地址为108007H,DSP 通过对扩展区域该地址的写操作来修改两个寄存器上各位的状态,当寄存器某位取‘1’值时,相应指示灯被点亮,取‘0’值则熄灭。当写入108007H 的数据(8 位有效值)的高两位为‘00’时,数据的低6 位将写入EWR 寄存器;当高两位的值为‘01’时,写入SNR 寄存器。

3.2.4 TMS320F28x DSP 的I/O TMS320F28x DSP 的I/O 空间大部分被保留用于外部扩展。在扩展时一般将带有控制能的寄存器或分离地址访问的存储单元的地址映射到I/O 空间,访问这部分的单元又称I/O 端口访问。例如:可将控制指示灯组的寄存器或锁存器映射到一个I/O 端口地址上;A/D、D/A 等专用芯片控制端和状态寄存器也常映射到I/O 端口上。总之,在I/O 空间中扩展的设备一般重点用于控制,而使用大片连续存储空间的存储器单元一般映射到数据空间。ICETEK-F2812-A 板将指示灯、DIP 开关、A/D 和D/A 的控制端等映射在I/O 空间。在程序中,访问I/O 端口的语句较为简单。

DSP原理及应用

3.2.5 液晶显示器控制原理

显示开关:0x3f 打开显示;0x3e 关闭显示;

设置显示起始行:0x0c0+起始行取值,其中起始行取值为0 至63; 设置操作页:0x0b8+页号,其中页号取值为0-7; 设置操作列:0x40+列号,其中列号为取值为0-63;

写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制扩展接口即可。 液晶显示器与DSP 的连接:

数据信号的传送:由于液晶显示模块相对运行在8MHz 主频下的DSP 属于较为慢速设备,连接时需要考虑数据线上信号的等待问题;

电平转换:由于DSP 为3.3V 设备,而液晶显示模块属于5V 设备,所以在连接控制线、数据线时需要加电平隔离和转换设备。

4 程序设计

4.1 程序总体设计① 根据设计要求,由于控制是由不同的各种状态按顺序发生的, 我们可以采用状态机制控制方法来解决此问题。这种方法是: 首先列举所有可能发生的状态; 然后将这些状态编号, 按顺序产生这些状态; 状态延续的时间用程序控制,对于突发情况, 可采用在正常顺序的控制中插入特殊控制序列的方式完成。

② 定时器的设定, VC5509A 定时器是由一个4 位的预定标值PSC 和一个16 位的减法计数的计数器TIM 组成。在实际工作中首先是每经过一个周期PSC 值减1, 一直减到0

DSP原理及应用

后TIM 开始减1, 直到减到0 后的第一个周期, 计数器会向CPU 发出中断请求。 ③ 突发事件设置, 在实际交通过程中会出现突发状况, 比如说有救护车或者110 紧急车要通过, 此时就可以通过小键盘进行突发状况模拟。通过按键进入到中断服务子程序, 相当于原来先要通过的车辆在突发状况来了以后就要先让紧急车辆通过。

4.2 程序编写(见附页)

5 心得体会

随着信息技术的飞速发展,数字信号处理技术已逐渐发展成为一门主流技术,它在电子信息,通信,软件无线电,制动控制,仪表仪器,信息家电等高科技领域得到了越来越广泛的应用。数字信号处理器由于运算速度快,具有可编程特性和接口灵活的特点,使的它在许多电子产品的研制,开发与应用中,发挥着越来越重要的作用。采用DSP 芯片来实现数字信号处理系统更是当前的发展趋势。

通过做基于DSP 的交通灯的设计,进一步熟悉DSP 芯片及其开发环境CCS的功能。同时对当前交通控制的现状有了进一部的了解。为以后的学习打下了坚实的基础。随着科学技术的发展及各门学科的相互融合,DSP 将有更为广阔的应用前景。交通控制也会更智能,为人们的出行提供更多的便利。

DSP原理及应用

附页#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 #define IFR *(int *)0x

1#define PMST *(int *)0x1d

#define nStatusNSGreenEWRed 160 #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 0x40

ioport unsigned int port3004; // CTR扩展寄存器定义

ioport unsigned int port8000; ioport unsigned int port8001; ioport unsigned int port8002; ioport unsigned int port8003; ioport unsigned int port8004; ioport unsigned int port8005; ioport unsigned int port8007;

#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 port8007

void InitDSP(); 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,0x9

2,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

DSP原理及应用

( nTimeCount

else if ( nTimeCount

else if ( nTimeCount

else if ( nTimeCount

else if ( nTimeCount

else if ( nTimeCount

else if ( nTimeCount

else if ( nTimeCount

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);

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);

}

}

DSP原理及应用

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; // 设置操作页=0 Delay(LCDDELAY); CTRLCDCR=0; Delay(LCDDELAY); CTRLCDCMDR=LCDCMDVERADDRESS; // 起始列=0 Delay(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,设置运行速度=8MHz void InitDSP() { REGISTERCLKMD=0; // 复位PLL REGISTERCLKMD=0x1007; //

DSP原理及应用

速度设置=16MHz }

// 设置定时器参数、允许中断 void InitTimer() { unsigned int k;

asm(" ssbx INTM"); // 关中断,进行关键设置时不许打扰

// 设置通用定时器

k=PMST;

// 设置PMST寄存器

PMST =k&0xff; // 中断向量表起始地址=80H IMR = 0x0c; // 使能TINT TCR = 0x41f; // 预分频系数为16 TIM = 0; // 时钟计数器清0 PRD = 0x0f423; // 周期寄存器为0ffH TCR = 0x42f; // 复位、启动

IFR = 0x0c; // 清中断标志位

port3004=0;

// 使能XINT2 asm(" rsbx INTM"); // 开中断 }

// 初始化ICETEK-CTR板上设备 void InitICETEKCTR() { int k;

CTRGR=0; // 初始化ICETEK-CTR CTRGR=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=LCDCMDVERADDRE

SS;

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

for

( jj=0;jj<1024;jj++ )

{

kk++;

} } }

上一篇:4月教学工作总结下一篇:365个成语故事