DSP 课程设计 交通灯的控制与实现_dsp交通灯课程设计
DSP 课程设计 交通灯的控制与实现由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“dsp交通灯课程设计”。
DSP课程设计报告--DSP交通灯的控制与实现
学
院:物
信
学
院 课
程 :DSP 技术及应用
班
级 :321100 姓
名 :
张
三
学
号 : *** 指导教师 :
李
四
目
录
1.课程设计目的 2.课程设计正文
2.1 课程设计要求 2.2F2812原理图
2.3F2812系统环境结构实图 2.4设计原理 2.5设计结果 2.6心得体会
3.参考文献
4.此次课程设计的程序
1.课程设计目的这学期我们学习了《DSP》这一门课程,为了实现理论结合实践,锻炼我们的动手能力,我们针对这门课程进行的课程设计。通过这次的课程设计,更加深入的学习这门课程,掌握这门技术,加深对DSP控制器的原理的理解和掌握。利用DSP开发环境CCS C2000对源程序文件进行编译、链接、装载调试,以完成基本的DSP项目文件设计。
2.课程设计正文 2.1 课程设计要求
⑴ 设计一个十字路口交通灯(带一个倒计时数码管),每个方向有三色(红、黄、绿)。
⑵ 实现交通灯双向车道红绿灯切换功能、交通灯全亮功能、数码管全亮功能。⑶ 保证每次切换倒计时20秒,在此时熄灭绿灯。
2.2 F2812原理图
2.3 F2812系统调试环境结构实物
图2.3 F2812系统调试环境实物结构
2.4设计原理
1.交通灯控制要求
利用 ICETEK-EDU 实验箱提供的设备,设计模拟实际生活中十字路口交通灯控制的程序。
要求如下:
-交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号
表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。
-计时显示:8×8 点阵显示两位计数,为倒计时,每秒改变计数显示。
-正常交通控制信号顺序:正常交通灯信号自动变换
(1)南北方向绿灯,东西红灯(20 秒)。
(2)南北方向绿灯闪烁。
(3)南北方向黄灯。
(4)南北方向红灯,东西方向黄灯。
(5)东西方向绿灯(20 秒)。
(6)东西方向绿灯闪烁。
(7)东西方向黄灯。
(8)返回(1)循环控制。
-紧急情况处理:模仿紧急情况(重要车队通过、急救车通过等)发生时,交通警察手动控制
(1)当任意方向通行剩余时间多于 10 秒,将时间改成 10 秒。
(2)正常变换到四面红灯(20 秒)。
(3)直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。2.交通灯模拟
利用 ICETEK-CTR 上的一组发光二极管(共 12 只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟。3.计时显示
利用 ICETEK-CTR 上的发光二极管显示阵列模拟显示。4.计时
使用 TMS320F2812DSP 片上定时器,定时产生时钟计数,再利用此计数对应具体时间。5.紧急情况
利用 ICETEK-CTR 上键盘产生外中断,中断正常信号顺序,模拟突发情况。6.程序设计
根据设计要求,由于控制是由不同的各种状态按顺序发生的,我们可以采用状态机制控制方法来解决此问题。这种方法是:首先列举所有可能发生的状态;然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制。对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成。
2.5.设计结果
程序可以完成交通灯功能,顺序循环工作。在中断信号到来后,进入特殊过程:当前计时如果大于 10 改成 10,否则不变,等待状态切换;切换后进入四面禁行状态,计数 20 秒后返回断点后的通行(有两方向是绿灯)状态。设计结果部分截图
2.6心得体会
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,和同学们相互探讨,相互学习。在此次的课程设计中,主要资料的查阅和对电路图的总体设计,对电路的设计包括绘制电路原理图。由于平时在对本课程的学习中,没有注重系统的设计,故在设计电路原理图的过程中也遇到了各种各样的问题。但是,这些问题在跟同组的同学讨论和向老师请教后也得到了解决。由此可以得出,我对本门课程的掌握还是很不好,动手的能力还是很欠缺的。在今后的学习过程中不仅要注意对理念知识的掌握,而且还要培养自己的对手操作能力。最后在老师的辛勤的指导下,终于迎刃而解,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
3.参考文献
[1] 苏涛,蔺丽华,卢光跃.DSP实用技术.西安电子科技大学出版社.2002 [2] 赵红怡编.DSP技术与运用实例.2006.4.此次课程设计的程序
#include “DSP281x_Device.h”
// DSP281x Headerfile Include File #include “DSP281x_Examples.h”
// DSP281x Examples Include File
void Delay(unsigned int nTime);void SetLEDArray1(int nNumber);// 修改显示内容 void RefreshLEDArray1();
// 刷新显示 interrupt void cpu_timer0_isr(void);interrupt void XINT2_isr(void);void EndICETEKCTR();
#define XINT2CR(*((unsigned int *)0x7071))#define XNMICR(*((unsigned int *)0x7077))#define T46uS 0x0d40 #define SCANCODE_0 0x70 #define SCANCODE_1 0x69 #define SCANCODE_2 0x72 #define SCANCODE_3 0x7A #define SCANCODE_4 0x6B #define SCANCODE_5 0x73 #define SCANCODE_6 0x74 #define SCANCODE_7 0x6C #define SCANCODE_8 0x75 #define SCANCODE_9 0x7D #define SCANCODE_Del 0x49 #define SCANCODE_Enter 0x5A #define SCANCODE_Plus 0x79 #define SCANCODE_Minus 0x7B #define SCANCODE_Mult 0x7C #define SCANCODE_Divid 0x4A #define SCANCODE_Num 0x77 #define CTRGR *(int *)0x108000 #define CTRLCDCMDR *(int *)0x108001 #define CTRKEY *(int *)0x108001 #define CTRLCDCR *(int *)0x108002 #define CTRCLKEY *(int *)0x108002 #define CTRLCDLCR *(int *)0x108003 #define CTRLCDRCR *(int *)0x108004 #define CTRLA *(int *)0x108005 #define CTRLR *(int *)0x108007
Uint16 var1 = 0;Uint16 var2 = 0;Uint16 var3 = 0;Uint16 test_count = 0;Uint16 Test_flag = 0;Uint16 Test_var = 0;Uint16 Test_status[32];#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 int a=0;unsigned int uWork,nTimeCount,nTimeMS;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 };
void main(void){
int nWork1,nWork2,nWork3,nWork4,k;
int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus;
unsigned int nScanCode;
nTimeCount=0;bHold=0;
uLightStatusEW=uLightStatusSN=0;
nNowStatus=0;nOldStatus=1;nOldTimeCount=0;
//InitSysCtrl();//初始化cpu
InitPll(0x0);
DINT;//关中断
InitPieCtrl();//初始化pie寄存器
IER = 0x0000;//禁止所有的中断
IFR = 0x0000;
InitPieVectTable();//初始化pie中断向量表
EALLOW;// This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &cpu_timer0_isr;//指定中断服务子程序
PieVectTable.XINT2 = &XINT2_isr;
EDIS;
// This is needed to disable write to EALLOW protected registers
//EALLOW;// This is needed to write to EALLOW protected registers
//PieVectTable.XINT2 = &XINT2_isr;
//EDIS;
// This is needed to disable write to EALLOW protected registers
CpuTimer0.RegsAddr = &CpuTimer0Regs;// Initialize timer period to maximum:
CpuTimer0Regs.PRD.all = 0xffff;//CpuTimer0Regs.PRDH.all = 0xffff;// Initialize pre-scale counter to divide by 1(SYSCLKOUT):
CpuTimer0Regs.TPR.all = 0xff09;CpuTimer0Regs.TIM.all = 0xffff;//CpuTimer0Regs.TIMH.all = 0xffff;CpuTimer0Regs.TPRH.all = 0;// Make sure timer is stopped: CpuTimer0Regs.TCR.bit.TSS = 1;CpuTimer0Regs.TCR.bit.SOFT = 1;CpuTimer0Regs.TCR.bit.FREE = 1;// Reload all counter register with period value: CpuTimer0Regs.TCR.bit.TRB = 1;CpuTimer0Regs.TCR.bit.TIE = 1;// Reset interrupt counters: CpuTimer0.InterruptCount = 0;
// Enable TINT0 in the PIE: Group 1 interrupt 7
PieCtrlRegs.PIEIER1.bit.INTx5 = 1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
XINT2CR =0x1;/*打开管脚xint2外中断*/
//XNMICR=0x1;/*打开nmi中断*/ // Enable global Interrupts and higher priority real-time debug events:
EINT;
// Enable Global interrupt INTM
ERTM;
// Enable Global realtime interrupt DBGM
CTRGR=0;// 初始化ICETEK-CTR CTRGR=0x80;CTRGR=0;CTRLR=0;// 关闭东西方向的交通灯
CTRLR=0x40;// 关闭南北方向的交通灯
CTRLR=0x0c1;// 开启发光二极管显示阵列
for(k=0;k
ledbuf[k]=0x0ff;// 显示为空白
ledx[k]=(k
StartCpuTimer0();//启动定时器0
// 根据计时器计数切换状态
// 根据状态设置计数和交通灯状态 while(1)
{
if(bHold && nNowStatus==statusHold)
{
if(nTimeCount>=nStatusHold)
{
nNowStatus=nSaveStatus;
nTimeCount=nSaveTimeCount;
bHold=0;
}
}
else if(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)
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)0){
nWork2=20-nTimeCount/nWork1;
if(bHold)
{
if(nWork2>10)
{
nTimeCount=nWork1*10;
nWork2=10;
}
}
if(nOldTimeCount!=nWork2)
{
nOldTimeCount=nWork2;
SetLEDArray1(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;
SetLEDArray1(nWork2);
} } break;case statusHold:
nWork1=nStatusHold/20;
if(nWork1>0)
{
nWork2=20-nTimeCount/nWork1;
if(nOldTimeCount!=nWork2)
{
nOldTimeCount=nWork2;
SetLEDArray1(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;
SetLEDArray1(20);
break;
case statusNSFlashEWRed:
uLightStatusEW=0x24;uLightStatusSN=0x49;
SetLEDArray1(0);
||
||
break;
case statusNSYellowEWRed:
uLightStatusEW=0x24;uLightStatusSN=0x52;
SetLEDArray1(20);
break;
case statusNSRedEWYellow:
uLightStatusEW=0x12;uLightStatusSN=0x64;
SetLEDArray1(20);
break;
case statusNSRedEWGreen:
uLightStatusEW=0x09;uLightStatusSN=0x64;
SetLEDArray1(20);
break;
case statusNSRedEWFlash:
uLightStatusEW=0x09;uLightStatusSN=0x64;
SetLEDArray1(0);
break;
case statusHold:
uLightStatusEW=0x24;uLightStatusSN=0x64;
SetLEDArray1(20);
break;
}
}
CTRLR=uLightStatusEW;CTRLR=uLightStatusSN;// 设置交通灯状态
RefreshLEDArray1();// 刷新发光二极管显示
nScanCode=CTRKEY;// 读键盘扫描码
nScanCode&=0x0ff;
if(nScanCode==SCANCODE_Enter)break;
}
EndICETEKCTR();exit(0);}
interrupt void cpu_timer0_isr(void){
//CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
CpuTimer0Regs.TCR.bit.TIF = 1;
CpuTimer0Regs.TCR.bit.TRB = 1;
nTimeMS++;if(nTimeMS>=5){
nTimeMS=0;
nTimeCount++;
nTimeCount%=nTotalTime;} }
interrupt void XINT2_isr(void){
//StopCpuTimer0();
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
bHold=1;
//StartCpuTimer0();}
void Delay(unsigned int nDelay){ int ii,jj,kk=0;for(ii=0;ii
for(jj=0;jj
{
kk++;
} } } // 设置发光二极管显示内容 void SetLEDArray1(int nNumber){ int i,k,kk,kkk;
kkk=nNumber;
k=kkk/10*4;kk=kkk%10*4;for(i=0;i
ledbuf[7-i]=~led[k+i];
ledbuf[3-i]=~led[kk+i];} } void RefreshLEDArray1(){ int i;for(i=0;i
CTRGR=ledx[i];
CTRLA=ledbuf[i];} } void EndICETEKCTR(){ int k;CTRLR=0;
CTRLR=0x40;CTRLR=0x0c0;k=CTRLCDCR;} // 关闭东西方向的交通灯 // 关闭南北方向的交通灯 // 关闭发光二极管显示阵列// 清除键盘缓冲区
智能交通灯设计与实现基于单片机的智能交通灯控制系统的设计与实现,系统能够根据十字路口双车道车流量的情况控制交通讯号灯按特定的规律变化。首先对智能交通灯的研究意义和......
TMS320C54x与PC通信系统的设计(单号)一、设计目的本次课程设计的目的是为了进一步提高学生的自我开发能力,培养学生的查阅资料,独立分析问题、解决问题以及实际动手的能力。也是......
1 引言 ..........................................................................................................1 2项目设计实现功能 .................................
微机原理课程设计:8255模拟交通灯1、目的:学习8255使用方法,学习模拟交通灯控制的方法,学习双色灯的使用。2、要求:控制4个双色LED灯(可发红,绿,黄光),模拟十字路口交通灯管理。3......
课程设计任务书题目:交通灯控制电路设计时间: 年 月 日—— 年 月 日设计的说明:本设计需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红灯......
