急需一个单片机交通灯程序设计

急需一个单片机交通灯程序设计,第1张

/

Keil C 89S51 交通信号控制程序

(C) 版权所有 Dai_Weis@hotmailcom

/

#include "reg51h"

#define UINT unsigned int

#define ULONG unsigned long

#define UCHAR unsigned char

/

信号灯变量

南北方向绿灯

sbit n_bike_g = P1^0; //自行车

sbit n_right_g = P1^1; //右转

sbit n_up_g = P1^2; //直行

sbit n_left_g = P1^3; //左转 调头

南北方向红灯

sbit n_bike_r = P1^4; //自行车

sbit n_right_r = P1^5; //右转

sbit n_up_r = P1^6; //直行

sbit n_left_r = P1^7; //左转 调头

南北方向黄灯

sbit n_bike_y = P3^0; //自行车

sbit n_right_y = P3^1; //右转

sbit n_up_y = P3^2; //直行

sbit n_left_y = P3^3; //左转 调头

东西方向绿灯

sbit e_bike_g = P2^0; //自行车

sbit e_right_g = P2^1; //右转

sbit e_up_g = P2^2; //直行

东西方向红灯

sbit e_bike_r = P2^4; //自行车

sbit e_right_r = P2^5; //右转

sbit e_up_r = P2^6; //直行

东西方向黄灯

sbit e_bike_y = P3^4; //自行车

sbit e_right_y = P3^5; //右转

sbit e_up_y = P3^6; //直行

/

//延时

void delay(UINT t, UINT s)

{

while (t)

{

UINT i;

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

{

}

t --;

}

}

//信号灯状态

void time_x(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3)

{

P1 = P_P1;

P2 = P_P2;

P3 = P_P3;

delay(150, 65535);

}

void time_s(UCHAR P_P1, UCHAR P_P2, UCHAR P_P3, UCHAR P_P11, UCHAR P_P22)

{

UINT i;

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

{

P1 = P_P1;

P2 = P_P2;

delay(5, 65535);

P1 = P_P11;

P2 = P_P22;

delay(5, 65535);

}

P1 = P_P1;

P2 = P_P2;

P3 = P_P3;

delay(10, 65535);

}

//主程序

void main()

{

P1 = P2 = P3 = 0x0;

while (1)

{

time_x(0xA5, 0x38, 0x0);

time_s(0xA4, 0x38, 0x1, 0xA5, 0x38);

time_x(0x96, 0x52, 0x0);

time_s(0x92, 0x52, 0x4, 0x96, 0x52);

time_x(0x5A, 0x52, 0x0);

time_s(0x50, 0x50, 0x2A, 0x5A, 0x52);

time_x(0xF0, 0x25, 0x0);

time_s(0xF0, 0x24, 0x20, 0xF0, 0x25);

time_x(0xD2, 0x16, 0x0);

time_s(0xD0, 0x10, 0x62, 0xD2, 0x16);

}

}

给你一个定时控制的信号系统,我只做的简单的测试,至于延时我用的软件,你自己想办法。^_^

Dai_Weis 于 2005-5-4 13:43:23

重新给你说明

/

Keil C AT89S51 交通信号控制程序

(C) 版权所有 Dai_Weis@hotmailcom

开发说明:

固定时间信号变换,南北设置调头、左传、直行、右转、自行车。

东西设置左传、直行、右转、自行车。

时序状态:

红 绿 红 绿

序号 左 前 右 自 左 前 右 自 前 右 自 前 右 自

1 1 0 1 0 0 1 0 1 1 1 1 0 0 0

2 1 0 0 1 0 1 1 0 1 0 1 0 1 0

3 0 1 0 1 1 0 1 0 1 0 1 0 1 0

4 1 1 1 1 0 0 0 0 0 1 0 1 0 1

5 1 1 0 1 0 0 1 0 0 0 1 1 1 0

/

另外修正个错误

while (1)

{

time_x(0xA5, 0x70, 0x0);

time_s(0xA4, 0x70, 0x1, 0xA5, 0x70);

交通灯好简单啊 我不是自动化专业的都会

可惜找不到PLC方面的工作

TITLE=程序注释

Network 1 // 网络标题

// 网络注释

LD SM01

S M00, 1

Network 2

LD M00

A I00

S M01, 1

R M00, 1

Network 3

LD M06

A T43

S M01, 1

R M06, 1

Network 4

LD M01

A T38

S M02, 1

R M01, 1

Network 5

LD M02

A T39

S M03, 1

R M02, 1

Network 6

LD M03

A T40

S M04, 1

R M03, 1

Network 7

LD M04

A T41

S M05, 1

R M04, 1

Network 8

LD M05

A T42

S M06, 1

R M05, 1

Network 9

LD M06

A T43

S M00, 1

R M06, 1

Network 10

LD M01

O M02

O M03

= Q00

Network 11

LD M04

LDN T42

A SM05

A M05

OLD

= Q01

Network 12

LD M06

= Q02

Network 13

LD M04

O M05

O M06

= Q03

Network 14

LD M01

LD SM05

AN T39

A M02

OLD

= Q04

Network 15

LD M03

= Q05

Network 16

LD M01

TON T38, 200

Network 17

LD M02

TON T39, 30

Network 18

LD M03

TON T40, 20

Network 19

LD M04

TON T41, 200

Network 20

LD M05

TON T42, 30

Network 21

LD M06

TON T43, 20

基于单片机的交通灯设计

时间:2010-12-08 21:43:12 来源: 作者:

一、 系统功能要求:

1 设计任务在一十字路口设置交通灯,并用单片机对其进行合理的控制。

时间方向 控制要求

白天 东西 绿灯 黄灯 红灯 南北 红灯 绿灯 黄灯

晚上 东西 黄灯 南北 红灯

2总体设计方案现在流行的一种设计为两主干线相交的十字路。本设计采用一主干道(南北方向),一从干道(东西方向)的路口,即主干道的通行时间为从干道的2倍。在正常情况下,两干道的交通灯按图1进行转换,并以倒计数的方式将剩余时间显示在每个干道对应的两位LED上;另发挥部分为当出现紧急情况时,路口的交通灯全为红灯,紧急情况解除时,恢复到原来的状态。

二、 总体设计方案提示:

1假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态。

2东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态。

3南北绿灯通车,东西红灯。过一段时间转状态。

4南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。

三.硬件设计

电路原理图如下:

四、软件设计

1、 流程图

2、程序设计

ORG 0000H

MOV P0,#00H ;确保P0为低电位

lJMP MAIN0

ORG 0030H

MAIN0: MOV 30H,#08H

MOV R6,#00H

MOV R7,#00H

MOV DPTR,#TABLE ;取数码管的译码

MOV TMOD,#01H ;设计定时方式及时间

MOV TL0,#0CDH

MOV TH0,#0BH

SETB TR0

MOV IE,#00H

MAIN: MOV P1,#0F3H ;南北绿灯,东西红灯

MOV R6,#1EH ;红灯30s倒计时

MOV R7,#19H ;绿灯25s倒计时

MAIN1:CALL DELAY ;1S延时子程序

JB P01,REL1 ;判断是否有东西方向按钮按下

CJNE R7,#00H,MAIN1 ;判断绿灯25s是否倒计完

MOV P1,#0F5H ;南北黄灯,东西红灯

MAIN2:CALL DELAY

MOV R7,#00H ;红灯继续倒计时,黄灯闪烁,保持0s

CPL P11 ;黄灯闪烁

CJNE R6,#00H,MAIN2 ;判断红灯是否倒计时完

MOV P1,#0DEH ;南北红灯,东西绿灯

MOV R7,#1EH

MOV R6,#19H

MAIN3:CALL DELAY

JB P00,REL2

CJNE R6,#00H,MAIN3

MOV P1,#0EEH

MAIN4:CALL DELAY

MOV R6,#00H

CPL P14

CJNE R7,#00H,MAIN4

JMP MAIN

REL1:MOV P1,#0F5H ;东西方向按钮按下,南北方向强制由绿灯变成黄灯警告

MOV R6,#05H

MOV R7,#00H

JMP MAIN2

REL2:MOV P1,#0EEH ;南北方向按钮按下,东西方向强制由绿灯变成黄灯警告

MOV R7,#05H

MOV R6,#00H

JMP MAIN4

;1s延时子程序

DELAY:MOV A,R6 ;进行南北方向倒计时时间的十进制调整

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR ;找寻相应的数码管代码

MOV P2,#01H

MOV P3,A ;输出个位

MOV R4,#4 ;降低动态显示频率

LOOP2:MOV R3,#125

LOOP3:DJNZ R3,LOOP3

DJNZ R4,LOOP2

MOV A,B

MOVC A,@A+DPTR

MOV P2,#02H ;输出十位

MOV P3,A

MOV R4,#4

LOOP4:MOV R3,#125

LOOP5:DJNZ R3,LOOP5

DJNZ R4,LOOP4

MOV A,R7 ;进行东西方向倒计时时间的十进制调整

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P2,#04H

MOV P3,A

MOV R4,#4

LOOP6:MOV R3,#125

LOOP7:DJNZ R3,LOOP7

DJNZ R4,LOOP6

MOV A,B

MOVC A,@A+DPTR

MOV P2,#08H

MOV P3,A

MOV R4,#4

LOOP8:MOV R3,#125

LOOP9:DJNZ R3,LOOP9

DJNZ R4,LOOP8

JBC TF0,LOOP ;判断是否计满125ms

AJMP DELAY

LOOP:MOV TL0,#0CDH ;计满125ms重新给定时器赋值

MOV TH0,#0BH

MOV A,30H

DEC A

MOV 30H,A

JNZ DELAY ;判断是否计满8次125ms,即1s

DEC R6 ;计满1s,东西倒计时减1,南北倒计时减1

DEC R7

MOV 30H,#08H ;重新1s次数,重新计时

RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H ;相应数值的数码管代码

DB 92H,82H,0F8H,80H,90H

END

以上就是关于急需一个单片机交通灯程序设计全部的内容,包括:急需一个单片机交通灯程序设计、设计用PLC控制交通灯的程序、用单片机做交通灯,这么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9366040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存