问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

数电课程设计 骨灰级进!!!在线等!!!

提问网友 发布时间:2022-04-21 08:52
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
3个回答
热心网友 回答时间:2023-10-17 16:25
摘要:设计交通灯控制程序、用ICETEK-CTR上的发光二极管的亮灭模拟交通信号,并用其显示阵列模拟显示;使用TMS320VC5509DSP片上定时器定时产生时钟计数;利用ICETEK-CTR上键盘产生外中断,从而模拟实际生活中十字路*通灯控制。
关键词:交通灯控制、ICETEK-CTR发光二极管、定时器、键盘
目录:
1.系统设计要求
2.总体方案设计
3.程序编写
4.实验步骤及调试
5.设计总结

(一)
系统设计要求
利用ICETEK-EDU实验箱提供的设备,设计模拟实际生活中十字路*通灯控制,具体要求如下:
交通灯分红黄绿三色,东、南、西、北各一组,用灯光信号实现对交通的控制:绿灯信号表示通行,黄灯表示警告,红灯禁止通行,灯光闪烁表示信号即将改变。
计时显示:8*8点阵显示两位计数,为倒计时,每秒改变计数显示。

正常交通灯信号自动变换:
(1) 南北方向绿灯,东西红灯(
20秒)
(2) 南北方向绿灯闪烁
(3) 南北方向黄灯
(4) 南北方向红灯,东西方向黄灯
(5) 东西方向绿灯(
20秒)
(6) 东西方向绿灯闪烁
(7) 东西方向黄灯
(8) 返回(
1)循环控制

紧急情况;
利用ICETEK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况。
(二
) 总体方案设计
(1) 交通灯模拟:
利用ICETEK-CTR上的一组发光二极管(共12只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟。
(2) 计时显示:
利用ICETEK-CTR上的发光二极管显示阵列模拟显示。

Welcome visit us at: www.eepw.com.cn

对于计数显示,当处于状态1、5、*中时需要进行倒计时,需要计算在此状态中的计数值增量,根据增量判断是否更新计数显示。
(3) 计时:
使用TMS320VC5509DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间。

Welcome visit us at: www.eepw.com.cn statusNSRedEWYellow 4 南北红灯,东西黄灯 4秒(16,200,215) 20
状态编号 信号灯状态 状态定义 保持时间(计数值,起始时间,结束时间) 计数显示
1 南北绿灯,东西红灯 statusNSGreenEWRed 20秒(160,0,159) 20-0
2 南北绿灯闪烁,东西红灯 statusNSFlashEWRed 6秒(24,160,183) 0
3 南北黄灯,东西红灯 statusNSYellowEWRed 4秒(16,184,199) 20
5 南北红灯,东西绿灯 statusNSRedEWGreen 20秒(160,216,375) 20-1
6 南北红灯,东西绿灯闪烁 statusNSRedEWFlash 6秒(24,376,399) 0
7 南北红灯,东西黄灯 statusNSRedEWYellow 4秒(16,400,415) 20
8 南北黄灯,东西红灯 statusNSYellowEWRed 4秒(16,416,431) 20
* 南北红灯,东西红灯 StatusHold 20秒(160,0,159) 20-1

其中,正常顺序每112秒(计数值日448)为一个循环,状态“*”为非顺序状态。
这样,只要根据计数值就可确定当前状态,根据状态再分情况处理。
(4) 紧急情况:
紧急情况处理;模拟紧急情况(重要车队通过、急救车通过等)发生时,交通*手动控制
1.
当任意方向通行剩余时间多于是秒,将时间改成10秒。
2.
正常变换到四面红灯(20秒)
3.
直接返回正常顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)。

(三)总程序流程图

Welcome visit us at: www.eepw.com.cn

定时器中断服务程序入口

计数工作变量值在原基础上加1

退出定时器中断服务程序

开始

初始化:EMIF、CPU、频率、ICETEK-CTR、定时器、中断控制寄存器、工作变量

根据定时器计数确定当前状态

根据当前状态设置批示灯状态

根据当前状态设置发光二极管显示阵列状态

读取键盘输入

结束?

结束

Welcome visit us at: www.eepw.com.cn

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

注:程序附在后面几页里
(五)实验步骤及调试
1.连接实验箱附带的键盘的PS2插头到ICETEK-CTRR的键盘接口P8
2.将ICETEK-CTR板的供电电源开关拨动到“开”的位置。
3.设置Code Composer Studio2.21在硬件仿真方式下运行。
4.启动Code Composer Studio2.21:
选择菜单Debug->Reset CPU。
5.编译并下载已编好的程序。
6.运行程序观察结果。
7.突发事件控制。
在ICETEK-CTR附带的小键盘上按下除“Enter“键外的按键,观察信号是否满足要求。
8.结束程序运行退出。
在ICETEK-CTR附带的小键盘上按下“Enter“键。
9.退出CCS
(六)设计总结
通过此次课程设计,对交通灯的控制有了进一步的认识;同时 也掌握了TMS320VC5509DST定时器、外中断的使用和编程。设计控制系统在把握好整体设计理念的同时,要考虑到特殊情况的存在。本次控制程序的编写,考虑交通出现紧急情况是比较困难的一个方面,交通灯要如何高速。
(七)参考文献
胡庆名 李小刚 吴钰淳 EMS320C55X DSP原理、应用和设计 北京机械出版社,2005
同组者:
(八)程序:

键盘中断服务程序入口

设置突发事件标志

退出键盘中断服务程序

Welcome visit us at: www.eepw.com.cn

#include "c5509.h"
#include "ICETEK-VC5509-EDU.h"
#include "scancode.h"
#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
void InitDSP();
void InitTimer();
void InitICETEKCTR();
void INTR_init();
void interrupt time(void);
void interrupt xint2(void);// XINT2中断服务程序
void SetLEDArray1(int nNumber); // 修改显示内容
void RefreshLEDArray1(); // 刷新显示
void EndICETEKCTR();
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,

Welcome visit us at: www.eepw.com.cn

0x76,0x89,0x89,0x76,0x4E,0x91,0x91,0x7E
};
int www=0;
main()
{
int nWork1,nWork2,nWork3,nWork4;
int nNowStatus,nOldStatus,nOldTimeCount,nSaveTimeCount,nSaveStatus;
unsigned int nScanCode;
nTimeCount=nTimeMS=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;

Welcome visit us at: www.eepw.com.cn

else if ( nTimeCount<nStatusNSYellowEWRed1 ) nNowStatus=statusNSYellowEWRed;
if ( nNowStatus==nOldStatus )
{
switch ( nNowStatus )
{
case statusNSFlashEWRed:
nWork1=nTimeCount-nStatusNSGreenEWRed;//-160
nWork2=nStatusNSYellowEWRed-nStatusNSFlashEWRed;//200-184=16
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;
SetLEDArray1(nWork2);
}

Welcome visit us at: www.eepw.com.cn

}
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 )
{

Welcome visit us at: www.eepw.com.cn

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

Welcome visit us at: www.eepw.com.cn

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);
}
// 定时器中断服务程序,进行时钟计数
void interrupt time(void)
{
nTimeMS++;
if ( nTimeMS>=5 )
{
nTimeMS=0;
nTimeCount++;
nTimeCount%=nTotalTime;
}
热心网友 回答时间:2023-10-17 16:25
用分立元件设计电路和逻辑门电路设计电路有何不同?
前者是模拟电路为主,最难;将分立元器件设计成逻辑电路也难,而将别人设计的逻辑电路应用,就是通常的数字电路应用,最容易。而复杂的逻辑电路、时序电路、神经元电路、模糊数学电路最难设计,例如现在谁能设计出1980年的苹果机(中国后来仿制的中华学习机)的硬件逻辑?而复杂的逻辑电路、时序电路、神经元电路、模糊数学电路最难设计,例如现在谁能设计出1980年的苹果机(中国后来仿制的中华学习机)的硬件逻辑?
热心网友 回答时间:2023-10-17 16:26
设计交通灯控制程序、用ICETEK-CTR上的发光二极管的亮灭模拟交通信号,并用其显示阵列模拟显示;使用TMS320VC5509DSP片上定时器定时产生时钟计数;利用ICETEK-CTR上键盘产生外中断,从而模拟实际生活中十字路*通灯控制。

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

数电是什么?模电是什么? 数电 Multisim 0-9十个数字分别对应一个按键,当其中一个按键按下时,在数码显示管上显示对应的数字。 华为che2-ul00是什么型号 小白智能摄像机电池版为什么显示摄像机打不开? 小米、小白智能摄像机为什么网关或者摄像机无法绑定? Old Tom the killer whale,的翻译 小白摄像头n1网线连接设置? 小白智能摄像机青春版显示获取视频文件失败 小米小白智能射像机怎么联结手机? 小白智能摄像头怎么连接手机? 米家小白智能摄像机怎么连不上网 鏅鸿兘镓嬫満鑳藉惁涓婄绣灏嗙绣绔欑湅鍒扮殑鍐呭&#xFFFD;澶嶅埗鍒% 小白智能摄像机大众版C1换了个路由器就连不上了 米家小白摄像头连接超时怎么办 鏅鸿兘镓嬫満鑳藉惁涓婄绣灏嗙绣绔欑湅鍒扮殑鍐呭&#xFFFD;澶嶅埗鍒% 小白智能摄像机云台版26A连接不上服务器是什么原因 建设银行龙卡ic白金信用卡额度有多少?怎么提高额度 404 Not Found 世界旅行ic卡金额度是多少? 建设银行ic金卡额度大概是多少 关于数电的课程设《数字钟》 数电数字钟 关于数电课程实验设计题目《60秒循环计时显示器》 数电数字钟课程设计报告 数电功能表是什么 数字电路基础知识 数电实验数字钟问题 led数码管六位动态显示时分秒,有一位不亮,其他都正常,而且1-9数字中有一位数字动态显示不出来 数字电子钟(计时、校时以及整点报时)数电课程设计报告 数字电子技术是数字逻辑电路吗 学习数电和模电的最大区别是什么? 模电与数电的本质区别,模拟信号与数字信号的区别 数电计数器74161预置数 数电数据选择器问题 数电1+1等于ABC有几种可能 速冻饺子卖6元一个,明知不值,为何仍有大批人购买? 受新冠疫情影响速冻饺子可以吃吗? 速冻饺子吃起来简单方便,它为什么那么便宜? 按生辰八字免费起名 速冻饺子吃起来方便,为什么速冻饺子那么便宜?
Top