通过89s51单片机实现交通灯

作者&投稿:毋桦 (若有异议请与网页底部的电邮联系)
用at89s51单片机,怎么做模拟交通灯,请给我一个详细设计的流程。~

遇到紧急情况可以控制。 这个怎么理解?怎么个控制法?是有紧急情况时全部红灯呢还是别的? 追问: 全红 灯亮,谢谢

满意请采纳

仿真实例可以参考,可以直接仿真效果,试试。

汇编版本
SECOND1 EQU 30H ;东西路口计时寄存器
SECOND2 EQU 31H ;南北路口计时寄存器
CARS EQU 32H ;车流量计数寄存器
DBUF EQU 40H ;显示码缓冲区1
TEMP EQU 44H ;显示码缓冲区2
FLAG EQU 45H ;路口状态标志
BUF EQU 46H

BEEPP BIT P2.0
LED_G1 BIT P2.1 ;东西路口绿灯
LED_Y1 BIT P2.2 ;东西路口黄灯
LED_R1 BIT P2.3 ;东西路口红灯
LED_G2 BIT P2.4 ;南北路口绿灯
LED_Y2 BIT P2.5 ;南北路口黄灯
LED_R2 BIT P2.6 ;南北路口红灯
BCD1 BIT P1.0
BCD2 BIT P1.1
BCD3 BIT P1.2
BCD4 BIT P1.3
BCD5 BIT P1.4
BCD6 BIT P1.5

ORG 0000H
LJMP START ;跳转到主函数
ORG 0003H
LJMP INT0_ISR ;跳到外部中断0处理函数
ORG 0013H
LJMP INT1_ISR ;跳到外部中断1处理函数
ORG 001BH
LJMP TIMER1 ;跳到定时器中断处理函数

ORG 0100H ;主函数的开始地址
START: MOV TMOD,#11H ;置T0为工作方式1
MOV TH0,#3CH ;置T0定时初值50ms
MOV TL0,#0B0H
MOV TH1,#3CH ;置T1定时初值50ms
MOV TL1,#0B0H
MOV CARS,#0
SETB TR0 ;启动T0
CLR A
MOV P1,A ;关闭不相关的LED
CLR TF0 ;关闭T0
SETB EA ;打开全局中断
SETB EX0 ;打开外部中断
SETB IT0 ;打开
SETB EX1 ;允许外部中断1
SETB IT1 ;下降沿中断
SETB ET1 ;允许定时器1中断
SETB BEEPP ;关闭蜂鸣器
;***************************************************
;-----------------
LOOP: MOV R2,#20 ;置1s计数初值,50ms*20=1s
MOV R3,#60 ;绿灯亮60s
MOV SECOND1,#60 ;东西路口计时显示初值60s
MOV SECOND2,#68 ;南北路口计时显示初值68s
LCALL STATE1 ;调用状态1

MOV FLAG,#1
MOV CARS,#0
WAIT1: LCALL DISPLAY ;东西方向绿灯
JNB TF0,WAIT1 ;查询50ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值50ms
MOV TL0,#0B0H
DJNZ R2,WAIT1 ;判断1s到否?未到继续状态1
MOV R2,#20 ;置50ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
MOV A,CARS
CJNE A,#100,LOOP1 ;判断车流量是否到达100辆
MOV CARS,#0 ;车流量计数器清零
MOV A,SECOND1 ;增加55s延时
ADD A,#55
MOV SECOND1,A
MOV A,SECOND2 ;增加55s延时
ADD A,#55
MOV SECOND2,A
MOV A,R3 ;增加55s延时
ADD A,#55
MOV R3,A
LOOP1: DJNZ R3,WAIT1
;*******************************************
MOV R2,#5 ;置50ms计数初值 50*4=200
MOV R3,#3 ;绿灯闪3s
MOV R4,#4 ;闪烁间隔200ms
MOV SECOND1,#8 ;东西路口计时显示初值8s
MOV SECOND2,#8 ;南北路口计时显示初值8s
MOV FLAG,#2
WAIT2: LCALL DISPLAY
LCALL STATE2 ;调用状态2
JNB TF0,WAIT2 ;查询50ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值50ms
MOV TL0,#0B0H
DJNZ R4,WAIT2 ;判断200ms到否?未到继续状态2
CPL LED_G1 ;东西绿灯闪
MOV R4,#4 ;闪烁间隔200ms
DJNZ R2,WAIT2 ;判1s到否?未到继续状态2
MOV R2,#5 ;置50ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
DJNZ R3,WAIT2 ;状态2维持3s
;****************************************
MOV R2,#20 ;置50ms计数初值
MOV R3,#5 ;黄灯闪2s
MOV SECOND1,#5 ;东西路口计时显示初值5s
MOV SECOND2,#5 ;南北路口计时显示初值5s
MOV FLAG,#3
WAIT3: LCALL DISPLAY
LCALL STATE3 ;调用状态3
JNB TF0,WAIT3 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R2,WAIT3 ;判断1s到否?未到继续状态3
MOV R2,#20 ;置100ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
DJNZ R3,WAIT3 ;状态3维持2s
;*******************************************
MOV R2,#20 ;置50ms计数初值
MOV R3,#60 ;红灯闪60s
MOV SECOND1,#68 ;东西路口计时显示初值68s
MOV SECOND2,#60 ;南北路口计时显示初值60s
MOV FLAG,#4
MOV CARS,#0
WAIT4: LCALL DISPLAY ;南北方向绿灯
LCALL STATE4 ;调用状态4
JNB TF0,WAIT4 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R2,WAIT4 ;判断1s到否?未到继续状态4
MOV R2,#20 ;置100ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
MOV A,CARS
CJNE A,#100,LOOP2 ;判断车流量是否到达100辆
MOV CARS,#0
MOV A,SECOND1 ;增加55s延时
ADD A,#55
MOV SECOND1,A
MOV A,SECOND2 ;增加55s延时
ADD A,#55
MOV SECOND2,A
MOV A,R3 ;增加55s延时
ADD A,#55
MOV R3,A
LOOP2: DJNZ R3,WAIT4
;*******************************************
MOV R2,#5 ;置50ms计数初值
MOV R4,#4 ;红灯闪20ms
MOV R3,#3 ;绿灯闪3s
MOV SECOND1,#8 ;东西路口计时显示初值8s
MOV SECOND2,#8 ;南北路口计时显示初值8s
MOV FLAG,#5;
WAIT5: LCALL DISPLAY
LCALL STATE5 ;调用状态5
JNB TF0,WAIT5 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
DJNZ R3,WAIT5 ;状态5维持5s
;****************************************
MOV R2,#20 ;置50ms计数初值
MOV R3,#5 ;黄灯闪5s
MOV SECOND1,#5 ;东西路口计时显示初值5s
MOV SECOND2,#5 ;南北路口计时显示初值5s
MOV FLAG,#6
WAIT6: LCALL DISPLAY
LCALL STATE6 ;调用状态6
JNB TF0,WAIT6 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R2,WAIT6 ;判断1s到否?未到继续状态6
MOV R2,#20 ;置100ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
DJNZ R3,WAIT6 ;状态6维持5s
LJMP LOOP ;大循环
;**********************************************
STATE1: ;状态1
SETB LED_G1 ;东西路口绿灯亮
CLR LED_Y1
CLR LED_R1
CLR LED_G2
CLR LED_Y2
SETB LED_R2 ;南北路口红灯亮
RET
STATE2: ;状态2
CLR LED_Y1
CLR LED_R1
CLR LED_G2
CLR LED_Y2
SETB LED_R2 ;南北路口红灯亮
RET
STATE3: ;状态3
CLR LED_G1
CLR LED_R1
CLR LED_G2
CLR LED_Y2
SETB LED_R2 ;南北路口红灯亮
SETB LED_Y1 ;东西路口黄灯亮
RET
STATE4: ;状态4
CLR LED_G1
CLR LED_Y1
SETB LED_R1 ;东西路口红灯亮
SETB LED_G2 ;南北路口绿灯亮
CLR LED_Y2
CLR LED_R2
RET
STATE5: ;状态5
CLR LED_G1
CLR LED_Y1
SETB LED_R1 ;东西路口红灯亮
CLR LED_Y2
CLR LED_R2
RET
STATE6: ;状态6
CLR LED_G1
CLR LED_Y1
SETB LED_R1 ;东西路口红灯亮
CLR LED_G2
CLR LED_R2
SETB LED_Y2 ;南北路口黄灯亮
RET
DISPLAY: ;数码显示
MOV DPTR,#LEDMAP ;数据指针指向LEDMAP
MOV A,SECOND1 ;显示数据移到A累加器
MOV B,#10 ;10移到B累加器
DIV AB ;A除以B
MOVC A,@A+DPTR ;将相应显示自己移到A
MOV P0,A ;显示十位
CLR BCD1 ;
ACALL DELAY
SETB BCD1
MOV A,B
MOVC A,@A+DPTR ;显示个位
MOV P0,A
CLR BCD2
ACALL DELAY
SETB BCD2

MOV A,SECOND2
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P0,A
CLR BCD3
ACALL DELAY
SETB BCD3
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
CLR BCD4
ACALL DELAY
SETB BCD4

MOV A,CARS ;车流量计数显示
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P0,A
CLR BCD5
ACALL DELAY
SETB BCD5
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
CLR BCD6
ACALL DELAY
SETB BCD6
RET

;-----------------
DELAY: MOV R7,#40 ;延时子程序
D1: MOV R6,#20
D2: DJNZ R6,D2
DJNZ R7,D1
RET

;-----------------
KEYDELAY:
MOV R7,#200 ;延时子程序
D3: MOV R6,#100
D4: DJNZ R6,D2
DJNZ R7,D1
RET

;-----------------
BEEP:
SETB TR1 ;打开定时器1
CLR BEEPP ;打开蜂鸣器
RET

;-----------------
INT0_ISR:
LCALL KEYDELAY ;调用按键延时,去抖动
MOV A,FLAG ;检测当前状态
CJNE A,#1,WARM0 ;如果东西方向不是绿灯,打开蜂鸣器
INC CARS ;车流量计数加1
JMP OUT0
WARM0: CALL BEEP
OUT0:
RETI

;-----------------
INT1_ISR:
LCALL KEYDELAY ;调用按键延时,去抖动
MOV A,FLAG ;检测当前状态
WARM1: CALL BEEP
OUT1:
RETI

;-----------------
TIMER1: ;蜂鸣器响3s
;关闭定时器1
MOV TH1,#3CH ;置T1定时初值50ms
MOV TL1,#0B0H
INC BUF ;计数器加1
SETB TR1 ;打开定时器1
MOV A,BUF
CJNE A,#60,OUT2 ;计数器数值到60,则关闭蜂鸣器
SETB BEEPP
CLR TR1 ;关闭定时器1
MOV BUF,#0 ;计数器清零
OUT2: RETI
;-----------------
LEDMAP: ;共阳数码管显示
DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h,0BFh
END

1,用单片机控制红绿灯,51单片机输出口只能提供几十毫安的电流,不能直接驱动红绿灯,,所以需要将单片机的I/O信号进行放大,,
2放大器可以用大功率可控硅,或晶体管,,也可以用继电器。由具体情况而定。
3,编程序先要确定程序的走向和逻辑关系,可以用流程图,状态表,来分析,,
4,确定程序的各种变量,和输入输出端口。。
-------------------------------------------------------
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

uint k;
sbit east_red=P1^0;
sbit east_green=P1^1;
sbit east_yellow=P1^2;
//--上面是东西向红,绿,黄灯,依次对应,P1.0,P1.1,P1.2//
sbit south_red=P1^3;
sbit south_green=P1^4;
sbit south_yellow=P1^5;
//--上面是南北向红,绿,黄灯,依次对应,P1.3,P1.4,P1.5//
dealy(k)
{uint i;uint h;h=k*100000;for(i=0;i<h;i++);}//计时器子程序//
main()
{uchar a=0;
east_red=south_green=0;dealy(150);
east_green=south_red=1;
//东西红灯亮南北绿灯亮15s//
south_green=1;
while(a<5)
{south_yellow=0;dealy(5);
south_yellow=1;dealy(5);a++;}//南北黄灯显5S//
south_red=east_green=0;
south_green=east_red=1;
dealy(150);//南北绿灯亮,东西红灯亮15S//
east_green=1;
a=0;
while(a<5)
{east_yellow=0;dealy(5);
east_yellow=1;dealy(5);a++;}//东西黄灯显5S//
while(1);
}

把邮箱给我,我来给你做一个。或者你看看
http://www.zsmcu.net/?fromuid=7414这个网站,里面有很多高手

看看我做的,我发给你程序!
http://v.youku.com/v_show/id_XMjIxNzMzMzE2.html

这个我来帮帮你吧!!看到后赶紧回复


使用89s51 单片机内部内部程序存储器,通过并行口 P0 和 P2 扩展空间多 ...
89S51是一种常见的8位单片机,它内部有4KB的程序存储器(Flash存储器)。通过使用并行口P0和P2,可以扩展该单片机的存储空间。具体而言:P0口:P0口是一个8位的并行输入\/输出口。通过利用P0口,可以扩展额外的256个字节的存储空间(1字节=8位)。P2口:P2口同样是一个8位的并行输入\/输出口。通过利用...

通过89s51单片机实现交通灯
通过89s51单片机实现交通灯东西红灯亮南北绿灯亮15s,东西红灯亮南北黄灯闪烁5s,东西绿灯亮南北红灯亮15s,东西等闪烁南北红等亮5s的循环控制点亮,选用单片机I\/O口的线控制各盏灯。... 通过89s51单片机实现交通灯东西红灯亮南北绿灯亮15s,东西红灯亮南北黄灯闪烁5s,东西绿灯亮南北红灯亮15s,东西等闪烁南北红等亮5s的循...

89s51单片机有哪几个中断源?对应的中断入口地址是什么?
AT89s51单片机有5个中断源,外部中断0(INT0),入口地址0003H,中断号0(interrupt0)。定时器0中断(T0),入口地址000BH,中断号1(interrupt1)。外部中断1(INT1),入口地址0013H,中断号2(interrupt2)。定时器1中断(T1),入口地址001BH,中断号3(interrupt3)。串行中断(RI\/TI),入口...

89S51单片机的简介
89S51相对于89C51增加的新功能包括:-- 新增加很多功能,性能有了较大提升,价格基本不变,甚至比89C51更低!-- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作 环境中剥离.是一个强大易用的功能.-- 最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具...

89s51单片机有哪几个中断源?对应的中断入口地址是什么?
定时器1:入口:001BH 串口中断:入口:0023H AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造。兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和...

89S51单片机详细介绍
89S51 单片机 MCS-51 单片机是美国INTE 公司于1980 年推出的产品,典型产品有 80 31(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51 的5 倍,实际使用方面已经被市场淘汰)和8751 等通用产品,一直到现在, MCS-5 1 内核系列兼容的单片机仍是应用 的主流产品(比如目前流行...

89s51单片机复位后cpu使用的是哪一组工作寄存器
第0组。89s51单片机复位后,cpu使用的是第0组工作寄存器,它们的字节地址为00h-07h,cpu通过标志寄存器中的rs1、rs0两位状态确定和改变当前工作寄存器组。

89s51单片机采用何种方式区分内外程序存储器及内外数据存储器_百度知 ...
是通过不同的汇编命令来区分内外数据存储器的,就是说汇编MOVX指令会自动调用外部数据存储器,MOV命令调用内部RAM。[EA]\/VPP (Pin 31)在[EA]接低电平时,单片机只访问外部程序存储器,寻址最大64KB外部程序存储器空间。当[EA]接高电平时,单片机既能访问内部程序器又能访问外部存储器,并根据指令的...

AT89S51单片机的内部资源有哪些,分别是怎么使用的?
就是把你在电脑上写出来来的代码用汇编器等编译器生成的一个目标烧写到单片机的eprom里面去的工具,80c51这种类型的单片机编程是一件很麻烦的事情,必要要先装到编程器上编程后才能在设备上使用,而目前最新的89s51单片机居然在线编程(isp)功能,不用拔出来利用简单的电路就可以实现把代码写入单片机内部,本站有详细的...

9单片机,AT89S51单片机中既可位寻址又可字节寻址的单元是
A20H89s51单片机中可位寻址和字节寻址的范围为20H~2FH,共128位。内部存储器地址为00H~FFH,而00H~7FH低128字节是RAM区,都是字节寻址的。其中权20H~2FH,共16个字节的RAM,即可以位寻址,也可以字节寻址。单片机具有体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使用方便等优点,用...

高碑店市14747998129: 单片机89S51做红绿灯的程序?
舒耐法可:#include "reg51.h" #define UINT unsigned int #define ULONG unsigned long #define UCHAR unsigned char

高碑店市14747998129: 最简单的单片机制作交通灯需要的元器件 -
舒耐法可: 89S5111.0592M 晶振1K电阻 、10UF电容12个灯,红、黄、绿各四个,12个1K电阻 ,十字路口嘛.蜂鸣器一个.按键一个,按键复位 采用AT89s51型号的单片机,由于交通十字路口的对称性,所以一个引脚可以同时控制两个灯,将发光二极管分别接到P1各个引脚,在其中加入一个时振荡当电路,来控制时间,在P3.0引脚接入蜂鸣器只黄灯亮的时候发出声响,这里我们让每次黄灯亮的时候发出六声响,通过C程序的控制就可以实现,每次循环是10秒.

高碑店市14747998129: 用51单片机做交通信号灯 -
舒耐法可: 有以下可能的原因:1、51单片机高电平驱动能力较小,建议低电平点亮,也就是说二极管接正.2、启动电路(第9脚)有没有接到一个阻容电路上?99脚悬空,程序可能乱跑的.

高碑店市14747998129: 用单片机做交通灯怎么实现紧急情况都亮红灯? -
舒耐法可: 设置一个紧急按键,接在P3.2,然后用单片机的外部中断0.当按键按下,进入中断程序,让各各方向的红灯点亮就可以了

高碑店市14747998129: 单片机控制交通灯的程序怎么写? -
舒耐法可: 十字路口东西向和南北向都有红、黄、绿三种颜色的灯,东西向绿灯和南北向红灯同时亮50秒(最后的十秒要用LED显示倒计时)后,两个方向的黄灯亮3秒,;然后东西向红灯和南北向绿灯同时亮50秒(最后的十秒要用LED显示倒计时)后,两个方向的黄灯再亮3秒,如此实现循环.(注:我交通灯接的是P1口,LED的a、b、c、d、e、f、g端接的是P0口,接地是P2.6和P2.7)

高碑店市14747998129: 基于51单片机的红绿灯原理
舒耐法可: 注p0口为东西红灯; p1口为东西黄灯;p2口为东西绿灯;p3南北红灯;p4南北黄灯;p5南北绿灯;绿灯停留3s;黄灯闪烁5次,每次0.2s,红的停留4s ORG 0000HLJMP MAINORG 0030HMAIN:MOV DPTR,#B1MOV R2,#4MOV A,#0HF3:MOV ...

高碑店市14747998129: 单片机编程:设计十字路口交通灯,以最常用的两条线路的交通信号控制为例. -
舒耐法可: ORG 0000H MAIN:MOV DPTR,#0FF20H MOV A,#03H MOVX @DPTR,A MOV 2AH,#1FH MOV P1,#0CH MOV R7,#19H PRG1: LCALL DELAY1 DJNZ R7,PRG1 MOV P1,#0AH MOV R7,#05H PRG2: LCALL DELAY1 DJNZ R7, PRG2 MOV P1,#...

高碑店市14747998129: 怎么实现单片机的交通灯自动控制 -
舒耐法可: 设计电路、编写程序.

高碑店市14747998129: 利用51单片机模拟交通灯控制,怎么用数码管显示出来 -
舒耐法可: 这最好用静态显示,只需要扩展74HC595即可,每个74HC595可以显示一位数字,它们级联,所以一般只需要4根IO口线即可.老的方案使用74LS164,不过切换时有闪动.

高碑店市14747998129: 单片机控制的交通灯系统设计毕业设计论文 要求:设计一个十字路口的交通灯控制系统,交通灯的方向包含直行 -
舒耐法可: 3.交通灯 要求:(1) 完成一个十字路口的交通灯控制,基本功能实现双向直行;(2) 每个方向用2位数码管显示倒计时,倒计时时间最大为99秒;(3) 能修改每个方向的红、绿灯时间.扩展功能: 能实现直行、左行.提示:数码管用两个2...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网