/
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控制交通灯的程序、用单片机做交通灯,这么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)