数电课程设计交通灯
具体内容如下:
一 设计题目
题目:交通灯控制电路的设计
二 设计目的
训练学生综合地运用所学的 《数字逻辑》的基本知识,使用电脑EWB仿真技术,独立完整地设计一定功能的电子电路,以及仿真和调试等的综合能力。本次电脑仿真所用的软件版本为EWB Version 5.0c
三 设计内容
现有一个十字路口,为了其通行的顺利,我们针对这设计了一个交通灯系统。
四 设计要求
1、设计一个十字路口的交通灯控制电路,要求东西方向车道和南北方向车道两条交叉道路上的车辆交替运行,每次通行时间都设为45秒。时间可设置修改。
2、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;
3、黄灯亮时,要求每秒闪亮一次。
4、东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用倒计时的方法)。
五 总体功能框图
图5 总体功能框图
交通灯控制系统的原理框图如图5所示。它主要由倒计时计数电路、信号灯转换器和秒脉冲信号发生器组成。秒脉冲信号发生器是该系统中倒计时计数电路和黄灯闪烁控制电路的标准时钟信号源,倒计时计数器输出两组驱动信号T5和T0,经信号灯转换器控制信号灯工作,倒计时计数电路是系统的主要部分,由它控制信号灯转换器的工作。
六 单元电路图
6.1信号灯转换器
选用JK触发器,设状态编码为:S0=00 S1=01 S2=11 S3=10,其输出为Q1 Q0,则其状态表为:
表6-1 状态编码与信号灯关系表
现态 次态 输出
Q1n Q0n Q1n+1 Q0n+1 Ga Ya Ra Gb Yb Rb
0 0 0 1 1 0 0 0 0 1
0 1 1 1 0 1 0 0 0 1
1 1 1 0 0 0 1 1 0 0
1 0 0 0 0 0 1 0 1 0
图6.1 信号灯转换器
6.2倒计时计数器
十字路口要有数字显示,作为倒计时提示,以便人们更直观地把握时间。具体为:当某方向绿灯亮时,置显示器为某值,然后以每秒减1,计数方式工作,直至减到数为“5”和“0”,十字路口绿、黄、红灯变换,一次工作循环结束,而进入下一步某方向的工作循环。在倒计时过程中计数器还向译码器提供模5的定时信号T5和模0的定时信号T0。
作G=0时的卡诺图:
BC 00 01 11 10
X 1 1 1
1 1 0 0
A 0
1
(1) 倒计时显示采用七段数码管作为显示,由计数器驱动并显示计数器输出值。
(2) 计数器选用集成电路74190进行设计。74190是十进制同步可逆计数器,它具有异步并行置数功能、保持功能。74190没有专用的清零输入端,但可以借助QA、QB、QC、QD的输出数据间接实现清零功能。
表6-2 74190的状态表
CTEN D/U CLK LOAD A B C D QA QB QC QD
0 X X 0 X X X X A
B C
D
0 1 POS 1 X X X X Count Down
0 0 POS 1 X X X X Count Up
1 X X X X X X X Qa0 Qb0 Qc0 Qd0
现选用两个74190芯片级联成一个从可任意设定时间00~99倒计至00的计数器,其中作为个位数的74190芯片的CLK接秒脉冲发生器(频率为1),再把个位数74190芯片输出端的QA、QD用一个与门连起来,再接在十位数74190芯片的CLK端。当个位数减到0时,再减1就会变成9, 0(0000)和9(1001)之间的QA、QD同时由0变为1,把QA、QD与起来接在十位数的CLK端,此时会给十位数74190芯片一个脉冲数字减1,相当于借位。具体连接方法如图一:
图6.2 译码器
信号LD由两个芯片的8个输出端用或门连起来,决定倒计时是置数,还是计数。工作开始时,LD为0,计数器预置数,置完数后,LD变为1,计数器开始倒计时。当倒计时减到数00时,LD又变为0,计数器又预置数,之后又倒计时,如此循环下去。
图6.3 通行时间控制开关
(3) 预置数(即车的通行时间)功能:如图6.3所示,8个开关分别接十位数74190芯片的D、C、B、A端和个位数74190芯片的D、C、B、A端。预置数的范围为6~98。假如把通行时间设为45秒,就像图2的接法,A接0,B接1,C接0,D接0,E接0,F接1,G接0,H接1。(接电源相当于接1,悬空相当于接0)
图6.4 倒计时计数器
(4) 向译码器提供模5的定时信号T5和模0的定时信号T0:T0表示倒计时减到数“00”(也即绿灯的预置时间,因为到00时,计数器重新置数),T0=1,此时T0给译码器一个脉冲,使信号灯发生转换,一个方向的绿灯亮,另一个方向的红灯亮。接法为:把两个74190计数器的8个输出端用一个集成的八输入一输出或门连起来。
T5表示倒计时减到数“05”时。T5=1,此时T5给译码器一个脉冲,使信号灯发生转换,绿灯的变为黄灯,红灯的不变。接法为:当减到数为“05”(0000 0101)时,把十位计数器的输出端QA、QB、QC、QD连同个位计数器的输出端QB、QD用一个或非门连起来,再把这个或非门与个位计数器的输出端QA、QC用一个与非门连接起来。具体连接方法如图6.4所示。
要求黄灯每秒闪一次,用一个频率为1的脉冲一端与控制黄灯的输出信号的JK触发器连接起来,另一端再接到黄灯。
七 总电路图
图7 交通灯总电路图
八 调试(实现的结果)
1. 根据题目的要求,整个交通灯控制系统需要有4个时间显示器,12个交通灯。但由于4个时间显示器是由同一个倒计时计数器控制,所以我在设计图电路的过程中,为了简化电路使画图看起来更加清晰,就只接了1个时间显示器。
2. 点击启动按钮,便可以进行交通灯控制系统的仿真,电路默认把通车时间设为45秒,打开开关后,东西方向绿灯亮,“东来西往”的行人车辆都可自由通行;南北方向车道的红灯亮,南来北往的车辆禁止通行。时间显示器从预置的45秒,以每秒减1,减到数5时,东西方向车道的绿灯转换为黄灯,而且黄灯每秒闪一次,其余灯都不变。减到数1时,1秒后显示器又转换成预置的45秒,东西方向车道的黄灯转换为红灯;南北方向车道的红灯转换为绿灯。如此循环下去。
3. 修改通车时间为其它的值再进行仿真(时间范围为6~98秒),效果和上面差不多,东西方向车道的绿灯亮,时间倒计数5,车灯进行一次转换,到0秒时又进行转换,而且时间重置为预置的数值,如此循环。
九 心得体会
开始拿到题目的时候,不知道怎么去做,因为自己对这门课的一般设计都不是很会.对很多的芯片的功能都不是很清楚.还有ewb仿真软件,以前才来没有接触过,只是现在需要的时候才开始用它,它的功能,按键都不清楚.
通过这次课程设计,加强了我动手、思考和解决问题的能力.现在设计已经做好了,自己感觉还是比较好的,虽然花了很多的时间,但学到了很多东西.做课程设计的时候,自己把整个书本都看了几遍,增强了自己对知识的理解,很多以前不是很懂的问题现在都已经一一解决了.在课程设计的过程中,我想了很多种方案,对同一个问题(像计数器的接法)都想了很多种不同的接法,运用不同的芯片进行了比较,最后还是采取了上面的方法进行连接.从开始做课程设计那天起,脑中天天都想着同样的问题,怎么去接线,怎么去把电路弄得更加简单,怎么别人更容易看懂.但似乎时间过得真的很快,我用了好几天才把它完全弄完,完成后,心里有一种说不出的高兴.
这次课程设计之后,使我明白了,做任何事情都要认真仔细,不然的话,你会花更多的时间才会做好.课程设计有利于提高我们的动手能力,能把我们所学的书本知识运用到实际生活中去.同时也丰富了我们的业余生活,提高我们对知识的理解能力.
参考文献
〔1〕 胡道元.计算机局域网.北京:清华大学出版社,2002年
〔2〕 江国强.现代数字逻辑电路习题指导.北京:电子工业出版社,2002年
〔3〕 李宜达.数字逻辑电路设计与实现.北京:科学出版社,2004年
〔4〕
蒋立平. 数字逻辑电路与系统设计. 北京:电子工
以上回答你满意么?
//*********************************************************
//实现功能:本程序实现在P1口模拟一个流水霓虹灯程序
//*********************************************************
#include <reg51.h>
#define p_out P1 //宏定义输出的i/o口为P1
//******************时间延迟函数**********************
//描 述:用指令实现延时一段时间
//入口参数:int i,为时间延迟参数
//****************************************************
void delay_time(int i)
{
while(i)
i--
}
//******************主函数***************************
//描 述:实现在P1口模拟一个流水灯程序
//****************************************************
void main(void)
{unsigned char i=0 //初始化一个局部变量为0
p_out=0xff //初始化将要输出的i/o口,输出高电平,熄灭所有灯
while(1)
{
for(i=0i<8i++)
{
p_out=~(1<<i)//点亮一个灯,
delay_time(50000) //延迟一段时间
p_out=0xff//熄灭所有灯
}
}
}
//**************************************
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define red (~0x01)
#define yellow (~0x02)
#define green (~0x04)
#define left (~0x08)
#define nbred (~0x10)
#define nbyellow (~0x20)
#define nbgreen (~0x40)
#define nbleft (~0x80)
uint num2
uchar dx_js,nb_js
uchar zt
uchar code tab1[]={0,20, 5, 5, 5,35}
uchar code tab2[]={0,
0xFF&green&nbred,
0xFF&yellow&nbred,
0xFF&left&nbred,
0xFF&yellow&nbred,
0xFF&red&nbgreen,
0xFF&red&nbyellow,
0xFF&red&nbleft,
0xFF&red&nbyellow,
}
sbit D0=P2^0
sbit D1=P2^1
sbit D2=P2^2
sbit D3=P2^3
uchar ds[4]
uchar code tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}
//数码管显示
void smxs(){
static uchar a
if(a>3)a=0
P2&=0xf0
P0=tab[ds[a]]
switch(a){
case 0:D0=1break
case 1:D1=1break
case 2:D2=1break
case 3:D3=1break
}
a++
}
void init() //初始化函数
{ TMOD=0x01
TH0=(65536-1000)/256
TL0=(65536-1000)%256
EA=1
ET0=1
}
void main()//主函数
{
init()
zt=1
num2=0
dx_js=tab1[zt]
nb_js=tab1[5]
TR0=1
while(1){
P1=tab2[zt]
ds[0]=dx_js/10
ds[1]=dx_js%10
ds[2]=nb_js/10
ds[3]=nb_js%10
}
}
void timer0() interrupt 1//定时器,实现倒计时
{
TH0=(65536-1000)/256
TL0=(65536-1000)%256
num2++
if(num2==1000){//1s
num2=0
dx_js--//倒计时
nb_js--
if(dx_js==0||nb_js==0){//到0
zt++//状态加1
if(zt==9){
zt=1
}
if(zt==1){
dx_js=tab1[zt]//重新开始计时
nb_js=tab1[5]
}else if(zt==5){
nb_js=tab1[zt-4]
dx_js=tab1[5]
}
else if(zt<5){
dx_js=tab1[zt]
}else {
nb_js=tab1[zt-4]
}
}
}
smxs()
}
首先,之前你必须做过数码管0~9的显示电路和10路流水灯电路(如果没做过,赶紧先做,不然很难成功)
总体思路:用类似流水灯电路来触发需要显示的abcd二进制来控制0~9,让它随心所欲的显示各种数字。(例如要显示3,那么abcd的电平应该是1100,如果要显示8,那么abcd的电平应该是0010,以此类推)
一共是28个数,建议用两片cd4017(10进制芯片),组成一个28路流水灯电路(可以没有灯,这样说只是为了便于理解。只是需要其28路的触发)
然后用一片cd4511(七段译码芯片),它有abcd四个二进制输入端口和七段端口(用来显示数码管的七个段位,小数点除外)
最后用28路的触发端接入abcd的端口,用二极管隔开,然后你就可以随心所欲的设置各种数字了,100个1000个(如果1000个就还需加个cd4017)没有任何规律的数字组合都可以显示。
至于开机复位很简单,4017的复位端接个电容(电容的另一端接VCC),开机复位就OK了,而4511无需复位(因为4511是受4017控制)。
已经很详细了,希望对你有用。
是否可以解决您的问题?
打字不易,如满意,望采纳。
LJMP 0100H
ORG 0003H
LJMP 0200H
MOV IE ,#81H
SETB IT0
MOV A,#55H
KK:MOV P1,A
SJMP KK
ORG 0200H
PUSH ACC
PUSH P1
MOV A ,#00H
MOV R1,A
MOV A ,#55H
MOV P1 ,A
MOV R2 ,#20
LOOP:LUCLL DLY
DJNZ R2 LOOP
RL A
SJMP MM
MOV TMOD ,#10H
MOV TH1 #3CH
MOV TL1 , #0B0H
SETB TR1
JNB TF1 ,$
CLR TF1
CLR TR1
RET