51单片机c语言交通灯设计报告

时间:2024.4.20

xxxxxxxxx

基于AT89S52交通灯设计

学 院: 电子信息工程

专业班级: xxxxxxxxxxxxxx

姓 名: xx xx

学 号: xxxxxxxxxxx

指导老师: xxxxxxxxxx

摘要

交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。

关键词:交通灯 AT89S52 单片机

目录

一、设计任务 3

二、AT89S52单片机及其他元器件简介 3

(1)AT89S52单片机 3

三、系统硬件电路设计 5

(1)时钟电路设计 5

(2) 复位电路设计 5

(3) 灯控制电路设计 6

(4) 按键控制电路设计 6

四、元件清单及实物图 7

1、程序清单 7

2、原理图 8

五、实验心得 8

附1 源程序代码 9

附2 原理图 15

一、设计任务

(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。

(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。

(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。

二、AT89S52单片机及其他元器件简介

(1)AT89S52单片机

AT89S52是一种低功耗、高性能CMOS8位微控制器。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器计数器、串口、中断继续工作。鉴于以上的优点本系统采用AT89S52作为主控芯片,实现对整个系统的控制。

https://upload.fanwen118.com/wk-img/img100/3580430_1.jpg

(2)芯片74LS245

74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

https://upload.fanwen118.com/wk-img/img100/3580430_2.jpg

当19脚E为H时,A、B为高阻。E为L时,DIR为L时,数据由B传向A;DIR为H时,由A传向B。

(3)两位共阴数码管

https://upload.fanwen118.com/wk-img/img100/3580430_3.jpg

16脚和11脚对应A、15脚和10脚对应B、3脚和8脚对应C、2脚和6脚对应D、1脚和5脚对应E、18脚和12脚对应F、17脚7脚对应G、4脚和9脚对应DP。公共脚为14脚和13脚,分别对应左边和右边显示的数字。

三、系统硬件电路设计

(1)时钟电路设计

https://upload.fanwen118.com/wk-img/img100/3580430_4.jpg

如图所示,采用内部时钟产生方式,在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,与内部反相器构成稳定的自击震荡。其发出的时钟脉冲直接送入片内定时控制部件。

(2) 复位电路设计

https://upload.fanwen118.com/wk-img/img100/3580430_5.jpg

如上图所示,采用上电+按钮电平复位方式,当按下按钮时,RST管脚高电平触发。为保证复位可靠,RC时间常数应大于两个机器周期,电容取10uf,电阻取1000欧。

(3) 灯控制电路设计

https://upload.fanwen118.com/wk-img/img100/3580430_6.jpg

如上图所示,交通灯状态显示电路由东西南北四个方向各三个LED灯组成,分别显示四个方向上红、黄、绿三个状态,用以指示十字路口各方向车辆的行驶。通过软件编程,可使路口交通变化情况为:南北方向和东西方向两条交叉道路上的车辆交替运行,主干道每次通行时间都设为30秒。在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道;黄灯亮时每秒闪亮一次。

(4) 按键控制电路设计

https://upload.fanwen118.com/wk-img/img100/3580430_7.jpg

开关控制由7个连接到单片机的控制按钮组成。通过软件编程,使得各个开关的功能如上图所示, 基本满足了交通灯的需要。

四、元件清单及实物图

1、程序清单

https://upload.fanwen118.com/wk-img/img100/3580430_8.jpg

五、实验心得

这次交通灯的制作是我学会了不少的东西,首先是proteus和keil的使用。单片机程序的编写和原理图的仿真都是在这两个软件的运行下才可以进行的。这个实验最重要的是让我对51系列的单片机有了更深层次的了解,这一学期 开接触单片机的时候觉得这是一门极其高深的课程,老师讲的什么基本完全不懂,课后看仍旧是一头雾水。通过交通灯的学习和制作,对单片机有了初步的了解,知道了它的组成、工作原理等等。

在软件编写这一块,开始时遇到了很大的难题,因为两百行的程序,哪怕有一个错误,修改起来也不是十分方便。时常没有心思去寻找和改正错误,所以软件这一块花了很大的一部分时间。几次调试后总算出现“0 warning”和“0 error”的字样。

焊接也是比较麻烦,由于万能板买小了,再加上需要连接的线有很多根,所以首先必须考虑到元器件的排布问题,尽量让自己的焊接的时候方便一点。借鉴别人的经验,数码管和排阻之间用排线相连接,很大程度上节省焊接的时间,并且让板子看起来更加整洁、美观。

除了学会很多东西以为,也发现了自己的不足。由于自己在这一方面只是的短缺,所以很多问题都需要查阅资料或者向别的同学请教。比如说proteus和keil的使用方法,都是看着别人操作几遍之后才慢慢学会。还有在焊接这一方面也存在着很大问题。由于焊接在万能板反面,所以有时候会把单片机的引脚看错,然后用吸枪慢慢清理。这不仅浪费时间而且还可能破坏万能板。在焊接过程中还出现短路问题,一不小心锡丝用多了就有可能造成两个点之间的短路问题,这一点说明了焊接能力还有待提升。

实验的结果是成功的,模拟出了交通灯的功能,各个按键的功能也和模拟时一致,看着数字的跳动自己信息也感到十分开心。虽然想过在这个交通灯里加入一些额外的功能,但终究由于自己知识的局限性而放弃,有点遗憾,不过能够学到东西就好。此次试验增长了自己的单片机知识外也让我知道实践和理论学习的差别。实践过程中学到的知识自己记得会更加牢固一些,不容易忘记。总的来说,单片机的制作让我收获不小。

附1 源程序代码

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar data buf[4];

uchar data sec_dx=20;//东西数默认

uchar data sec_nb=30;//南北默认值

uchar data set_timedx=20;

uchar data set_timenb=30;

int n;

uchar data b;//定时器中断次数

sbit k1=P1^6;//定义5组开关

sbit k2=P1^7;

sbit k3=P2^7;

sbit k4=P3^0;

sbit k5=P3^1;

sbit Yellow_nb=P2^5; //南北黄灯标志

sbit Yellow_dx=P2^2; //东西黄灯标志

sbit Green_nb=P2^4;

sbit Green_dx=P2^1;

sbit Buzz=P3^7;

bit Buzzer_Indicate;

bit time=0;//灯状态循环标志

bit set=1;//调时方向切换键标志

uchar code table[11]={ //共阴极字型码

0x3f, //--0

0x06, //--1

0x5b, //--2

0x4f, //--3

0x66, //--4

0x6d, //--5

0x7d, //--6

0x07, //--7

0x7f, //--8

0x6f, //--9

0x00 //--NULL

};

//函数的声明部分

void delay(int ms);//延时子程序

void key();//按键扫描子程序

void key_to1();//键处理子程序

void key_to2();

void key_to3();

void display();//显示子程序

void logo(); //开机LOGO

void Buzzer();

//主程序

void main()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯

sec_nb=sec_dx+5;

while(1)

{

key(); //调用按键扫描程序

display(); //调用显示程序

Buzzer();

}

}

//函数的定义部分

void key() //按键扫描子程序

{

if(k1!=1)

{

delay(10);

if(k1!=1)

{

while(k1!=1)

{

key_to1();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k2!=1)

{

delay(10);

if(k2!=1)

{

while(k2!=1)

{

key_to2();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k3!=1)

{

TR0=1; //启动定时器

Buzzer_Indicate=0;

sec_nb=set_timenb; //从中断回复,仍显示设置过的数值

sec_dx=set_timedx;

if(time==0)

{ P2=0X99;sec_nb=sec_dx+5; }

else { P2=0xC3;sec_dx=sec_nb+5; }

}

if(k4!=1)

{

delay(5);

if(k4!=1)

{

while(k4!=1);

set=!set;

}

}

if(k5!=1)

{

delay(5);

if(k5!=1)

{

while(k5!=1)

key_to3();

}

}

}

void display() //显示子程序

{

buf[1]=sec_dx/10; //第1位 东西秒十位

buf[2]=sec_dx%10; //第2位 东西秒个位

buf[3]=sec_nb/10; //第3位 南北秒十位

buf[0]=sec_nb%10; //第4位 南北秒个位

P1=0xff; // 初始灯为灭的

P0=0x00;

P1=0xfe; //片选LCD1

P0=table[buf[1]];

delay(1);

P1=0xff;

P0=0x00;

P1=0xfd; //片选LCD2

P0=table[buf[2]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xfb; //片选LCD3

P0=table[buf[3]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xf7;

P0=table[buf[0]]; //片选LCD4

delay(1);

}

void time0(void) interrupt 1 using 1 //定时中断子程序

{

b++;

if(b==19) // 定时器中断次数

{ b=0;

sec_dx--;

sec_nb--;

if(sec_nb<=5&&time==0) //东西黄灯闪

{ Green_dx=0;Yellow_dx=!Yellow_dx;}

if(sec_dx<=5&&time==1) //南北黄灯闪

{ Green_nb=0;Yellow_nb=!Yellow_nb;}

if(sec_dx==0&&sec_nb==5)

sec_dx=5;

if(sec_nb==0&&sec_dx==5)

sec_nb=5;

if(time==0&&sec_nb==0)

{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}

if(time==1&&sec_dx==0)

{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}

}

}

void key_to1() //键盘处理子程序之+

{

TR0=0; //关定时器

if(set==0)

set_timenb++; //南北加1S

else

set_timedx++; //东西加1S

if(set_timenb==100)

set_timenb=1;

if( set_timedx==100)

set_timedx=1; //加到100置1

sec_nb=set_timenb ; //设置的数值赋给东西南北

sec_dx=set_timedx;

}

void key_to2() //键盘处理子程序之-

{

TR0=0; //关定时器

if(set==0)

set_timenb--; //南北减1S

else

set_timedx--; //东西减1S

if(set_timenb==0)

set_timenb=99;

if( set_timedx==0 )

set_timedx=99; //减到1重置99

sec_nb=set_timenb ; //设置的数值赋给东西南北

sec_dx=set_timedx;

}

void key_to3() //键盘处理之紧急车通行

{

TR0=0;

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

}

void int0(void) interrupt 0 using 1 //只允许东西通行

{

TR0=0;

P2=0Xc3;

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

}

void int1(void) interrupt 2 using 1 //只允许南北通行

{

TR0=0;

P2=0X99;

Buzzer_Indicate=0;

sec_nb=00;

sec_dx=00;

}

void logo()//开机的Logo "- - - -"

{ for(n=0;n<50;n++)

{

P0=0x40;

P1=0xfe;

delay(1);

P1=0xfd;

delay(1);

P1=0Xfb;

delay(1);

P1=0Xf7;

delay(1);

P1 = 0xff;

}

}

void Buzzer()

{

if(Buzzer_Indicate==1)

Buzz=!Buzz;

else Buzz=0;

}

void delay(int ms) //延时子程序

{

uint j,k;

for(j=0;j<ms;j++)

for(k=0;k<124;k++);

}

附2 原理图

https://upload.fanwen118.com/wk-img/img100/3580430_9.jpg

更多相关推荐:
单片机交通灯设计报告[1]

河南理工大学电子设计综合训练报告单片机控制的交通灯控制系统设计姓名:***学号:***专业班级:电气本09-2班指导老师:**所在学院:电气工程与自动化学院20XX年4月15日1摘要2系统总体方案及硬件设计12…

单片机交通灯课程设计报告[1]

摘要31引言42总体设计方案521设计思路5211设计目的5212设计任务和内容6213方案比较设计与论证6214芯片简介922设计方框图153设计原理分析16313233交通灯显示时序的理论分析与计算16交通...

单片机交通灯设计报告

单片机课程设计论文前言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不…

单片机交通灯课程设计报告

摘要自从1858年英国人发明了原始的机械扳手交通灯之后随后的一百多年里交通灯改变了交通路况也在人们日常生活中占据了重要地位随着人们社会活动日益增加经济发展汽车数量急剧增加城市道路日渐拥挤交通灯更加显示出了它的功...

单片机交通灯设计报告[1]

单片机控制的交通灯控制系统设计所在学院电气工程与自动化学院目1摘要2系统总体方案及硬件设计121设计要求122设计任务123总体设计124硬件设计13软件设计631总体流程图732子程序流程图833循环控制思路...

基于51单片机的交通灯设计

基于单片机交通灯控制器的设计与实现电控学院交通灯课程设计报告院系电气与控制工程学院专业班级10级测控1班组员屈豆张坡坡学号指导老师20xx年7月日18基于单片机交通灯控制器的设计与实现目录1绪论错误未定义书签1...

51单片机c语言交通灯设计报告

xxxxxxxxx基于AT89S52交通灯设计学院电子信息工程专业班级xxxxxxxxxxxxxx姓名xxxx学号指导老师摘要交通灯在我们日常生活中随处可见它在交通系统中处于至关重要的位置交通灯的使用大大减少了...

基于AT89C51单片机的十字路口交通灯设计(论文)

黄河科技学院课程设计报告书题目交通灯课程单片机课程设计专业数控技术班学指导教师何春霞年011月620xx日摘要近年来随着科技的飞速发展单片机的应用正在不断深入同时带动传统控制检测技术日益更新在实时检测和自动控制...

基于单片机的交通灯设计毕业论文

毕业论文题目基于单片机的交通灯设计系别姓名指导教师单片机交通灯设计摘要近年来随着科技的飞速发展一个以微电子技术计算机技术和通信技术为先导的信息革命正在蓬勃发展计算机技术作为三者之一怎样与实际应用更有效的结合并发...

51单片机综合实验交通灯设计报告

51单片机综合实验交通灯设计报告班级学生姓名学号指导教师一实验题目交通灯控制系统设计二实验目的1学会用8051单片机开发简单的计算机控制系统2学会用汇编语言和C语言开发系统软件3学会8051单片机开发环境wav...

单片机交通灯实验报告

交通灯控制系统设计院系:电子电气工程学院专业:电气自动化班级:P10电气四班成员:*************交通灯控制系统设计实验一.设计目的1.通过本次课程设计进一步熟悉和掌握单片机的结构及工作原理,巩固和加…

单片机交通灯实验报告

交通灯控制系统设计院系电子电气工程学院专业电气自动化班级P10电气四班成员王帅茹旭桐夏振薛佳佳魏光琪刘昌爽指导老师李霞淄博职业学院交通灯控制系统设计实验一设计目的1通过本次课程设计进一步熟悉和掌握单片机的结构及...

单片机交通灯设计报告(36篇)