好吧 我为了任务Word下载.docx

上传人:b****6 文档编号:18590715 上传时间:2022-12-28 格式:DOCX 页数:19 大小:304.73KB
下载 相关 举报
好吧 我为了任务Word下载.docx_第1页
第1页 / 共19页
好吧 我为了任务Word下载.docx_第2页
第2页 / 共19页
好吧 我为了任务Word下载.docx_第3页
第3页 / 共19页
好吧 我为了任务Word下载.docx_第4页
第4页 / 共19页
好吧 我为了任务Word下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

好吧 我为了任务Word下载.docx

《好吧 我为了任务Word下载.docx》由会员分享,可在线阅读,更多相关《好吧 我为了任务Word下载.docx(19页珍藏版)》请在冰豆网上搜索。

好吧 我为了任务Word下载.docx

AT89C51单片机[1],AMBERCC数码管显示模块,按键控制模块,LED灯指示模块等硬件电路构成,软件包括定时器部分,外部中断部分,正常模式部分程序组成。

正常模式下由程序执行6个状态,每个状态分别各车道通行时间40秒,左转20秒,人行道有40秒的通行时间,离转换还剩5秒时数码管进入闪烁倒计时状态,每条道路对应1个等待状态,1个通行状态,1个左转状态,每个状态调用数码管倒计时显示子程序,并可根据具体繁忙程度手动调节交通灯的转换时间。

2单片机交通灯控制系统方案制定

2.1方案提出

采用分模块设计的思想,程序设计实现的基本思想是一个计数器,选择一个单片机,其内部为一个计数[3],是十六进制计数器,模块化后,通过设置或程序清除来实现状态的转换,由于每一个模块的计数多不是相同,这里的各模块是以预置数和计数器计数[11]共同来实现的,所以要考虑增加一个置数模块,其主要功能细分为,对不同的状态输入要产生相应状态的下一个状态的预置数,分别为南北车道的置数选择和东西车道的置数选择。

现在简述设计思想。

如前分析已经确定该系统有六个状态[12],而置数子模块可定要将下一状态的预置数准备好,所以很容易得到主干道的置数表

表1:

方案1的交通灯工作状态

状态

南北车道预置

东西车道预置数

000

35(直行绿灯)

35(红灯)

001

5(黄灯闪烁等待)

5(红灯)

010

20(左转绿灯)

20(红灯)

011

100

101

由该表,就可以通过程序循环的方法设计该模块,主要思想是通过数据判断指令、跳转指令实现,由主控制器计时和中断产生的八个状态去译码,从而得到不同的输出,即预置数,由上分析可用一个计数器和跳转指令去完成的预置数。

同时,可以用组合电路实现该功能了,可以用数据选择器的思想,在本系统中,直接通过门电路的译码,接下来就是计数模块了,其主要的功能细分为,要从预置数开始递减计数,一个状态结束,通过判断,通知主控制模块,使之进入下一模块。

还有一个必须考虑到的就是,预置数必须在下一个状态来之前准备好,而红绿黄灯的状态变化,必须和计数状态同步,于是引起预置数变化的程序要超前于系统本身的状态变化,所以,系统中的两个状态转换时,在上一状态结束时设置预置数,而控制红绿灯的是随着系统本身状态的变化而变化,体现在本子电路中就是有两组电路去判断符合的状态。

3系统硬件原理图

图1系统硬件原理图

3.1软件功能设计

1、主程序负责初始化以及循环扫描键盘;

2、定时器0负责闪烁以及数码管的闪烁;

3、定时器1负责计数以及数码管的循环显示,交通灯的循环点亮;

4、键盘扫描模块负责获得键号并转到相应的程序进行处理;

5、键盘处理模块负责调整交通的通行以及暂缓通行时间

3.2程序流程图

全部控制程序实际上分为若干模块:

键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序,中断服务子程序,红绿灯时间调整程序等。

整个软件程序方面主要分两大部分:

主程序部分和中断处理程序。

图2程序流程总图

总图是所有程序依据的原理每次子程序都将调用总图进行形成,首先开始,然后通过I/O口进行程序编译,之后通过芯片进行检测运行,有效的向下发放无效返回提醒。

图3主程序流程图

首先开始运行,系统初始化,各灯开始运行亮灯并有处理器处理返回

图4按键子程序流程图

它包含倒计时调整和繁忙状态两个状态。

主程序中放了一个按键的判断指令,当有按键按下的时候,程序就自动的跳转到按键子程序处理。

当检测到K2键按下的时候就自动返回到主程序。

当出现繁忙的情况的时候,按下K3或者K4就切换到繁忙状态,当繁忙事件处理完毕的时候,再按键调整时间,返回正常状态。

图5中断程序图

从主控中返回的数据先分配空间,之后判断,判断正确进行中断获得数据依次循环,判断不正确直接返回原值进行下一步程序

4系统仿真实现

图6东西停南北直行南北人行通行状态

图7东西停南北左转弯南北方向人形通行状态

图8南北停东西直行东西方向人形通行状态

图9南北停东西左转弯东西方向人形通行状态

图10繁忙状态交通灯工作状况

5仿真软件介绍

Protel99S:

随着计算机技术的飞速发展,集成电路被广泛应用,电路越来越复杂,集成度越来越高,加之新型元件层出不穷,使得越来越多的工作已经无法用手工来完成,因此计算机辅助电路板设计已经成为电路板设计制作的必然趋势。

Protel99SE具有丰富的设计功能,能进行原理图的设计、印制电路板的设计、PCB板的设计等功能。

KeilC51:

KeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM语言和C语言的程序设计,界面友好,易学易用。

eilμVision调试器准确地模拟8051设备的片上外围设备(IC、CAN、UART、SPI、中断、I/O端口、A/D转换器、D/A转换器和PWM模块)。

模拟帮助你了解硬件配置,避免在安装问题上浪费时间。

此外,使用模拟器你可以在没有目标设备的情况下编写和测试应用程序。

使用PK51专业开发套件,你可轻松访问8051系列的片上外设和其他关键功能。

6结语

在这次课程设计中,我遇到了一些问题,也学会了很多关于数字电路的东西,并对所用器件有了更深入的认识。

首先,为了使线路简单在安装之前要对芯片的位置布置作一下分析,才开始连接。

并按照电路进行合理的布置器件,另外,在调试过程中,要学会使用仪器去检测电路,刚开始我很快就将线认真的连好,但没有出现结果,我再用表去测电路,并找出了问题所在。

这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在同学的辛勤指导下,终于游逆而解。

同时,在同学的身上我们学也到很多实用的知识,在此我心存感激。

此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。

在此,感谢于权循忠老师的细心指导,也同样谢谢其他各组同学的无私帮助!

7参考文献

[1]胡汉才单片机原理及其接口技术[M]清华大学出版,1996

[2]蔡美琴MCS-51系列单片机系统及其应用高等教育出版社2004.2

[3]付家才单片机控制工程实践技术[M]化学工业出版社,2004.5

[4]潘新民微型计算机控制技术[M]人民邮电出版社,1999.9

[5]余锡存单片机原理及接口技术[M]西安电子科技大学出版社,2000.7

[6]雷丽文等.微机原理与接口技术[M]电子工业出版社,1997.2

[7]蒋万君在论循环时序电路的简便设计[J]机电一体化,2005第5期

[8]周立功增强型80C51单片机速成与实战北京航空航天大学出版社2004.5

[9]何立民MCS-51系列单片机应用系统设计北京航空航天大学出版社,1995.

[10]李华MCS-51系列单片机实用接口技术[M]北京航空航天大学出版社,1993

[11]周航慈单片机应用程序设计技术[M]北京航空航天大学出版社,1991.

[12]张志良等单片机原理与控制技术[M]机械工业出版社,2001年7月第1版

[13]陆坤电子设计技术1电子科技大学出版社,1997

[14]梁文海单片机AT89C2051构成的智能型频率计[J]现代电子技术,2002

[15]谢自美电子线路设计·

实验·

测试[M]华中理工大学出版社,2001

[16]吴金戎,沈庆阳8051单片机实践与应用[M]清华大学出版社,2003

8附录

所用元器件清单

表1所有元器件列表

NE555

1

74LS00

4

74LS47

2

CD4029

3

74LS245

1/4W金属膜电阻:

47K

39K

220

电位器:

5K

电解电容:

10μF

固定电容:

0.01μF

发光二极管:

绿

共阳数码管

相关程序

/*****************************************************

十字路口交通灯控制C程序

******************************************************/

#defineucharunsignedchar

#defineuintunsignedint

#include<

reg52.h>

/*****定义控制位**********************/

sbitTime_Show_LED2=P2^5;

//Time_Show_LED2控制位

sbitTime_Show_LED1=P2^4;

//Time_Show_LED1控制位

sbitEW_LED2=P2^3;

//EW_LED2控制位

sbitEW_LED1=P2^2;

//EW_LED1控制位

sbitSN_LED2=P2^1;

//SN_LED2控制位

sbitSN_LED1=P2^0;

//SN_LED1控制位

sbitSN_Yellow=P1^6;

//SN黄灯

sbitEW_Yellow=P1^2;

//EW黄灯

sbitEW_Red=P1^3;

//EW红灯

sbitSN_Red=P1^7;

//SN红灯

sbitEW_ManGreen=P3^0;

//EW人行道绿灯

sbitSN_ManGreen=P3^1;

//SN人行道绿灯

sbitSpecial_LED=P2^6;

//交通正常指示灯

sbitBusy_LED=P2^7;

//交通繁忙指示灯

sbitNomor_Button=P3^5;

//交通正常按键

sbitBusy_Btton=P3^6;

//交通繁忙按键

sbitSpecial_Btton=P3^7;

//交通特殊按键

sbitAdd_Button=P3^3;

//时间加

sbitReduces_Button=P3^4;

//时间减

bitFlag_SN_Yellow;

//SN黄灯标志位

bitFlag_EW_Yellow;

//EW黄灯标志位

charTime_EW;

//东西方向倒计时单元

charTime_SN;

//南北方向倒计时单元

ucharEW=60,SN=40,EWL=19,SNL=19;

//程序初始化赋值,正常模式

ucharEW1=60,SN1=40,EWL1=19,SNL1=19;

//用于存放修改值的变量

ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//1~~~~9段选码

ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};

//交通信号灯控制代码

/**********************延时子程序************************/

voidDelay(uchara)

{

uchari;

i=a;

while(i--){;

}

}

/*****************显示子函数**************************/

voidDisplay(void)

charh,l;

h=Time_EW/10;

l=Time_EW%10;

P0=table[l];

EW_LED2=1;

Delay

(2);

EW_LED2=0;

P0=table[h];

EW_LED1=1;

EW_LED1=0;

h=Time_SN/10;

l=Time_SN%10;

SN_LED2=1;

SN_LED2=0;

SN_LED1=1;

SN_LED1=0;

h=EW1/10;

l=EW1%10;

Time_Show_LED1=1;

Time_Show_LED1=0;

P0=table[h];

Time_Show_LED2=1;

Time_Show_LED2=0;

}

/**********************外部0中断服务程序************************/

voidEXINT0(void)interrupt0using1

EX0=0;

//关中断

if(Add_Button==0)//时间加

{

EW1+=5;

SN1+=5;

if(EW1>

=100)

{

EW1=99;

SN1=79;

if(Reduces_Button==0)//时间减

EW1-=5;

SN1-=5;

if(EW1<

=40)

EW1=40;

SN1=20;

}

if(Nomor_Button==0)//测试按键是否按下,按下为正常状态

EW1=60;

SN1=40;

EWL1=19;

SNL1=19;

Busy_LED=0;

//关繁忙信号灯

Special_LED=0;

//关特殊信号灯

if(Busy_Btton==0)//测试按键是否按下,按下为繁忙状态

EW1=45;

SN1=30;

EWL1=14;

SNL1=14;

Special_LED=0;

Busy_LED=1;

//开繁忙信号灯

if(Special_Btton==0)//测试按键是否按下,按下为特殊状态

EW1=75;

SN1=55;

Special_LED=1;

//开特殊信号灯

}

EX0=1;

//开中断

/**********************T0中断服务程序*******************/

voidtimer0(void)interrupt1using1

{

staticucharcount;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==10)

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

{SN_Yellow=~SN_Yellow;

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

{EW_Yellow=~EW_Yellow;

if(count==20)

Time_EW--;

Time_SN--;

if(Flag_SN_Yellow==1)//测试南北黄灯标志位

if(Flag_EW_Yellow==1)//测试东西黄灯标志位

count=0;

/*********************主程序开始**********************/

voidmain(void)

{

Busy_LED=0;

Special_LED=0;

IT0=1;

//INT0负跳变触发

TMOD=0x01;

//定时器工作于方式1

//定时器赋初值

EA=1;

//CPU开中断总允许

ET0=1;

//开定时中断

EX0=1;

//开外部INTO中断

TR0=1;

//启动定时

while

(1)

{/*******S0状态**********/

EW_ManGreen=0;

//EW人行道禁止

SN_ManGreen=1;

//SN人行道通行

Flag_EW_Yellow=0;

//EW关黄灯显示信号

Time_EW=EW;

Time_SN=SN;

while(Time_SN>

=5)

{P1=S[0];

//SN通行,EW红灯

Display();

/*******S1状态**********/

P1=0x00;

while(Time_SN>

=0)

{Flag_SN_Yellow=1;

//SN开黄灯信号位

EW_Red=1;

//SN黄灯亮,等待左拐信号,EW红灯

Display();

}

/*******S2状态**********/

Flag_SN_Yellow=0;

//SN关黄灯显示信号

Time_SN=SNL;

P1=S[2];

//SN左拐绿灯亮,EW红灯

Display();

/*******S3状态**********/

//SN黄灯亮,等待停止信号,EW红灯

/***********赋值**********/

EW=EW1;

SN=SN1;

EWL=EWL1;

SNL=SNL1;

/*******S4状态**********/

EW_ManGreen=~EW_ManGreen;

//EW人行道通行

SN_ManGreen=~SN_ManGreen;

//SN人行道禁止

Time_EW=SN;

Time_SN=EW;

while(Time_EW>

{P1=S[4];

//EW通行,SN红灯

/*******S5状态**********/

P1=0X00;

{Flag_EW_Yellow=1;

//EW开黄灯信号位

SN_Red=1;

//EW黄灯亮,等待左拐信号,SN红灯

/*******S6状态**********/

Flag_EW_Yellow=0;

Time_EW=EWL;

{P1=S[6];

//EW左拐绿灯亮,SN红灯

/*******S7状态**********/

Flag_EW_Yellow=1;

//EN开黄灯信号位

//EW黄灯亮,等待停止信号,SN红灯

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1