您好,欢迎来到独旅网。
搜索
您的当前位置:首页交通灯设计实验报告(硬件原理图+程序)

交通灯设计实验报告(硬件原理图+程序)

来源:独旅网
交通灯设计实验报告(硬件原理图+程序)

交通灯设计实验报告(硬件原理图+程序)

编辑整理:

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(交通灯设计实验报告(硬件原理图+程序))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为交通灯设计实验报告(硬件原理图+程序)的全部内容。

交通灯设计实验报告(硬件原理图+程序)

交通灯信号灯自动控制系统

交通灯原理图 一、 系统的基本功能要求 以秒为计时单位,两位数码管以十进制递减计数形式作定时显示,在递减计数回零瞬间完成换灯操作。

(2) 通过键盘红黄绿三色信号灯所亮时间在0~99秒内任意设定。 (3) 十字路口的通行起始状态可人工设定,运行中可通过人工干预使

十字路口通行状态固定于任何一种工作模式。

(1)

二、设计思路及总体框图,方案比较 

硬件设计

1.系统总体框图

交通灯设计实验报告(硬件原理图+程序)

2。电路设计

(1) 显示模块 倒计时 与 时钟

说明:

⑴共阴极两位数码管用于倒计时 ;

段选端由锁存器控制,位选端用P3_0与P3_1控制 ⑵两个四位共阴极数码组成八位数码管 用于时钟显示

段位选分别由两个锁存器控制 (2)红绿灯模块

交通灯设计实验报告(硬件原理图+程序)

说明:

⑴ 图为两方向的红绿黄灯 ,分别接在P0口上,由P0口控制

⑵ 51系列单片机的P0口内部没有集成上拉电阻,加上拉就是提高 驱动能力,必须要通过上拉电阻接VCC。上拉电阻一般接1K的.

(3) 键盘模块

说明

⑴ P2键控制功能说明:

P2^6 key0绿灯位选择

P2^5 key1黄灯位选择 P2^4 key2 加1操作 P2^3 key3 减1操作

P2^2 key4 信号灯状态固定 P2^1 key5 信号灯状态切换 P2^0 key6时钟时分秒设置键

交通灯设计实验报告(硬件原理图+程序)

⑵ 键盘加上拉电阻为了提高驱动能力

3。复位电路:

4.时钟电路:

说明 :用12M晶振时 电容要选择30p

交通灯设计实验报告(硬件原理图+程序)

 软件部分

1、 主程序流程图

2、时钟初值控制子程序

3、绿灯,黄灯初值设置子程序

4、时钟控制与倒计时控制 时钟,倒计时初值通过键盘输入。倒计时使用52单片机 内部定时器1实现计数,时钟控制部分是使用定时、计数器2 实现计时,以秒为基本单位在数码管中显示。时钟部分:当秒的 个位计时到了10,则秒个位清0,同时十位进一,以此类推;倒 计时部分显示是则递减显示。此过程通过判断语句实现.

5、。灯状态控制 灯的状态通过键盘扫描控制。状态固定键按下时,关闭定 时器1;再次按下此键时,打开定时器。状态选择键按下时,程 序跳至下一个状态的程序控制部分,从而实现状态改变。 三、 实现功能说明 基本功能:

(1)A B干道分别有两组红黄绿灯,各自的亮灯时间与状态由键盘 控制。

(2)两位数码管用于倒计时,记录各个灯的亮灯时间,定时时间由 键盘设定。

(3)十字路口通行状态可由键盘切换。 发挥部分功能:

(1) 由八位数码管显示,初试时间可由键盘设定,且在05:

00~23:00黄灯闪烁显示。

(2) 绿灯倒计时最后三秒和黄灯显示时闪烁显示(频率1HZ)。 (3)人行道的红绿灯配合车辆的红绿灯同时工作。

交通灯设计实验报告(硬件原理图+程序)

四、 所用器件与功能 (1) 共阴数码管10个:8个显示时间,2个显示倒计时时间 (2) 红黄绿发光二极管个4个:模拟十字路口信号灯.令各

加1个人行道上的红灯和绿灯

(3) 74HC573锁存器2个:段码和位选锁存各一个

(4) STC单片机一块 按键8个 12M晶振一个 排线 排针

电阻 电容若干

五、 故障及问题分析 (1)问题:每次通电后都要在十八、十十九口触发一下才能正

常工作。

分析:晶振电路与单片机距离过远,输入噪声很大

解决:把晶振电路改在紧挨单片机位置就可排除干扰。

(2) 共阳数码管需要接三极管放大驱动电流,为节约成本选用

共阴数码管.

(3) 键盘扫描程序中加了按键前沿消抖延时,但按键不够灵敏

加了后延消抖后使得按键足够灵敏.

(4) 在段锁存器给各个数码管送段码时相互之间有影响,在显

示函数中加消影程序解决相互之间的影响。

(5) 在第一次焊接时一次性焊接完,调试时无法检查错误,而

在第二次焊接时采用边调试边焊接的方法,加快速度,提 高了准确度.

(6) 杜邦线 数码管、锁存器等接线比较多,用单根导线焊接

容易相互连接且不易检查错误,用杜邦线便于检查和模块 化调试。

交通灯设计实验报告(硬件原理图+程序) 六、 心得体会 本次设计,我们花了不少时间和精力,但收获很大:

(1) 这次设计时间很长,期间,我们自学了单片机教程,

keil 2、proteus、protel 99se等软件,自学能力达 到很大的提高

(2)本次设计过程中,我们充分体会到了团体合作的重要

性。通过我们三个人的合理分工,设计过程完成的比 较成功

(3) 通过本次设计,我们学到了对复杂程序模块化的编程

方法和对其进行检查与修改方法。

(4)本次设计过程中,我们的动手能力得到很大的提高,

例如说焊接技术、对电路板的总体规划,等等.

七、 参考资料

〈<单片机原理与应用及C51程序设计〉>

清华大学大学出版社

附:软件C程序

//********************实验板上完整程序

#include\"reg52.h\"

#define uint unsigned int #define uchar unsigned char

交通灯设计实验报告(硬件原理图+程序)

uchar aa,bb,cc,dd,ee,ff,a1,a3,con32,con31; uchar temp,ye,shi1,ge1,shi2,ge2,shi,ge,flag; int b,c=0,d=0,m=1,t; uint n1,n2;

sbit p0_3=P0^3; //A干道黄灯 sbit p0_2=P0^2; //A干道红灯 sbit p0_4=P0^4;

//A干道绿灯

sbit p0_6=P0^6; //B干道黄灯 sbit p0_7=P0^7;

//B干道红灯

sbit p0_5=P0^5; //B干道绿灯 sbit wela=P3^0; sbit dula=P3^1; sbit p3_2=P3^2; sbit p3_3=P3^3;

uchar data timedate1[3]={0x00,0x00,0x00};//显示缓冲区两位数字

uchar data timedate2[3]={0x00,0x00,0x00};//显示缓冲区两位数字

uchar data timedate3[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区两位数字

char code wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位扫描 sbit key0=P2^6;

//绿灯控制键

交通灯设计实验报告(硬件原理图+程序)

sbit key1=P2^5; //黄灯控制键 sbit key2=P2^4;

//加一键

sbit key3=P2^3; //减一键 sbit key4=P2^2; //保存状态 sbit key5=P2^1; //状态改变 sbit key6=P2^0;

//时钟控制键

uchar data con3=0x00; uchar data con=0x00; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};

void display(uchar shi,uchar ge);

void display3(uchar aa,uchar bb,uchar ee,uchar ff); void delay(uint z); void init(); keyscan1() ; keyscan2() ; keyscan3() ; void main() {

cc,uchar dd,uchar 交通灯设计实验报告(硬件原理图+程序)

init();//初始化子程序 while(1) {

//*************************键盘扫描控制程序

if(con==0&&ye==0)

keyscan3();

display3(aa,bb,cc,dd,ee,ff);

if(con3==0&&ye==0) //调用键盘扫描程序

);

shi1=n1/10

{keyscan1(ge1=n1%10;display(shi1,ge1);}

if(con==0&&con3==0)

{keyscan2();shi2=n2/10;ge2=n2%10;display(shi2,ge2);}

if((con〉=3&&ye==0)||(ye〉=3&&con==0))display(0,0);

P0=0xff;delay(1);

// ***************************保存当前状态

if(key4==0) {

delay(12);

交通灯设计实验报告(硬件原理图+程序)

while(key4==0) ; delay(12); d++;

if(d%2)TR0=0;//关闭计数器,下面else if语句不执行,直接到delay()显示语句 else TR0=1;

//****************************状态改变,进入下一个状态 if(key5==0) { delay(12);

while(key5==0) ; delay(12); m++;c++; if(c%2) temp=n2; else temp=n1;

}

//****************************状态选择

if(t〈5||t〉=23) {

if(a1/10==0){p0_3=0;p0_6=0;}

交通灯设计实验报告(硬件原理图+程序)

else {p0_3=1;p0_6=1;} delay(1);

else {

if(m%4==1)

{p0_6=1;p0_2=1;

if(temp〉3)p0_4=0;else {if(a1/10==0)p0_4=0;else p0_4=1;} //A绿灯

p0_7=0; //B红灯 delay(1);}

else if(m%4==2)

{p0_4=1;

if(a1/10==0)p0_3=0; else p0_7=0; //B红灯 delay(1);}

p0_3=1;//A黄灯

else if(m%4==3)

{p0_3=1;p0_7=1;

p0_2=0; //A红灯

if(temp〉3)p0_5=0; else{if(a1/10==0)p0_5=0;else p0_5=1;} //B绿灯

交通灯设计实验报告(硬件原理图+程序)

delay(1);}

else if(m%4==0)

{p0_5=1;

p0_2=0; //A红灯

//B黄灯

if(a1/10==0)p0_6=0; else p0_6=1;

delay(1);}

}

//*****************************************倒计时

if(con>=3&&ye〉=3)

{

TR0=1;

if (b!=0) temp=n1; //只有当扫描

到有输入时temp才等于n,否则为自减后的值

shi=temp/10; ge=temp%10; if(a1==20) {

a1=0; temp—-;

交通灯设计实验报告(硬件原理图+程序)

}

if(temp==-1)

{ c++; //进入下一个状态, m++; //进入下一个状态, }

if(c%2) temp=n2; else temp=n1;

赋倒计时起始值 赋灯的状态

display(shi,ge);

}

b=0;

void delay(uint z) { }

uint x,y;

for(x=z;x〉0;x——)

for(y=110;y>0;y-—);

交通灯设计实验报告(硬件原理图+程序)

void display(uchar shi,uchar ge) { P1=0x00; wela=0;

p3_2=1;

dula=1; P1=table[shi];

dula=0;

p3_3=0;

delay(1);

p3_3=1; dula=1;

P1=table[ge]; dula=0; p3_2=0; delay(1); p3_2=1;

}

交通灯设计实验报告(硬件原理图+程序)

void display3(uchar aa,uchar bb,uchar cc,uchar dd,uchar ee,uchar ff) { p3_2=1;p3_3=1;

P1=0xff;

wela=1; P1=wei[7]; wela=0; P1=0x00; dula=1;

P1=table[aa]

dula=0;

delay(1);

dula=1; P1=table[bb]; dula=0; P1= 0xff; wela=1; P1=wei[6]; wela=0;

delay(1);

; 交通灯设计实验报告(硬件原理图+程序)

dula=1;

P1=table[10];

dula=0; P1=0xff; wela=1; P1= wei[5]; wela=0;

delay(1);

dula=1;

P1=table[cc];

dula=0; P1=0xff; wela=1; P1= wei[4]; wela=0;

delay(1);

dula=1; P1=table[dd]; dula=0; P1= 0xff;

交通灯设计实验报告(硬件原理图+程序)

wela=1; P1=wei[3]; wela=0; delay(1);

dula=1;

P1=table[10];

dula=0; P1=0xff; wela=1; P1= wei[2]; wela=0;

delay(1);

dula=1;

P1=table[ee];

dula=0; P1=0xff; wela=1; P1= wei[1]; wela=0;

delay(1);

交通灯设计实验报告(硬件原理图+程序)

dula=1; P1=table[ff]; dula=0; P1= 0xff; wela=1; P1=wei[0]; wela=0; delay(1);

void init() {

wela=0; dula=0;

TH1=(65536—50000)/256; TL1=(65536-50000)%256; TMOD=0x11; EA=1; ET1=1;TR1=0;

TH0=(65536—50000)/256;

交通灯设计实验报告(硬件原理图+程序)

}

TL0=(65536-50000)%256; ET0=1;TR0=0;

//************************绿灯键盘扫描程序 keyscan1() {

if(key0==0)

{

//b=0;

delay(12); while(key0==0) ;

delay(12);

con++;

//b++; }

if(con!=0) //con=1 if(key2==0) { delay(12);

while(key2==0)

delay(12);

2时的加一运算 ||;交通灯设计实验报告(硬件原理图+程序)

timedate1[con]++;

if(timedate1[con]>9)timedate1[con]=0;

shi1=timedate1[1]; ge1=timedate1[2];

display(shi1,ge1);

n1=10*shi1+ge1;

if(con!=0) //con=1||2时的减一运算

if(key3==0)

delay(12);

while(key3==0) ; delay(12);

timedate1[con]——;

if(timedate1[con]==255)timedate1[con]=9;

shi1=timedate1[1];

ge1=timedate1[2];

display(shi1,ge1);

n1=10*shi1+ge1;

交通灯设计实验报告(硬件原理图+程序)

}

//*********************黄灯控制键扫描 keyscan2() {

if(key1==0)

{

b=0;

delay(12);

while(key1==0) ; delay(12);

ye++;

b++;

if(ye!=0) //con=1||2时的加一运算

if(key2==0)

delay(12); while(key2==0) ; delay(12); timedate2[ye]++;

if(timedate2[ye]>9)timedate2[ye]=0;

交通灯设计实验报告(硬件原理图+程序)

shi2=timedate2[1];

ge2=timedate2[2];

display(shi2,ge2) ; n2=10*shi2+ge2;

}

if(ye!=0) //con=1||2时的减一运算 if(key3==0) { delay(12);

while(key3==0) ; delay(12);

timedate2[ye]—-;

if(timedate2[ye]==255)timedate2[ye]

shi2=timedate2[1];

ge2=timedate2[2];

display(shi2,ge2);

n2=10*shi2+ge2;

}

}

=9;

交通灯设计实验报告(硬件原理图+程序)

void timer0() interrupt 1 { }

TH0=(65536-50000)/256; TL0=(65536—50000)%256; a1++;

//******************时钟控制键扫描程序 keyscan3() {

if(key6==0)

{

delay(12);

while(key6==0) ; delay(12);

con3++;

TR1=0;

if(con3==5){TR0=1;con3=0; }

}

if(con3!=0) //con=1||2时的加一运算

if(key2==0)

交通灯设计实验报告(硬件原理图+程序)

{

delay(12); while(key2==0) ; delay(12);

timedate3[con3]++; if(con3==1)con31=2; else if(con3==2)con31=9; else if(con3==3)con31=5; else if(con3==4)con31=9;

if(timedate3[con3]>con31)timedate3if(timedate3[1]==2&&timedate3[2]==4)

{timedate3[2]=0;timedate3[1]=0;}

[con3]=0;

if(con3!=0)

if(key3==0) { }

delay(12); while(key3==0) ; delay(12);

timedate3[con3]-—;

交通灯设计实验报告(硬件原理图+程序)

if(con3==1) con32=2; else if(con3==2) con32=9; else if(con3==3)

con32=5;

else if(con3==4) con32=9;

if(timedate3[con3]==255)timedate3[con3]=con32; if(timedate3[1]==2&&timedate3[2]==9)

timedate3[2]=3;

aa=timedate3[1]; //小时的十是位 bb=timedate3[2]; cc=timedate3[3]; dd=timedate3[4]; ee=timedate3[5]; ff=timedate3[6]; t=10*aa+bb;

void time_intt3(void) interrupt 3 { TH0=(65536—50000)/256;

TL0=(65536-50000)%256;

交通灯设计实验报告(硬件原理图+程序)

a3++; if(a3==20) {

a3=0;timedate3[6]++; if(timedate3[6]==10)

{timedate3[6]=0;timedate3[5]++;}

if(timedate3[5]==6)

{timedate3[5]=0;timedate3[4]++;}

if(timedate3[4]==10)

{timedate3[4]=0;timedate3[3]++;}

if(timedate3[3]==6)

{timedate3[3]=0;timedate3[2]++;}

if(timedate3[2]==10)

{timedate3[2]=0;timedate3[1]++;}

if(timedate3[1]==2&&timedate3[2]==4)

{timedate3[1]=0;timedate3[2]=0;}

aa=timedate3[1]; bb=timedate3[2]; cc=timedate3[3]; dd=timedate3[4]; ee=timedate3[5]; ff=timedate3[6];

交通灯设计实验报告(硬件原理图+程序)

t=10*aa+bb;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dcrkj.com 版权所有 赣ICP备2024042791号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务