导航:首页 > 编程语言 > 交通灯控制状态编程法

交通灯控制状态编程法

发布时间:2022-10-02 16:38:01

⑴ 用PLC编个自动交通灯控制系统程序

邮箱???

⑵ 十字路口交通信号灯控制程序设计

通灯显示控制
一、前言
(1)通过8255A实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用.
(2)进一步学习微处理器的编程技术.
二、8255的工作原理:
8255有三种方式可以选择:
方式0:基本输入/输出方式;
方式1:带选通的输入/输出方式
方式2:双向传输方式。
8255为总线兼容型,可以与CPU的总线直接接口。其中,口地址取决于片选CS和A1、A0
如图所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程时六个灯按交通灯变化规律燃灭。
交通灯变化要求:
(1)、南北路口的绿灯,东西路口的红灯同时亮30秒左右;
(2)、南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮;
(3)、南北路口的红灯,东西路口的绿灯同时亮30秒左右;
(4)、南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次;
(5)、转(1)重复。
1.硬件原理图如图
2.硬件线路连接
4.流程图

按上面所述过程得出5.程序

DATA SEGMENT
PC DB ?
MESS DB 'ENTER ANY KEY CAN EXIT TO DOS!',0DH,0AH,'$'
DATA ENDS
STACK SEGMENT STACK
STA DW 200 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,09H
MOV DX,OFFSET MESS
INT 21H
MOV DX,28BH
MOV AL,10000001B
OUT DX,AL
MOV DX,28AH
IN AL,DX
MOV PC,AL
MOV DX,28BH
MOV AL,10000000B
OUT DX,AL
MOV DX,28AH
MOV AL,PC
MOV DX,28AH
MOV AL,00000000B
OUT DX,AL
LLL: MOV DX,28AH
MOV AL,00100100B ;1绿2红
OUT DX,AL
CALL DONE2
CALL DONE2
MOV DX,28AH
MOV AL,01000100B ; ;1黄2红
OUT DX,AL
CALL DONE2
MOV DX,28AH
MOV AL,10000001B ;1红2绿
OUT DX,AL
CALL DONE2
CALL DONE2
MOV DX,28AH
MOV AL,10000010B ;1红2黄
OUT DX,AL
CALL DONE 2
MOV AH,06H
MOV DL,0FFH
INT 21H
JNZ PPP
JMP LLL
PPP: MOV AX,4C00H
INT 21H
DONE1 PROC NEAR
PUSH CX
MOV CX,0FFFFH
CC: LOOP CC
POP CX
RET
DONE1 ENDP
DONE2 PROC NEAR
PUSH AX
PUSH CX
MOV CX,0FFFH
UU: CALL DONE1
LOOP UU
POP CX
POP AX
RET
DONE10 ENDP
CODE ENDS
END START
有些东西发不上来 要的Q我

⑶ c51单片机c语言交通灯的程序

Proteus仿真原理图:

程序如下:

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar data buf[4];

uchar data sec_dx=20;//东西数默认

uchar data sec_nb=30;//南北默认值

uchar data set_timedx=20;

uchar data set_timenb=30;

int n;

uchar data b;//定时器中断次数

sbit k1=P1^6;//定义5组开关

sbit k2=P1^7;

sbit k3=P2^7;

sbit k4=P3^0;

sbit k5=P3^1;

sbit Yellow_nb=P2^5; //南北黄灯标志

sbit Yellow_dx=P2^2; //东西黄灯标志

sbit Green_nb=P2^4;

sbit Green_dx=P2^1;

sbit Buzz=P3^7;

bit Buzzer_Indicate;

bit time=0;//灯状态循环标志

bit set=1;//调时方向切换键标志

uchar code table[11]={ //共阴极字型码

0x3f, //--0

0x06, //--1

0x5b, //--2

0x4f, //--3

0x66, //--4

0x6d, //--5

0x7d, //--6

0x07, //--7

0x7f, //--8

0x6f, //--9

0x00 //--NULL

};

//函数的声明部分

void delay(int ms);//延时子程序

void key();//按键扫描子程序

void key_to1();//键处理子程序

void key_to2();

void key_to3();

void display();//显示子程序

void logo(); //开机LOGO

void Buzzer();

//主程序

void main()

{

TMOD=0X01;

TH0=0XD8;

TL0=0XF0;

EA=1;

ET0=1;

TR0=1;

EX0=1;

EX1=1;

logo();

P2=0Xc3;// 开始默认状态,东西绿灯,南北黄灯

sec_nb=sec_dx+5;

while(1)

{

key(); //调用按键扫描程序

display(); //调用显示程序

Buzzer();

}

}

//函数的定义部分

void key() //按键扫描子程序

{

if(k1!=1)

{

delay(10);

if(k1!=1)

{

while(k1!=1)

{

key_to1();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k2!=1)

{

delay(10);

if(k2!=1)

{

while(k2!=1)

{

key_to2();

for(n=0;n<40;n++)

{ display();}

}

}

}

if(k3!=1)

{

TR0=1; //启动定时器

Buzzer_Indicate=0;

sec_nb=set_timenb; //从中断回复,仍显示设置过的数值

sec_dx=set_timedx;

if(time==0)

{ P2=0X99;sec_nb=sec_dx+5; }

else { P2=0xC3;sec_dx=sec_nb+5; }

}

if(k4!=1)

{

delay(5);

if(k4!=1)

{

while(k4!=1);

set=!set;

}

}

if(k5!=1)

{

delay(5);

if(k5!=1)

{

while(k5!=1)

key_to3();

}

}

}

void display() //显示子程序

{

buf[1]=sec_dx/10; //第1位 东西秒十位

buf[2]=sec_dx%10; //第2位 东西秒个位

buf[3]=sec_nb/10; //第3位 南北秒十位

buf[0]=sec_nb%10; //第4位 南北秒个位

P1=0xff; // 初始灯为灭的

P0=0x00;

P1=0xfe; //片选LCD1

P0=table[buf[1]];

delay(1);

P1=0xff;

P0=0x00;

P1=0xfd; //片选LCD2

P0=table[buf[2]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xfb; //片选LCD3

P0=table[buf[3]];

delay(1);

P1=0xff;

P0=0x00;

P1=0Xf7;

P0=table[buf[0]]; //片选LCD4

delay(1);

}

void time0(void) interrupt 1 using 1 //定时中断子程序

{

b++;

if(b==19) // 定时器中断次数

{ b=0;

sec_dx--;

sec_nb--;

if(sec_nb<=5&&time==0) //东西黄灯闪

{ Green_dx=0;Yellow_dx=!Yellow_dx;}

if(sec_dx<=5&&time==1) //南北黄灯闪

{ Green_nb=0;Yellow_nb=!Yellow_nb;}

if(sec_dx==0&&sec_nb==5)

sec_dx=5;

if(sec_nb==0&&sec_dx==5)

sec_nb=5;

if(time==0&&sec_nb==0)

{ P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}

if(time==1&&sec_dx==0)

{P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}

}

}

void key_to1() //键盘处理子程序之+

{

TR0=0; //关定时器

if(set==0)

set_timenb++; //南北加1S

else

set_timedx++; //东西加1S

if(set_timenb==100)

set_timenb=1;

if( set_timedx==100)

set_timedx=1; //加到100置1

sec_nb=set_timenb ; //设置的数值赋给东西南北

sec_dx=set_timedx;

}

void key_to2() //键盘处理子程序之-

{

TR0=0; //关定时器

if(set==0)

set_timenb--; //南北减1S

else

set_timedx--; //东西减1S

if(set_timenb==0)

set_timenb=99;

if( set_timedx==0 )

set_timedx=99; //减到1重置99

sec_nb=set_timenb ; //设置的数值赋给东西南北

sec_dx=set_timedx;

}

void key_to3() //键盘处理之紧急车通行

{

TR0=0;

P2=0Xc9;

sec_dx=00;

sec_nb=00;

Buzzer_Indicate=1;

}

void int0(void) interrupt 0 using 1 //只允许东西通行

{

TR0=0;

P2=0Xc3;

Buzzer_Indicate=0;

sec_dx=00;

sec_nb=00;

}

void int1(void) interrupt 2 using 1 //只允许南北通行

{

TR0=0;

P2=0X99;

Buzzer_Indicate=0;

sec_nb=00;

sec_dx=00;

}

void logo()//开机的Logo "- - - -"

{ for(n=0;n<50;n++)

{

P0=0x40;

P1=0xfe;

delay(1);

P1=0xfd;

delay(1);

P1=0Xfb;

delay(1);

P1=0Xf7;

delay(1);

P1 = 0xff;

}

}

void Buzzer()

{

if(Buzzer_Indicate==1)

Buzz=!Buzz;

else Buzz=0;

}

void delay(int ms) //延时子程序

{

uint j,k;

for(j=0;j<ms;j++)

for(k=0;k<124;k++);

}


⑷ 用C语言编程模拟交通路口(十字路口)红绿灯的控制功能

本系统的设计首先必须了解交通路灯的亮灭规律。设有一个十字路口,1、3 为南,北
方向, 2、4 为东,西方向,初始态为4 个路口的红灯全亮。之后, 1、3 路口的绿灯亮,
2、4 路口的红灯亮, 1、3 路口方向通车。延迟一段时间后, 1、3 路口的绿灯熄灭,而1、
3 路口的黄灯开始闪烁。闪烁若干次后, 1、3 路口的红灯亮, 同时 2、4 路口的绿灯亮, 2、
4 路口方向开始通车。延迟一段时间后, 2、4 路口的绿灯熄灭,而黄灯开始闪烁。闪烁若
干次后,再切换到1、3 路口方向。之后,重复上述过程。对于各组灯的亮灭,我们运用的
是8255A 的输入输出功能。

⑸ PLC怎么实现程序循环(交通灯)

PLC实现程序循环(交通灯)方法
交通信号灯分东、西、南、北四组,每组分别有“红”“黄”“绿”三种颜色。

其工作状态由PLC过程控制,“启动”、“停止”按钮分别控制信号灯的启动和停止。
G1表示东西绿灯的信号,Y1表示东西黄灯的信号,R1表示东西红灯的信号;
G2表示南北绿灯的信号,Y2表示南北黄灯的信号,R3表示南北红灯的信号;

SB2表示“停止”信号,SB1表示“启动”信号。
1.按下启动按钮,东西绿灯亮,南北红灯亮; 30秒后,熄灭。
2.东西,南北四个黄灯同时闪烁5次(5秒)后,熄灭。
3.东西红灯亮,南北绿灯亮20秒。
4.东西,南北四个黄灯同时闪烁5次(5秒)后,熄灭。按如下波形图,连续循环。
5.按下停止按钮,所有指示灯全部熄灭。
6.选定PLC的机型是S7-200系列PLC。确定I/O点,绘制I/O点分配表,编程。
7.编程后,认真检查PLC的梯形图程序。

⑹ 交通灯控制程序

好像并不是很难的,我博客上有相关的程序模块,你看懂了就可以自己写了。

⑺ 单片机 求源程序 模拟交通灯控制

这个太复杂了

⑻ 求高人帮忙单片机交通灯编程

//以下代码经过Keil C51软件调试通过
#include "reg51.h" //头文件包含

//宏定义
#define uint unsigned int
#define uchar unsigned char

#define ON 0 //0的时候灯亮
#define OFF 1 //1的时候灯亮

//管脚定义
//南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 绿灯38秒
//东西道 黄灯亮3秒 绿灯亮 28秒 黄灯3秒 红灯40秒
sbit PortDX_Yellow = P1^0; //东西方向黄灯
sbit PortDX_Red = P1^1; //东西方向红灯
sbit PortDX_Green = P1^2; //东西方向绿灯
sbit PortNB_Yellow = P1^3; //南北方向黄灯
sbit PortNB_Red = P1^4; //南北方向红灯
sbit PortNB_Green = P1^5; //南北方向绿灯

void delay(uint ms) // 毫秒级延时(AT89C52 @ 11.0592MHz)
{
uint ti;
while(ms--)
{
for(ti=0;ti<112;ti++){}//112
}
}

/*==================== 主函数 ====================*/
void main(void)
{
delay(400); //开机延时400ms
while(1)
{
PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮3秒
PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮3秒
delay(3000);
PortNB_Yellow = OFF;PortNB_Red = ON ;PortNB_Green = OFF;//南北红灯亮28秒
PortDX_Yellow = OFF;PortDX_Red = OFF;PortDX_Green = ON ;//东西绿灯亮28秒
delay(28000);
PortNB_Yellow = OFF;PortNB_Red = ON ;PortNB_Green = OFF;//南北红灯亮2秒
PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮2秒
delay(2000);
PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮1秒
PortDX_Yellow = ON ;PortDX_Red = OFF;PortDX_Green = OFF;//东西黄灯亮1秒
delay(1000);
PortNB_Yellow = ON ;PortNB_Red = OFF;PortNB_Green = OFF;//南北黄灯亮2秒
PortDX_Yellow = OFF;PortDX_Red = ON ;PortDX_Green = OFF;//东西红灯亮2秒
delay(2000);
PortNB_Yellow = OFF;PortNB_Red = OFF;PortNB_Green = ON ;//南北绿灯亮38秒
PortDX_Yellow = OFF;PortDX_Red = ON ;PortDX_Green = OFF;//东西红灯亮38秒
delay(3800);
}
}

1.当为黄灯时南北、东西两道同时为黄灯;以提示行人或车辆下一个灯色即将到来时间 3秒。
2.当南北为红灯,南北道车辆禁止通行,时间30秒;南北道为绿灯,南北道车辆通过时间38秒 。
3.当东西道绿灯,东西道车辆通行,时间为28秒;东西道为红灯,东西道车辆禁止通过时间为40秒。
4.这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。

⑼ 用ab plc怎么控制交通灯的编程思想

我估计你要么是学生,要么是新手,
这类的编程其实很简单,通过定时器的触发和中间变量的应用很简单就能实现
比如:启动后先触发定时器1,
定时器1结束后,触发第2个定时的脉冲重复3次,3次可以用计数器完成,后再触发第3个定时器,
,另外一边的思路也类似,你先画个流程或者思路图在写程序,思路就清楚了

阅读全文

与交通灯控制状态编程法相关的资料

热点内容
java和php通信 浏览:679
为什么黑程序员 浏览:162
程序员男生 浏览:455
戴尔文件夹内文件怎么置顶 浏览:582
云服务器6m网速 浏览:722
vivo手机中国联通服务器地址 浏览:862
工程总控编译失败 浏览:706
燕赵红枫app如何下载 浏览:867
php查杀软件 浏览:878
教育管理学pdf 浏览:547
服务器均衡怎么使用 浏览:626
linux中jps 浏览:954
单片机实验感想 浏览:561
程序员级别数学算法逻辑 浏览:900
2k21公园怎么换服务器 浏览:724
php释放数据库连接 浏览:722
php网页抓取工具 浏览:726
android设置对齐方式 浏览:23
linux创建网页 浏览:280
净化车间门算法 浏览:934