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

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-06-16
数电课程设计都设计些什么呢?

一般都是给你一个单片机,学校实验室里都有,然后在上面设计出一些功能,我列出一些你看看。
1、集成数字式闹钟
1.1设计任务与要求
(1) 时钟功能:具有24小时或12小时的计时方式,显示时、分、秒。
(2) 具有快速校准时、分、秒的功能。
(3) 能设定起闹时刻,响闹时间为1分钟,超过1分钟自动停;具有人工止闹功能;止闹后不再重新操作,将不再发生起闹。
(4) 计时准确度:每天计时误差不超过10秒。
(5) 供电方式:220V,50HZ交流供电,当交流中断时,自动接上内部备用电源供电,不影响计时功能。

2、直流可变稳压电源的设计
3、OTL互补对称功率放大器
4、PID调节器
5、有源滤波器
6、简易万用电表的制作
7、信号峰值检测仪
8、楼道触摸延时开关
9、自动水龙头的设计
10、简易交通灯控制逻辑电路设计
11、波形发生器
12、过/欠电压保护提示电路
13、音乐彩灯控制器
14、简易频率计

第1种我详细列了下,其实也就是在单片机上设计好电路,然后把程序导入就可以了。
2、3、4、5、6、7都不难的,一般的学校只要有实验课应该都有,一节课就能做完了。
后面的几个稍有难度,但是10和13这种都是很经典的,自己做一下挺有锻炼价值的。

用时间继电器电路图,cd4518

摘要:设计交通灯控制程序、用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;
}

用分立元件设计电路和逻辑门电路设计电路有何不同?
前者是模拟电路为主,最难;将分立元器件设计成逻辑电路也难,而将别人设计的逻辑电路应用,就是通常的数字电路应用,最容易。而复杂的逻辑电路、时序电路、神经元电路、模糊数学电路最难设计,例如现在谁能设计出1980年的苹果机(中国后来仿制的中华学习机)的硬件逻辑?而复杂的逻辑电路、时序电路、神经元电路、模糊数学电路最难设计,例如现在谁能设计出1980年的苹果机(中国后来仿制的中华学习机)的硬件逻辑?

设计交通灯控制程序、用ICETEK-CTR上的发光二极管的亮灭模拟交通信号,并用其显示阵列模拟显示;使用TMS320VC5509DSP片上定时器定时产生时钟计数;利用ICETEK-CTR上键盘产生外中断,从而模拟实际生活中十字路口交通灯控制。