数字电学的课程设计在灰烬中进阶!!!在线等待!!!
关键词:红绿灯控制,ICETEK-CTR LED,定时器,键盘。
目录:
1.系统设计要求
2.总体方案设计
3.编程;编排
4.实验步骤和调试
5.设计总结
(1)
系统设计要求
利用ICETEK-EDU实验箱提供的设备,对现实生活中十字路口的交通灯控制进行了设计和仿真。具体要求如下:
红绿灯分为黄、绿、东、南、西、北三种颜色。交通控制是通过灯光信号实现的:绿色信号表示交通,黄色信号表示警告,红色信号表示禁止交通,闪烁信号表示信号即将改变。
计时显示:8*8点阵显示两位数计数,为倒计时,每秒改变计数显示。
正常交通灯信号的自动转换;
(1)南北绿灯,东西红灯(
20秒)
(2)南北方向绿灯闪烁。
(3)南北方向的黄灯
(4)南北方向红灯,东西方向黄灯。
(5)东西向绿灯(
20秒)
(6)东西方向绿灯闪烁
(7)东西向黄灯
(8)退货(
1)循环控制
紧急情况;
使用ICETEK-CTR上的键盘产生外部中断,中断正常信号序列,模拟意外情况。
(2)
)总体方案设计
(1)红绿灯模拟:
交通信号的模拟是通过ICETEK-CTR上的一组发光二极管(***12,分为东、西、南、北、红、黄、绿四组)的开关来实现的。
(2)定时显示:
ICETEK-CTR上的LED显示阵列用于模拟显示。
欢迎访问我们的网站:www.eepw.com.cn
对于计数显示,需要在1,5和*的状态下进行递减计数,需要计算该状态下计数值的增量,根据增量判断是否更新计数显示。
(3)时机:
利用TMS320VC5509DSP片内定时器,定时产生时钟计数,然后用计数对应具体时间。
欢迎访问我们在:www.eepw.com.cn statusnsredewoll 4南北红灯,东西黄灯4秒(16,200,215) 20。
状态号信号灯状态状态定义保持时间(计数值、开始时间、结束时间)计数显示
1南北绿灯,东西红灯状态绿灯20秒(160,0,159) 20-0
2南北绿灯闪烁,东西红灯状态闪烁6秒(24,160,183) 0。
3南北黄灯、东西红灯状态持续4秒钟(16、184、199) 20
5南北红灯,东西绿灯状态statusNSRedEWGreen 20秒(160,216,375) 20-1。
6南北红灯、东西绿灯闪烁状态闪烁6秒(24,376,399) 0
7南北向红灯,东西向黄灯状态黄灯持续4秒(16,400,415) 20
8南北黄灯,东西红灯状态持续4秒(16,416,431) 20
*南北红灯,东西红灯状态保持20秒(160,0,159) 20-1。
其中,正常顺序为每112秒一个周期(计日448),状态“*”为非顺序状态。
这样,仅根据计数值就可以确定当前状态,并且可以根据状态来处理情况。
(4)紧急情况:
紧急处理;模拟紧急情况时(重要车队经过、救护车经过等。)发生,交警会手动控制。
1.
当任意方向的剩余时间超过秒时,将时间更改为10秒。
2.
正常情况下变四个红灯(20秒)
3.
直接按正常顺序回到下一个通过信号(跳过闪烁的绿灯和黄灯)。
(3)总体程序流程图
欢迎访问我们的网站:www.eepw.com.cn
定时器中断服务程序入口
将计数工作变量的原始值加上1。
退出定时器中断服务程序
开始
初始化:EMIF、CPU、频率、ICETEK-CTR、定时器、中断控制寄存器、工作变量。
根据定时器计数确定当前状态。
根据当前状态,设置指示灯状态。
根据当前状态设置LED显示阵列状态。
读取键盘输入
结束?
结束
欢迎访问我们的网站:www.eepw.com.cn
(4)
编程;编排
根据设计要求,由于控制是由不同的状态按顺序产生的,我们可以用状态机制控制的方法来解决这个问题。具体方法是:首先,列出所有可能的状态;然后这些状态依次编号生成;状态延续的持续时间由程序控制。对于紧急情况,特殊控制序列可以插入到正常序列控制中。
注:程序附在后面几页。
(五)实验步骤和调试
1.将连接到实验室箱的键盘的PS2插头连接到ICETEK-CTRR的键盘接口P8。
2.将ICETEK-CTR板的电源开关转到“开”的位置。
3.将Code Composer Studio2.21设置为在硬件仿真模式下运行。
4.开始代码作曲工作室2.21:
选择菜单调试-& gt;重置CPU .
5.编译并下载编译好的程序。
6.运行程序观察结果。
7.紧急控制。
按下ICETEK-CTR附带的键盘上除“Enter”键以外的键,观察信号是否符合要求。
8.结束程序并退出。
按下随ICETEK-CTR提供的键盘上的“Enter”键。
9.退出CCS
(6)设计总结
通过这次课程设计,我对红绿灯的控制有了进一步的了解;同时也掌握了TMS320VC5509DST定时器和外部中断的使用和编程。设计控制系统在把握整体设计理念的同时,要考虑到特殊情况的存在。这个控制方案的编制,考虑到交通突发事件是一个比较困难的方面,交通灯应该有多高。
(7)参考文献
胡肖刚吴玉春EMS320C55X DSP原理、应用与设计北京机械出版社,2005。
同一组:
(8)程序:
键盘中断服务程序入口
设置紧急标志
退出键盘中断服务程序。
欢迎访问我们的网站:www.eepw.com.cn
#包括“c5509.h”
#包括“ICETEK-VC5509-EDU.h”
#包含“scancode.h”
#定义nStatusNSGreenEWRed 160
# define nStatusNSFlashEWRed 184
#定义nStatusNSYellowEWRed 200
#定义nStatusNSRedEWYellow 216
#定义nStatusNSRedEWGreen 376
#定义nStatusNSRedEWFlash 400
# define nstatusnsredewyellow 1 416
# define nstatusnsyellowered 1 432
#定义nTotalTime 448
#定义nStatusHold 160
#定义statusNSGreenEWRed 0
#定义状态SFlashEWRed 1
#定义状态信息2
#定义状态黄色3
#定义状态4
#定义状态更新闪存5
#定义状态阈值6
void init DSP();
void init timer();
void initicetectr();
void INTR _初始化();
void中断时间(void);
void中断xint 2(void);// XINT2中断服务程序
void setledarray 1(int n number);//修改显示内容
void refreshledarray 1();//刷新显示
void endicetectr();
unsigned int uWork,nTimeCount,nTimeMS
无符号int uLightStatusEW,uLightStatusSN
无符号int bHold
无符号字符ledbuf[8],ledx[8];
无符号字符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,
欢迎访问我们的网站:www.eepw.com.cn
0x76,0x89,0x89,0x76,0x4E,0x91,0x91,0x7E
};
int www = 0;
主()
{
int nWork1,nWork2,nWork3,nWork4
int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus。
无符号int nScanCode
ntime count = nti MEMS = 0;bHold = 0;
ulightstatusw = uLightStatusSN = 0;
nNowStatus = 0;nold status = 1;nOldTimeCount = 0;
init DSP();//初始化DSP,设置运行速度。
initicetectr();//初始化显示/控制模块
init timer();//设置定时器中断
//根据计时器计数切换状态。
//根据状态设置计数和红绿灯状态。
while ( 1)
{
if(bHold & amp;& ampnNowStatus==statusHold)
{
if(ntime count & gt;=nStatusHold)
{
nNowStatus = nSaveStatus
nTimeCount = nSaveTimeCount
bHold = 0;
}
}
else if(ntime count & lt;nStatusNSGreenEWRed)nNowStatus = statusNSGreenEWRed;
else if(ntime count & lt;nStatusNSFlashEWRed)nNowStatus = statusNSFlashEWRed;
else if(ntime count & lt;nStatusNSYellowEWRed)nNowStatus = statusNSYellowEWRed;
else if(ntime count & lt;nStatusNSRedEWYellow)nNowStatus = statusNSRedEWYellow;
else if(ntime count & lt;nStatusNSRedEWGreen)nNowStatus = statusNSRedEWGreen;
else if(ntime count & lt;nStatusNSRedEWFlash)nNowStatus = statusNSRedEWFlash;
else if(ntime count & lt;nstatusnsredewyellow 1)nNowStatus = statusNSRedEWYellow;
欢迎访问我们的网站:www.eepw.com.cn
else if(ntime count & lt;nstatusnsyellowewred 1)nNowStatus = statusNSYellowEWRed;
if ( nNowStatus==nOldStatus)
{
开关(无状态)
{
案例状态SFlashEWRed:
nwork 1 = ntime count-nStatusNSGreenEWRed;//-160
nwork 2 = nstatusnsyellowered-nStatusNSFlashEWRed;//200-184=16
nwork 3 = nwork 2/3;
nwork 4 = nwork 3/2;
if(nwork 1 & gt;= 0 & amp& ampnWork2 & gt0 & amp& ampnWork3 & gt0 & amp& ampnWork4 & gt0 )
uLightStatusSN =((nwork 1% nwork 3)& lt;=nWork4)?(0x 49):(0x 40);
打破;
案例状态回顾闪存:
nwork 1 = ntime count-nStatusNSRedEWGreen;
nwork 2 = nstatusnsredewellow 1-nStatusNSRedEWFlash;
nwork 3 = nwork 2/3;
nwork 4 = nwork 3/2;
if(nwork 1 & gt;= 0 & amp& ampnWork2 & gt0 & amp& ampnWork3 & gt0 & amp& ampnWork4 & gt0 )
uLightStatusEW =((nwork 1% nwork 3)& lt;=nWork4)?(0x 09):(0x 00);
打破;
案例状态已审核:
nwork 1 = nStatusNSGreenEWRed/20;
if(nwork 1 & gt;0 )
{
nwork 2 = 20-ntime count/nwork 1;
if ( bHold)
{
if(nwork 2 & gt;10 )
{
ntime count = nwork 1 * 10;
nwork 2 = 10;
}
}
if ( nOldTimeCount!=nWork2)
{
nOldTimeCount = nWork2
setledarray 1(nwork 2);
}
欢迎访问我们的网站:www.eepw.com.cn
}
打破;
案例状态回复绿色:
nwork 1 =(nStatusNSRedEWGreen-nStatusNSRedEWYellow)/20;
if(nwork 1 & gt;0 )
{
nwork 2 = 20-(ntime count-nStatusNSRedEWYellow)/nwork 1;
if ( bHold)
{
if(nwork 2 & gt;10 )
{
ntime count = nStatusNSRedEWYellow+nwork 1 * 10;
nwork 2 = 10;
}
}
if ( nOldTimeCount!=nWork2)
{
nOldTimeCount = nWork2
setledarray 1(nwork 2);
}
}
打破;
案例状态阈值:
nwork 1 = nStatusHold/20;
if(nwork 1 & gt;0 )
{
nwork 2 = 20-ntime count/nwork 1;
if ( nOldTimeCount!=nWork2)
{
nOldTimeCount = nWork2
setledarray 1(nwork 2);
}
}
打破;
}
}
其他
{
if ( bHold)
{
欢迎访问我们的网站:www.eepw.com.cn
nSaveStatus = nNowStatus
nSaveTimeCount = nTimeCount
nNowStatus = statusHold
ntime count = 0;
if(nSaveStatus = = statusNSFlashEWRed | | nSaveStatus = = statusNSYellowEWRed)
{
nSaveStatus = statusNSRedEWGreen;
nSaveTimeCount = nStatusNSRedEWYellow;
}
else if(nSaveStatus = = statusNSRedEWFlash | | nSaveStatus = = statusNSRedEWYellow)
{
nSaveStatus = statusNSGreenEWRed;
nSaveTimeCount = 0;
}
}
nOldStatus = nNowStatus
开关(无状态)
{
案例状态已审核:
uLightStatusEW = 0x24uLightStatusSN = 0x49
setledarray 1(20);
打破;
案例状态SFlashEWRed:
uLightStatusEW = 0x24uLightStatusSN = 0x49
setledarray 1(0);
打破;
案例状态如下:
uLightStatusEW = 0x24uLightStatusSN = 0x52
setledarray 1(20);
打破;
案例状态黄色:
uLightStatusEW = 0x 12;uLightStatusSN = 0x64
setledarray 1(20);
打破;
案例状态回复绿色:
uLightStatusEW = 0x09uLightStatusSN = 0x64
setledarray 1(20);
打破;
案例状态回顾闪存:
uLightStatusEW = 0x09uLightStatusSN = 0x64
setledarray 1(0);
欢迎访问我们的网站:www.eepw.com.cn
打破;
案例状态阈值:
uLightStatusEW = 0x24uLightStatusSN = 0x64
setledarray 1(20);
打破;
}
}
CTRLR = uLightStatusEWCTRLR = uLightStatusSN//设置红绿灯状态
refreshledarray 1();//刷新LED显示
nScanCode = CTRKEY//读取键盘扫描码
nScanCode & amp= 0x0ff
if(nscan code = = scan code _ Enter)break;
}
endicetectr();
退出(0);
}
//定时器中断服务程序,计数时钟。
无效中断时间(无效)
{
nti mems++;
if(nTimeMS & gt;=5 )
{
nti MEMS = 0;
ntime count++;
nTimeCount % = nTotalTime
}