基于单片机的交通信号灯模拟控制系统设计

关于基于单片机的交通信号灯模拟控制系统设计的讨论正在各大平台持续发酵,我们精心筛选了最新资讯,希望能为您带来实质性的帮助。

;2位LED数码管显示程序:P0口接数码管段,P2口接数码管位。 P3口接键盘,P1口接发光二极管

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INT0P

ORG 000BH

LJMP T0INT

ORG 0013H

LJMP INT1P

ORG 001BH

LJMP CTC1

ORG 0100H

MAIN: LCALL CSHIH ;初始化

LOOP: LCALL TONGX ;通行路口

LCALL H_BCD2 ;计算(1位HEX转换为2位BCD码)

LCALL YIMA ;译码

LCALL LED4W ;显示

CLR 00H

JNB 00H,$

DJNZ R6,LOOP

MOV R6,#100

JNB 10H,LOOP1 ;启动特殊功能K0

JB 10H,$

LOOP1: JNB 11H,LOOP2 ;启动特殊功能K1

JB 11H,$

NOP

LOOP2: JNB 12H,LOOP3 ;启动特殊功能K2

JB 12H,$

NOP

LOOP3: DJNZ TIME,LOOP

SETB 02H

SJMP LOOP

TONGX: JB 01H,DONGX

JB 02H,HUANG1

MOV P1,#21H

SJMP TX_OUT

HUANG1: MOV P1,#22H

MOV TIME,#1

DJNZ R5,TX_OUT

MOV R5,200

CLR 02H

CPL 01H

MOV TIME,#15

SJMP TX_OUT

DONGX: JB 02H,HUANG2

MOV P1,#0CH

SJMP TX_OUT

HUANG2: MOV P1,#14H

MOV TIME,#1

DJNZ R5,TX_OUT

MOV R5,200

CLR 02H

CPL 01H

MOV TIME,#15

TX_OUT: RET

LED4W: MOV A,XWEI

MOV B,#3

MUL AB

MOV DPTR,#LED4T

JMP @A+DPTR

LED4T: LJMP LD4W1

LJMP LD4W2

LJMP LD4W3

LJMP LD4W4

LD4W1: MOV LEDD,MLED1

MOV LEDW,#1

INC XWEI

SJMP LED4WE

LD4W2: MOV LEDD,MLED2

MOV LEDW,#2

INC XWEI

SJMP LED4WE

LD4W3: MOV LEDD,MLED3

MOV LEDW,#4

INC XWEI

SJMP LED4WE

LD4W4: MOV LEDD,MLED4

MOV LEDW,#8

MOV XWEI,#0

LED4WE: RET

YIMA: MOV R0,#BLED1 ;四位LED

MOV R1,#MLED1

MOV R7,#2

MOV DPTR,#YIMTAB

YIMA1: MOV A,@R0

MOVC A,@A+DPTR

MOV @R1,A

INC R0

INC R1

DJNZ R7,YIMA1

RET

YIMTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4

DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9

CSHIH: MOV TIME,#15

MOV XWEI,#0

MOV LEDD,#0

MOV LEDW,#0

MOV R6,#100 ;1秒延时

MOV R5,#200 ;2秒延时

MOV P1,#21H

MOV 20H,#0

MOV 22H,#0

MOV TMOD,#61H ;T0方式1

MOV TTH0,#0D8H ;10ms

MOV TTL0,#0F0H

MOV TL0,TTL0

MOV TH0,TTH0

MOV TL1,#0FFH

MOV TH1,#0FFH

MOV IE,#8FH

SETB TR0

SETB TR1

MOV BLED1,#0

MOV BLED2,#0

MOV MLED3,#0

MOV MLED4,#0

RET

H_BCD2: MOV A,TIME

MOV B,#10

DIV AB

MOV BLED2,A

MOV BLED1,B

MOV MLED3,#0

MOV MLED4,#0

RET

T0INT: MOV TL0,TTL0

MOV TH0,TTH0

SETB 00H

RETI

INT0P: CPL 10H

SETB P1.2

CLR P1.1

CLR P1.0

SETB P1.5

CLR P1.4

CLR P1.3

RETI

INT1P: CPL 11H

CLR P1.2

CLR P1.1

SETB P1.0

SETB P1.5

CLR P1.4

CLR P1.3

RETI

CTC1: CPL 12H

MOV P1,#0CH

RETI

BIAOZ DATA 20H ;标志:.0定时到。

XWEI DATA 60H ;显示位,4位:0~3

TTL0 DATA 61H

TTH0 DATA 62H

TIME DATA 66H ;倒计时时间

BLED1 DATA 74H ;显示数据BCD

BLED2 DATA 75H

BLED3 DATA 76H

BLED4 DATA 77H

MLED1 DATA 78H ;显示数据译码

MLED2 DATA 79H

MLED3 DATA 7AH

MLED4 DATA 7BH

LEDD EQU P0 ;数码管段

LEDW EQU P2 ;数码管位

END

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0; //东西向灯

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3; //南北向灯

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

5

上海师范大学信息与机电工程学院—倪继锋

//延时

void DelayMS(uint x)

{

uchar i;

while(x--) for(i=0;i<120;i++);

}

//交通灯切换

void Traffic_Light()

{

switch(Operation_Type)

{

case 1: //东西向绿灯与南北向红灯亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_Type=2;

break;

case 2: //东西向黄灯闪烁,绿灯关闭

DelayMS(300);

YELLOW_A=~YELLOW_A;GREEN_A=1;

if(++Flash_Count!=10) return; //闪烁5 次

Flash_Count=0;

Operation_Type=3;

break;

case 3: //东西向红灯,南北向绿灯亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case 4: //南北向黄灯闪烁5 次

DelayMS(300);

YELLOW_B=~YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10) return;

Flash_Count=0;

Operation_Type=1;

}

}

//主程序

void main()

{

while(1) Traffic_Light();

}

本文已完

;2位LED数码管显示程序:P0口接数码管段,P2口接数码管位。 P3口接键盘,P1口接发光二极管

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INT0P

ORG 000BH

LJMP T0INT

ORG 0013H

LJMP INT1P

ORG 001BH

LJMP CTC1

ORG 0100H

MAIN: LCALL CSHIH ;初始化

LOOP: LCALL TONGX ;通行路口

LCALL H_BCD2 ;计算(1位HEX转换为2位BCD码)

LCALL YIMA ;译码

LCALL LED4W ;显示

CLR 00H

JNB 00H,$

DJNZ R6,LOOP

MOV R6,#100

JNB 10H,LOOP1 ;启动特殊功能K0

JB 10H,$

LOOP1: JNB 11H,LOOP2 ;启动特殊功能K1

JB 11H,$

NOP

LOOP2: JNB 12H,LOOP3 ;启动特殊功能K2

JB 12H,$

NOP

LOOP3: DJNZ TIME,LOOP

SETB 02H

SJMP LOOP

TONGX: JB 01H,DONGX

JB 02H,HUANG1

MOV P1,#21H

SJMP TX_OUT

HUANG1: MOV P1,#22H

MOV TIME,#1

DJNZ R5,TX_OUT

MOV R5,200

CLR 02H

CPL 01H

MOV TIME,#15

SJMP TX_OUT

DONGX: JB 02H,HUANG2

MOV P1,#0CH

SJMP TX_OUT

HUANG2: MOV P1,#14H

MOV TIME,#1

DJNZ R5,TX_OUT

MOV R5,200

CLR 02H

CPL 01H

MOV TIME,#15

TX_OUT: RET

LED4W: MOV A,XWEI

MOV B,#3

MUL AB

MOV DPTR,#LED4T

JMP @A+DPTR

LED4T: LJMP LD4W1

LJMP LD4W2

LJMP LD4W3

LJMP LD4W4

LD4W1: MOV LEDD,MLED1

MOV LEDW,#1

INC XWEI

SJMP LED4WE

LD4W2: MOV LEDD,MLED2

MOV LEDW,#2

INC XWEI

SJMP LED4WE

LD4W3: MOV LEDD,MLED3

MOV LEDW,#4

INC XWEI

SJMP LED4WE

LD4W4: MOV LEDD,MLED4

MOV LEDW,#8

MOV XWEI,#0

LED4WE: RET

YIMA: MOV R0,#BLED1 ;四位LED

MOV R1,#MLED1

MOV R7,#2

MOV DPTR,#YIMTAB

YIMA1: MOV A,@R0

MOVC A,@A+DPTR

MOV @R1,A

INC R0

INC R1

DJNZ R7,YIMA1

RET

YIMTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4

DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9

CSHIH: MOV TIME,#15

MOV XWEI,#0

MOV LEDD,#0

MOV LEDW,#0

MOV R6,#100 ;1秒延时

MOV R5,#200 ;2秒延时

MOV P1,#21H

MOV 20H,#0

MOV 22H,#0

MOV TMOD,#61H ;T0方式1

MOV TTH0,#0D8H ;10ms

MOV TTL0,#0F0H

MOV TL0,TTL0

MOV TH0,TTH0

MOV TL1,#0FFH

MOV TH1,#0FFH

MOV IE,#8FH

SETB TR0

SETB TR1

MOV BLED1,#0

MOV BLED2,#0

MOV MLED3,#0

MOV MLED4,#0

RET

H_BCD2: MOV A,TIME

MOV B,#10

DIV AB

MOV BLED2,A

MOV BLED1,B

MOV MLED3,#0

MOV MLED4,#0

RET

T0INT: MOV TL0,TTL0

MOV TH0,TTH0

SETB 00H

RETI

INT0P: CPL 10H

SETB P1.2

CLR P1.1

CLR P1.0

SETB P1.5

CLR P1.4

CLR P1.3

RETI

INT1P: CPL 11H

CLR P1.2

CLR P1.1

SETB P1.0

SETB P1.5

CLR P1.4

CLR P1.3

RETI

CTC1: CPL 12H

MOV P1,#0CH

RETI

BIAOZ DATA 20H ;标志:.0定时到。

XWEI DATA 60H ;显示位,4位:0~3

TTL0 DATA 61H

TTH0 DATA 62H

TIME DATA 66H ;倒计时时间

BLED1 DATA 74H ;显示数据BCD

BLED2 DATA 75H

BLED3 DATA 76H

BLED4 DATA 77H

MLED1 DATA 78H ;显示数据译码

MLED2 DATA 79H

MLED3 DATA 7AH

MLED4 DATA 7BH

LEDD EQU P0 ;数码管段

LEDW EQU P2 ;数码管位

END

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit RED_A=P0^0; //东西向灯

sbit YELLOW_A=P0^1;

sbit GREEN_A=P0^2;

sbit RED_B=P0^3; //南北向灯

sbit YELLOW_B=P0^4;

sbit GREEN_B=P0^5;

uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

5

上海师范大学信息与机电工程学院—倪继锋

//延时

void DelayMS(uint x)

{

uchar i;

while(x--) for(i=0;i<120;i++);

}

//交通灯切换

void Traffic_Light()

{

switch(Operation_Type)

{

case 1: //东西向绿灯与南北向红灯亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_Type=2;

break;

case 2: //东西向黄灯闪烁,绿灯关闭

DelayMS(300);

YELLOW_A=~YELLOW_A;GREEN_A=1;

if(++Flash_Count!=10) return; //闪烁5 次

Flash_Count=0;

Operation_Type=3;

break;

case 3: //东西向红灯,南北向绿灯亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case 4: //南北向黄灯闪烁5 次

DelayMS(300);

YELLOW_B=~YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10) return;

Flash_Count=0;

Operation_Type=1;

}

}

//主程序

void main()

{

while(1) Traffic_Light();

}

呈现基于单片机的交通信号灯模拟控制系统设计的核心内容解析,若这些分析对您的工作或学习有所助益,建议您将本站加入书签以便后续查阅。

(4)

猜你喜欢

发表回复

本站作者才能评论

评论列表(3条)

  • 单于爱景的头像
    单于爱景 2026年01月08日

    我是希予号的签约作者“单于爱景”

  • 单于爱景
    单于爱景 2026年01月08日

    本文概览:关于基于单片机的交通信号灯模拟控制系统设计的讨论正在各大平台持续发酵,我们精心筛选了最新资讯,希望能为您带来实质性的帮助。;2位LED数码管显示程序:P0口接数码管段,P2口...

  • 单于爱景
    用户010805 2026年01月08日

    文章不错《基于单片机的交通信号灯模拟控制系统设计》内容很有帮助

联系我们:

邮件:希予号@gmail.com

工作时间:周一至周五,9:30-17:30,节假日休息

关注微信