导航:首页 > 操作系统 > 单片机交通信号灯

单片机交通信号灯

发布时间:2022-01-17 22:55:05

A. 单片机AT89C51 交通信号灯

用汇编,编写的程序如下,经过了仿真调试,在12MHz的条件下,通过.
ORG 0000H
MOV P0, #01111011B ;P0.7=P0.2=0, 东西 南北 都是红灯.
LCALL DL3S
LOOP:
MOV P0, #11011011B ;P0.5=P0.2=0, 南北绿 东西红.
LCALL DL15S
MOV P0, #10111011B ;P0.6=P0.2=0, 南北黄 东西红.
LCALL DL3S
MOV P0, #01111110B ;P0.7=P0.0=0, 南北红 东西绿.
LCALL DL15S
MOV P0, #01111101B ;P0.7=P0.1=0, 南北红 东西黄.
LCALL DL3S
SJMP LOOP

DL15S:
MOV R2, #5
DL2:
CALL DL3S
DJNZ R2, DL2
RET

DL3S: ;延时3s,实测3.03s
MOV R5, #23
DL3:
MOV R6, #0
DL4:
MOV R7, #0
DL5:
DJNZ R7, DL5
DJNZ R6, DL4
DJNZ R5, DL3
RET
END

B. 单片机控制的交通灯信号

按你的要求已经将程序写完
ProteUS仿真调试通过
仿真工程下载地址:http://ishare.iask.sina.com.cn/f/8000899.html

C. 关于单片机交通信号灯的问题

是把0000 1100放入P1的意思,它那每个灯都接到P1的某个引脚,这具体的是把什么数放入P1和你的硬件连接有关系。

D. 求用51单片机做的交通信号灯的C51程序,要求如下:

SNF EQU 00H ;;;南北通行标志位EWF EQU 01H ;;;东西通行标志位URF EQU 02H ;;;紧急事件标志位ORG 0000HLJMP MAIN ;;;上电转主程序ORG 000BH ;;;定时中断入口LJMP DSZD ORG 0003H ;;;紧急中断入口LJMP URZDORG 0030H MAIN: LCALL INIT ;;;调用初始化子程序LOOP: LCALL DIS ;;;循环执行显示子程序 AJMP LOOP;///////////初始化程序INIT: SETB SNF SETB EWF SETB URF MOV R2,#20 ;;;定时器中断20次为1s MOV TMOD,#01H ;;;初始化定时器 MOV TL0,#0B0H MOV TH0,#3CH SETB EA ;;;开定时中断与紧急中断 SETB ET0 SETB TR0 SETB EX0 SETB IT0 ;;;设置中断程控方式 MOV DPTR,#TAB ;;;数值首地址放入DPTR中 MOV 40H,#40 ;;;东南西北通行时间设置 MOV 41H,#40 MOV 30H,#40 ;;;通行时间初始化 MOV 31H,#60 MOV P0,#4CH ;;;初始化时南北通行并把交通灯状态分别放在32H和33H中 MOV 32H,#4CH MOV P2,#15H MOV 33H,#15H RET;////////////显示子程序DIS: MOV P3,#0DFH ;;;选中南北方向的十位数码管 MOV A,30H ;;;把显示数据送人数码管显示 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A ;;; LCALL D1MS MOV P3,#0EFH ;;;选中南北方向的个位数码管 MOV A,B ;;;送入数码管显示 MOVC A,@A+DPTR MOV P1,A LCALL D1MS
MOV P3,#7FH ;;;选中第东西方向的十位数码管 MOV A,31H ;;;送入数码管显示 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A LCALL D1MS MOV P3,#0BFH ;;;选中第东西方向的个位数码管 MOV A,B MOVC A,@A+DPTR MOV P1,A LCALL D1MS SETB P3.0 SETB P3.1 JNB P3.0,DIS_S ;;;查询是否第一个按键按下 JNB P3.1,DIS_E ;;;查询是否第二个按键按下 AJMP DIS_R ;;;没有键按下则返回DIS_S:LCALL D5MS ;;;按键去抖 JNB P3.0,DIS_SN AJMP DIS_R DIS_SN:MOV 40H,#50 ;;;对通行时间从新分配,南北通行时间加长 MOV 41H,#30 AJMP DIS_RDIS_E:LCALL D5MS ;;;按键去抖 JNB P3.1,DIS_EW AJMP DIS_RDIS_EW:MOV 40H,#30 ;;;东西通行时间加长 MOV 41H,#50DIS_R:RET ;///////定时中断处理程序DS_C: LJMP DS_R ;;;接力跳转DSZD: PUSH ACC ;;;保护现场 PUSH PSW CLR TR0 ;;;关定时器及中断标志位并重新赋值 CLR TF0 MOV TL0,#0B0H MOV TH0,#3CH DJNZ R2,DS_C ;;;判断1m时间是否到达 MOV R2,#20 ;;;到达重新赋值 DEC 30H ;;;南北方向通行时间减一 MOV A,30H ;;;把减一后的时间送入显示存储单元;;;;;;;南北通行到达最后4秒时黄灯闪烁DS_10:CJNE A,#4,DS_11 ;;;如果通行时间剩余4秒 JNB SNF,DS_11 ;;;判断是否是南北通行 MOV P0,#8AH MOV 32H, #8AH ;;;把交通灯状态存入存储单元(后面类似)DS_11:CJNE A,#3,DS_12 ;;;不是剩余3秒,返回 JNB SNF,DS_12 ;;;不是南北通行时间,返回 MOV P0,#88H MOV 32H, #88HDS_12:CJNE A,#2,DS_13 JNB SNF,DS_13 MOV P0,#8AH MOV 32H, #8AH DS_13:CJNE A,#1,DS_14 JNB SNF,DS_14 MOV P0,#88H MOV 32H, #88H;------------------------DS_14:JNZ DS_NE ;;;通行时间没有结束转向改变东西方向的数码管 CPL SNF ;;;如果通行时间结束则对标志位取反 JNB SNF,DS_1 ;;;判断是否南北通行 MOV 30H,40H ;;;是,点亮相应的交通灯 MOV P0,#4CH MOV 32H,#4CH ;;;存储交通灯状态 MOV P2,#15H MOV 33H, #15H ;;;存储交通灯状态DS_NE:DEC 31H ;;;东西方向通行时间减一 MOV A,31H ;;;把通行剩余时间送入显示存储单元;;;;;;;;东西方向通行时间剩余4秒钟黄灯闪烁(程序注释与南北方向类似 略)DS_20:CJNE A,#4,DS_21 JB EWF,DS_21 MOV P0,#51H MOV 32H, #51HDS_21:CJNE A,#3,DS_22 JB EWF,DS_22 MOV P0,#41H MOV 32H, #41HDS_22:CJNE A,#2,DS_23 JB EWF,DS_23 MOV P0,#51H MOV 32H, #51HDS_23:CJNE A,#1,DS_24 JB EWF,DS_24 MOV P0,#41H MOV 32H, #41H;-----------------------------DS_24:JNZ DS_R ;;;东西方向时间没有结束,返回 CPL EWF ;;;对通行状态取反 JNB EWF,DS_2 ;;;东西方向通行时间到来,跳转 MOV 31H,#80 ;;;东西方向通行结束,重新显示时间 MOV P0,#89H ;;;点亮相应的交通灯 MOV 32H, #89H MOV P2,#29H MOV 33H, #29H AJMP DS_R DS_1: MOV 30H,#80 ;;;南北通行时间结束,重新对显示存储单元赋值 MOV P0,#89H ;;;执行转弯状态1 MOV 32H, #89H MOV P2,#26H MOV 33H, #26H AJMP DS_NE DS_2: MOV 31H,41H ;;;东西方向开始通行,赋值予显示

E. 单片机AT89C51交通信号灯控制设计程序和图

仿真实例可以参考一下,试试

F. 单片机交通信号灯设计

去研究一下汇编语言吧.这种东西是教不会的.

G. 如何用c语言编程在单片机上做交通信号灯

硬件电路设计

此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。

(1)电路连接图:

三、软件程序(C语言)

以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。

//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机;24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373锁存器控制端定义
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函数声明end
//***********************//延时子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}

}
//**********************//延时子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行时,延时20秒
p2=0x09;//南北红灯亮
p3=0x24;//东西绿灯亮

while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}

}

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

p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//

p2=0x24;//南北绿灯亮
p3=0x09;//东西红灯亮

while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}

p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黄灯闪烁三秒完毕
}

voidmain()//主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各端口
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//关闭所有交通灯
}
}

}
}

H. 基于单片机的交通信号灯控制系统

红黄蓝共12灯,单片机上IO口足矣,所以不用扩展,直接接上12个8050驱动继电器。
如果你要加上倒计时,则需8个数码管,所以还要加上一片138做扫描口,数码管驱动可以找专门的驱动芯片,有数码管译码器,型号忘了自己找找吧。
这样,编好程序,放大功率,你就做出来了。
软件如楼上所说,运用定时即可。

I. 用单片机设计制作一个模拟的十字路口交通信号灯控制系统。

摘 要

在日常生活中,交通信号灯的使用,使交通得以有效管理,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。交通灯控制系统由80C51单片机、键盘、LED显示、交通灯延时组成。系统除具有基本交通灯功能外,还具有时间设置、LED信息显示功能,市交通实现有效控制。

关键字:交通灯;单片机;自动控制;LED

Abstract

In daily life, the use of traffic lights, so traffic can be managed effectively in smoothing traffic flow, increase road capacity and rece traffic accidents have remarkable results. Traffic light control system consists of 80C51 microcontroller, keypad, LED display, traffic light delay component. In addition to the traffic light system has the basic functions, but also with time settings, LED information display function, achieving effective control of city traffic

Key Words:traffic lights; SCM; control; LED

目 录

1 交通灯任务、功能要求说明及总体方案介绍 …………………………………1
1.1 交通灯任务…………………………………………………………………1
1.2 功能要求说明………………………………………………………………1
1.3 设计总体方案介绍及工作原理说明………………………………………2
2 交通灯硬件系统的设计 …………………………………………………………4
2.1 硬件系统各模块功能介绍…………………………………………………4
2.2 电路原理图 ………………………………………………………………5
2.3 电路PCB图 ………………………………………………………………5
2.4 元器件布局图 ……………………………………………………………5
2.5 元器件清单 ………………………………………………………………5
3 交通灯软件系统的设计 …………………………………………………………7
3.1 单片机的使用资源情况 …………………………………………………7
3.2 软件模块功能介绍 ………………………………………………………8
3.3 程序流程图 ………………………………………………………………8
3.4 程序清单 …………………………………………………………………10
4 设计总结…………………………………………………………………………11
4.1 使用说明 …………………………………………………………………11
4.2 误差分析 …………………………………………………………………11
4.3 设计体会 …………………………………………………………………11
4.4 教学建议 …………………………………………………………………12
参考文献 ……………………………………………………………………………13
致 谢 ………………………………………………………………………………14
附录一 电路原理图 ………………………………………………………………15
附录二 电路PCB顶层图 …………………………………………………………16
附录三 电路PCB底层图 …………………………………………………………17
附录四 元器件布局图 ……………………………………………………………18
附录五 元器件清单 ………………………………………………………………19
附录六 程序清单…………………………………………………………………20
1 交通灯任务、功能要求说明及总体方案介绍

1.1 交通灯任务
设计一个具有特定功能的十字路口交通灯。该交通灯上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。按开始键则开始工作,按结束键则返回“P.”状态。要求甲车道和乙车道两条交叉道路上的车辆交替运行,甲车道为主车道,每次通车时间为60秒,乙车道为次车道,每次通车时间为30秒,要求黄灯亮3秒,并且1秒闪烁一次。有应急车辆出现时,红灯全亮,应急车辆通车时间10秒,同时禁止其他车辆通过。
1.2 功能要求说明
本次课程设计在硬件方面的接法如下:P2口接二极管,P2.0、P2.1、P2.2口线分别来控制东西方向的绿灯、黄灯和红灯;P2.3、P2.4、P2.5口线分别控制南北方向的红灯、黄灯和绿灯。P0口作为数码管的位控(这里只用到了P0.0、和P0.1两根口线),P1口作为数码管的段控,P3口作为输入部分(这里用到了P3.0、P3.1、P3.2口线),控制数码管的显示情况和二极管的亮灭情况。
当交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。
当按下启动按钮K1并释放后,数码管显示将会从“60”开始倒计时,每隔一秒减1,此时南北方向开始一直亮绿灯,东西方向一直亮红灯,直到显示为“00”时,数码管将会从“03”开始倒计时,每隔一秒减1,此时南北方向每隔一秒黄灯就闪烁一次,东西方向亮一直红灯,直到显示为“00”时,数码管将会从“30”开始倒计时,此时南北方向一直亮红灯,东西方向一直亮绿灯,直到显示为“00”时,数码管又将从“03”开始倒计时,此时南北方向一直亮红灯,东西方向每隔一秒黄灯就闪烁一次;当没有其他键按下时,交通灯将这样一直循环下去。
当按下结束键K2并释放后,数码管将显示“P.”,东西南北方向无灯亮。
当按下紧急键K3并释放后,数码管将显示“09”,并且每隔一秒就减1,
东西南北方向全部红灯亮。
单片机采用AT89S52,fosc=12MHZ。其按键功能如表1.1所示。

表1.1 按键功能
按键 键名 功能
P3.4 K1键 启动键
P3.7 K2键 结束键
P3.6 K3键 紧急键
1.3 设计总体方案介绍及工作原理说明
1.3.1 总体方案介绍
该交通灯电路由单片机AT98S52、键盘接口电路、显示接口电路、发光二极管控制电路、时钟电路和复位电路构成,原理框图如图1.1所示。
图1.1 原理框图
(1) 电源提供方面
采用独立的稳压电源,此方案的优点是稳定可靠,且有各种成熟电路可供使用。
(2) 显示方面
完全采用数码管显示,用来显示有限符号和数码字符。
(3) 键盘输入方面
直接在I/O口线上接按键开关,因为设计时精简和优化了电路,所以剩余的口资源还比较多。我们共用到了4个按键,分别为:K0、K1、K2、K3。
1.3.2 工作原理
首先时钟电路产生单片机工作时所需要的时钟信号,这是单片机能够正常工作的前提,而单片机有无定时的基础以及定多长的时间,这些还需要我们人为的确定。我是采用10ms延时程序来反复调用来定时,在我们的硬件电路中,按键的键功能程序在中断服务中,在正常情况下会不断运行主程序,当有键按下时,CPU去转去执行中断程序,而中断程序可以执行三种键功能:第一个是十秒倒计时紧急红灯亮;第二个是结束倒计时,显示P.;第三个是重新开始倒计时。其原理是INTO=P3.4&P3.6&P3.7,当有键按下时,外部中断0口线就会变成低电平,通过键扫程序来具体判断到底是哪个键按下,CPU才会去执行中断里面的某个键功能。12个发光二极管是由P0口控制的,P0口与二极管之间串接一个限流电阻使二极管不易烧坏,采用送低电平有效。

2 交通灯硬件系统的设计

2.1 硬件系统各模块功能介绍
2.1.1 显示电路
在本次课程设计中,我们采用的是四位一体共阳数码管。本设计的显示驱动是采用三极管作为驱动。并且,无论是位控线上还是段控线上都串接一个电阻,以提高其输出功率,在这里采用220欧母电阻。
2.1.2 指示灯控制电路
本次课程设计采用P3口控制二极管的发光情况,口线送低电平有效,具体设计如下:P3.2控制东西方向的绿灯,P3.4口控制东西方向的黄灯,P3.5控制东西方向的红灯,P3.1控制南北方向的红灯,P3.7控制南北方向的黄灯,P3.0控制南北方向的绿灯。
2.1.3 键盘控制电路
键盘是最常用的输入设备,是实现人机对话的纽带。按其结构形式可分为非编码键盘和编码键盘。
编码键盘采用硬件方法产生键码。每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。这种键盘使用方便,但硬件较复杂。非编码键盘仅提供按键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统,在单片机控制电路中,可把单片机使用的键盘分为独立式和矩阵式两种。独立式实际上就是一组独立的按键,这些按键可直接与单片机的I/O口连接,即每个按键独占一条口线,这种接法简单。矩阵式键盘也称行列式键盘,因为键的数目较多,所以键按行列组成矩阵。本设计中键盘数目较少,且为安装方便,因此在本设计中采用独立式接法。
按从一个键到键的功能被执行主要应包括两项工作:一是键的识别,即在键盘中找出被按的是哪个键,另一项是键功能的实现。第一项工作是使用接口电路实现的,而第二项工作则是通过执行中断服务程序来完成。具体来说,键盘接口应完成以下操作功能:
(1) 键盘扫描,以判定是否有键被按下(称之为“闭合键”)。
(2) 键识别,以确定闭合键的行列位置。
(3) 产生闭合键的键码。
(4) 排除多键、串键(复键)及去抖动。
以上这些内容通常是以软硬件结合的方式来完成的,即在软件的配合下由接口电路来完成。但具体哪些由硬件哪些由软件完成,要看接口电路的情况。总的原则是,硬件复杂软件就简单,硬件简单软件就得复杂一些。
2.1.4 时钟电路
时钟电路用来产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。通过在芯片的外部XTAL1和XTAL2两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡电路。时钟电路为单片机产生时钟脉冲序列,本设计中采用的晶振频率为12MHz,电容为33pF。
2.1.5 复位电路
复位电路用于产生复位信号,通过RST引脚送入单片机,复位是单片机的初始操作,其主要功能是:为一些专用寄存器设置初始状态、程序状态字PSW清0、程序计数器PC被赋值为0000H等,除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需安装复位键以重新启动。RST引脚是复位信号的输入端,复位信号是高电平有效,完成复位操作共需要24个状态周期,复位结束后,单片机从地址0000H单元开始执行程序,SP为07H,其它寄存器大多数被置为00H,本设计使用频率为12MHz的晶振,所以复位信号持续时间应超过2μs才能完成复位操作。复位电路分为上电复位、按键复位、按键脉冲复位三种,本次课程设计采用的是按键复位。
2.1.6 单片机最小系统
它采用单片机AT89S52芯片,能实现基本I/O口实验,定时计数器实验等等。具有单片机并口的输入、输出的功能特点。
2.2 电路原理图
电路原理图见附录一所示。
2.3 电路PCB图
电路PCB顶层图见附录二所示;
电路PCB顶层图见附录三所示。
2.4 元器件布局图
元器件布局图见附录四所示。
2.5 元器件清单
元器件清单见附录五所示。

3 交通灯软件系统的设计

3.1 单片机的使用资源情况
3.1.1 硬件资源使用说明
 P0口为二极管的控制端
 P1口用作地址/数据总线
 P2口用作地址/数据总线
 P3.4、P3.6、P3.7口线作为键盘输入端
 采用了INTO外部中断
既在AT89S52的P0口用来接十二个发光二极管的阴极,控制其亮与灭,P1口和P2口外接由2个LED数码管(LED1、LED0)构成的显示器,用P2口作LED的段码输出口(P2.0~P2.7对应于LED的a~dp),P1口作LED的位控输出线(P1.1、P1.0分别对应于LED1、LED0),其中在P1的串行口外接2个三极管作为显示驱动,显示为2个数码管(LED0~LED1)进行动态显示。P3口外接三个个按键K1、K2、K3(分别对应于P3.4、P3.7、P3.6口)用于调整显示接口电路。
3.1.2 交通灯的分配表
交通灯的口线分配如表3.1所示,“1”表示送高电平,“0”表示送低电平。
表3.1 交通灯分配表
P0.2 东西绿灯 1 1 0 1
P0.3 东西黄灯 1 1 1 0
P0.4 东西红灯 0 0 1 1
P0.5 南北红灯 1 1 0 0
P0.6 南北黄灯 1 0 1 1
P0.7 南北绿灯 0 1 1 1
控制码 6FH AFH DBH D7H

状态说明 南北放行,东西禁止 南北警告,东西禁止 南北禁止,东西放行 南北禁止,东西放行
3.2 软件模块功能介绍
主程序模块的主要任务是程序的初始化显示“P.P.”,当没任何键按下时,显示模块将一直不变,交通灯全部是熄灭的,当K0键按下并松开后开始倒计时,
其中在时间显示的过程中判断是否有K0、K1和K2键按下,当再次按下K0时,显示将重新开始倒计时,如果是K1按下,将显示“P.”,并且发光二极管全部熄灭,如果是K2按下,数码管将开始十秒倒计时,并且东西南北全部亮起红灯。
3.3 程序流程图
主程序的流程图如图3.1所示,按键判断程序流程图如图3.2所示

图3.1 主程序流程图

图3.2 判断按键程序流程图

3.4 程序清单
程序清单详见附录六 。

4 设计总结

4.1 使用说明
本实验主要是利用单片机AT89S52、数码管和发光二极管组成,整个电路结构比较简单,它能实现以下几个功能:
 时间的显示。
 红黄绿灯的发光与熄灭。
具体操作说明如下: 当交通灯上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。当按下启动按钮K1并释放后,数码管显示将会从“60”开始倒计时,每隔一秒减1,此时南北方向开始一直亮绿灯,东西方向一直亮红灯,直到显示为“00”时,数码管将会从“03”开始倒计时,每隔一秒减1,此时南北方向没隔一秒黄灯就闪烁一次,东西方向亮一直红灯,直到显示为“00”时,数码管将会从“30”开始倒计时,此时南北方向一直亮红灯,东西方向一直亮绿灯,直到显示为“00”时,数码管又将从“03”开始倒计时,此时南北方向一直亮红灯,东西方向每隔一秒黄灯就闪烁一次;当没有其他键按下时,交通灯将这样一直循环下去。当按下结束键K2并释放后,数码管将显示“P.”,东西南北方向无灯亮,当有其它键按下时,就退出,去执行该键的键功能。当按下紧急键K3并释放后,数码管将显示“10”,并且每隔一秒就减1,东西南北方向全部红灯亮,当没亮到显示“00”就有其它键按下时,就退出,执行该键的键功能,当显示到“00”时,就会自动退出中断继续完成主程序。
4.2 误差分析
本次课程设计的误差就在于显示时间,我采用的是调用延时程序来让显示器上数字共显示一秒钟,而循环一次的时间并不仅仅只是2次调用延时程序的时间,其间CPU还执行其它指令,例如说将缓存区的内容送给累加器A、查表指令、将段控码送给P2口等等,因为它们都是微秒级的,而延时程序是毫秒级的,因此在计算的过程中就可以省略了,每次循环除两次调用延时程序外,所用时间为22微秒,而显示一秒钟共循环了50次,因此在显示器上只需要显示1秒数字,事实上多显示了1100微秒,误差率=1.1%。
4.3 设计体会
经过一个多星期的时间,终于完成了这次的课程设计。在这期间,其他同学提出了许多宝贵的意见,使这次设计终于完满成功了。
我觉得作为一名自动化专业的学生,单片机的课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。我认为这个收获应该说是相当大的。
经过这次课程设计,也让我更加深刻的认识到学好单片机的重要意义。当今单片机渗透到我们生活的各个领域比如从导弹的导航装置、飞机上各种仪表的控制、计算机的网络通讯与数据传输、自动控制领域的机器人、智能仪表、医疗器械、工业自动化过程的实时控制和数据处理等等到我们生活中接触到的各种智能IC卡、民用豪华轿车的安全保障系统、录像机、摄像机、全自动洗衣机的控制以及程控玩具、电子宠物等等,这些都离不开单片机。它主要是作为控制部分的核心部件。因此,单片机的学习、开发在各行各业异常重要。在今后的学习中,我会更加努力的学习巩固单片机,为以后的工作打下坚固的基础。
4.4 教学建议
在王韧老师的严格要求与耐心指导下,经过一个学期对单片机技术这门课程的学习,使我对单片机这一技术的应用有了一定的了解,并对单片机的学习产生了浓厚的兴趣。
通过本次单片机控制交通灯的设计,结合本人的学习过程与切身感受向老师提出以下几点教学意见:希望老师以后能够在一开始教这门课的时候就让整个班分好小组,让那些对单片机比较熟悉的同学帮助基础较差的同学,那样可以提高学习的效率与热情;另外,王老师可以多介绍些与单片机相关的资料书给学生,培养学生查阅资料书的能力;最后一点,就是王老师在单片机扩展方面不必讲解的过细,重点在于引导思路,形成单片机的整体框架结构。

附录一 电路原理图

附录二 PCB顶层图

附录三 PCB底层图

附录四 元器件布局图

附录五 交通灯元器件清单

元器件及材料名称 规格 数目 备注
AT89S52加底座 1
四位一体共阳数码管加底座 2 0.5寸
晶振 12MHz 1 三晶
发光二极管 大个的 9
单排插 40脚 1
三极管 9012 9
蜂鸣器 1 5V
小按键 9 6*6*4.3mm
下载口座子 十芯 1 FC-10P
18b20温度传感器 1
六脚按键开关 1 6*6*4.3mm
Usb电源线加接口 1 USB线加USB接口
电阻 200 1
电阻 4.7K 1
电阻 1K 3
电阻 470 24
电解电容 22uf 1
瓷片电容 33pf 2
排阻 10k 2
短路帽 3
杜邦线8P 1
PCB板子 150mm*200mm 1
电源白色插座 1

附录六 程序清单

ORG 0000H
LJMP MAIN
ORG 001BH
LJMP LOOP1
ORG 0030H
MAIN: MOV PSW, #00H; 初始化
MOV SP, #7FH
MOV TMOD, #10H;
MOV TH1, #3CH;
MOV TL1, #0B0H;
MOV TH0, #0FCH;
MOV TL0, #18H;
MOV 78H, #11H;
MOV 79H, #10H;
MOV 7AH, #10H;
MOV 7BH, #10H;
MOV 7CH, #10H;
MOV 7DH, #10H;
MOV 7EH, #10H;
MOV 7FH, #10H;
MOV R7, #0FAH;
MOV R6, #32H;
MOV R5, #05H;
MOV R4, #39H;
MOV R1, #20;
SETB EA;
SETB ET1;
PP: LCALL DIR;
START: LCALL KEY;
JB 20H.0, K0;
LJMP PP;
K0: MOV R4, #39H;
MOV R1, #20;
SETB TR1;
MOV 78H, #07H;
MOV 79H, #05H;
MOV 7AH, #10H;
MOV 7BH, #10H;
MOV 7CH, #10H;
MOV 7DH, #10H;
MOV 7EH, #10H;
MOV 7FH, #10H;
LCALL DIR;
CYCLE0: MOV P3, #0DEH;主绿副红
JB 20H.2, OUT;
KK0: JB 20H.1, JINJI;

CJNE R4, #00, CYCLE0;延时60秒
MOV R4, #03H;

MOV 78H, #03H;
MOV 79H, #00H;
CYCLE1: MOV P3, #0DFH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #10, CYCLE1;
CYCLE2: MOV P3, #0DDH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #20, CYCLE2;
CJNE R4, #00H, CYCLE1;
MOV R4, #1EH;

MOV 78H, #07H;
MOV 79H, #02H;
CYCLE3: MOV P3, #0F3H;主红副绿
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R4, #00, CYCLE3;延时30秒
MOV R4, #03H;

MOV 78H, #03H;
MOV 79H, #00H;
CYCLE4: MOV P3, #0DFH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #10, CYCLE4;
CYCLE5: MOV P3, #0DDH;
JB 20H.2, OUT;
JB 20H.1, JINJI;
CJNE R1, #20, CYCLE5;
CJNE R4, #00H, CYCLE4;
MOV R4, #39H;
LJMP K0;

JINJI: MOV R4, #10;紧急车辆按键
CYCLE6: MOV P3, #0DBH
CJNE R4, #00, CYCLE6;
LJMP K0;

OUT: MOV P3, #0FFH;
MOV 78H, #11H;
MOV 79H, #10H;
MOV 7AH, #10H;
MOV 7BH, #10H;
MOV 7CH, #10H;
MOV 7DH, #10H;
MOV 7EH, #10H;
MOV 7FH, #10H;
MOV R7, #0FAH;
LJMP PP;

DIR: PUSH DPH; 显示子程序
PUSH DPL;
PUSH ACC;
PUSH PSW;
SETB RS0;
CLR RS1;
MOV R0, #78H;
MOV R3, #0FEH;
MOV A, R3;
LD0: MOV P2, A;
MOV DPTR, #TABLE;
MOV A, @R0;
MOVC A, @A+DPTR;
MOV P0, A;
LCALL DELAY;
INC R0;
MOV A, R3;
JB ACC.7, LD1;
RL A;
MOV R3, A;
LJMP LD0;
LD1: CLR RS0; 恢复当前通用寄存器组组号
CLR RS1;
POP PSW;
POP ACC; 恢复现场
POP DPL;
POP DPH;
RET;

TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H; 0--6
DB 0F8H,80H,90H,88H,83H,0C6H,0A1H; 7--D
DB 86H,8EH,0FFH,0CH; E--F,灭,P.

KEY: LCALL KEYCHULI;键扫程序
JZ EXIT;
LCALL XX0;
LCALL KEYCHULI
JZ EXIT;
MOV B, 20H;
KEYSF: LCALL KEYCHULI;
JZ KEY1;
LCALL XX0;
LJMP KEYSF;
KEY1: MOV 20H, B;
EXIT: RET;

KEYCHULI: MOV P1, #0FFH;
MOV A, P1;
CPL A;
ANL A, #0FH;
MOV 20H, A;
RET;

DELAY: DJNZ R7, DELAY;显示延时子程序
MOV R7, #0FAH;
DJNZ R5, DELAY;
MOV R5, #05H;
RET;

; 定时1秒中断程序:
LOOP1:
MOV TH1, #3CH;定时器0赋初值,定时50ms
MOV TL1, #0B0H;
LCALL DIR;
LCALL KEY;
DJNZ R1, RETURN;
DEC R4;
MOV R1, #20;
MOV R0, #79H;
LCALL DADD1;
RETURN: RETI;

; 去抖延时子程序:
XX0: DJNZ R7, XX0;
MOV R7, #0FAH;
DJNZ R6, XX0;
MOV R6, #32H;
RET;

减一子程序:
DADD1: MOV A, @R0;
DEC R0;
SWAP A;
ORL A, @R0;
SUBB A, #01H;
DA A;
MOV R2, A;
ANL A, #0FH;
MOV @R0, A;
MOV A, R2;
INC R0;
ANL A, #0F0H;
SWAP A;
MOV @R0, A;
RET;

END

J. 单片机交通信号灯控制

很久之前写的,控制时间你自己改,有程序,有仿真,看不懂的到网络HI上找我,常年在,常年隐身,程序如下:

#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

uchart,i;

sbitche_red=P0^0;

sbitche_yellow=P0^1;

sbitche_green=P0^2;

sbitren_red=P0^3;

sbitren_yellow=P0^4;

sbitren_green=P0^5;

delay(uinta)

{

uchari;

while(a--)

for(i=125;i>0;i--);

}

voidinit()

{

EA=1;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

ET0=1;

}

main()

{

P0=0x00;

init();

TR0=1;

while(1);

}

voidtimer0()interrupt1

{

ren_green=0;

che_red=0;

che_green=1;

ren_red=1;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t++;

if(t==50)

{

che_green=0;

for(i=0;i<3;i++)

{

che_yellow=1;

delay(300);

che_yellow=0;

delay(300);

}

ren_red=0;

ren_green=1;

che_red=1;

delay(3000);

t=0;

}

}

阅读全文

与单片机交通信号灯相关的资料

热点内容
怎么申请邮箱的服务器 浏览:13
c项目两个工程怎么编译 浏览:645
知乎app有什么作用 浏览:451
单片机带的比较器 浏览:391
程序员都是精英 浏览:19
10种编程语言 浏览:749
绵阳学驾驶手机上下什么app 浏览:129
python如何模拟网页操作 浏览:40
单片机多文件编译方法 浏览:839
不动产压缩时间 浏览:571
租房管理平台源码 浏览:65
复乐园pdf 浏览:457
程序员找到公交车 浏览:698
婴儿宝宝操有什么APP推荐 浏览:73
如何将数据库附加到服务器上 浏览:391
php退出循环 浏览:479
梦幻西游怎么修改服务器人数上限 浏览:332
自动开启命令 浏览:847
查询云服务器访问的ip 浏览:838
智能app的弱点是什么 浏览:412