红绿灯的plc简单编程是什么

红绿灯的plc简单编程是什么,第1张

PLC的编程不同于电脑中软件编程,它需要对具体的输入/输出端口信号进行处理和 *** 作(或者说对一个字节的每一个 bit 进行处理和 *** 作)。

南北方向:

南北绿(8s),东西红(8s)

南北黄(21s),东西红(21s)

南北红(101s),东西绿(8s),东西黄(21s)

东西方向:

东西红(101s),南北绿(8s),南北黄(21s)

东西绿(8s),南北红(8s)

东西黄(21s),南北红(21s)

中央处理单元

中央处理器(CPU)是PLC的控制中枢,也是PLC的核心部件,其性能决定了PLC的性能。中央处理器由控制器、运算器和寄存器组成,这些电路都集中在一块芯片上,通过地址总线、控制总线与存储器的输入/输出接口电路相连。中央处理器的作用是处理和运行用户程序,进行逻辑和数学运算,控制整个系统使之协调。

基于单片机的交通灯设计

时间: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

要求:

1、一路延时60S,

一路延时40S

(演示时为节省时间,一路延时15S,一路延时10S>>

两路时间分别用不同的数码管显示;

--相同的,即可。

--比如:

--东西绿灯、南北红灯,两个方向的数字显示,都是60s倒计时。

--东西红灯、南北绿灯,两个方向的数字显示,都是40s倒计时。

--两路时间虽然不同,数码管显示应该是相同的,完全可以用一组数码管显示。

2紧急通行控制,如某一方向现为红灯,通过按键强行切换为绿灯,而另一路改为红灯,延时若干秒(10S)后,恢复原状态(红灯)继续倒数

--不应恢复原状态。

--比如:

--东西绿灯、南北红灯,两个方向的数字显示,都是60s倒计时。

--在 59s 时,即仅仅剩下 1s 时,被强制转换了红绿灯。

--那么 10s 后,再恢复原状态

--原状态,仅仅有 1s,还恢复它干什么

--这时间,可能,都不够汽车起步用的。

--恢复原来的半截状态,显然不合理。

简单I/O实验(交通灯控制)

一实验要求

以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。

二实验目的

1学习在单片机系统中扩展简单I/O接口的方法。

2学习数据输出程序的设计方法。

3学习模拟交通灯控制的方法。

4学习双色灯的使用。

三实验电路及连线

四实验说明

1因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1南北绿灯通车,东西红灯。过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。再转状态3,东西绿灯通车,南北红灯。过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。最后循环至状态1。

2双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。

五实验程序框图

程序框图:

源代码:

ORG 0000H

LJMP START

ORG 0040H

START:

MOV SP,#60H

LCALL STATUS0 ;初始状态(都是红灯)

CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯

LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯

LCALL STATUS3 ;南北红灯,东西绿灯

LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯

LJMP CIRCLE

STATUS0: ;南北红灯,东西红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

MOV R2,#10 ;延时1秒

LCALL DELAY

RET

STATUS1: ;南北绿灯,东西红灯

MOV DPTR,#08300H

MOV A,#5AH ;南北绿灯,东西红灯

MOVX @DPTR,A

MOV R2,#50 ;延时5秒

LCALL DELAY

RET

STATUS2: ;南北绿灯闪转黄灯,东西红灯

MOV DPTR,#8300H

MOV R3,#03H ;绿灯闪3次

FLASH: MOV A,#5FH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#5AH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH

MOV A,#0AH ;南北黄灯,东西红灯

MOVX @DPTR,A

MOV R2,#10 ;延时1秒

LCALL DELAY

RET

STATUS3: ;南北红灯,东西绿灯

MOV DPTR,#8300H

MOV A,#0A5H

MOVX @DPTR,A

MOV R2,#50 ;延时5秒

LCALL DELAY

RET

STATUS4: ;南北红灯,东西绿灯闪转黄灯

MOV DPTR,#8300H

MOV R3,#03H ;绿灯闪3次

FLASH1: MOV A,#0AFH

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

MOV A,#0A5H

MOVX @DPTR,A

MOV R2,#03H

LCALL DELAY

DJNZ R3,FLASH1

MOV A,#05H ;南北红灯,东西黄灯

MOVX @DPTR,A

MOV R2,#10 ;延时1秒

LCALL DELAY

NOP

RET

DELAY: ;延时子程序

PUSH 2

PUSH 1

PUSH 0

DELAY1: MOV 1,#00H

DELAY2: MOV 0,#0B2H

DJNZ 0,$

DJNZ 1,DELAY2 ;延时 100 mS

DJNZ 2,DELAY1

POP 0

POP 1

POP 2

RET

END

我实训是做了这个项目,发给你看看,功能主要和交通灯的差不多,还可以显示具体的时间,跳转的时候,时间是倒计时的,当到0以后,下面灯转换

#include<reg51h>

unsigned int shi,ge,js;

void delay(unsigned char i);

sbit P2_0=P2^0;

sbit P2_1=P2^1;

unsigned int i=0;

unsigned char key_press();

unsigned char key_scan();

unsigned int m=0;m2=0;n1=6;n2=2;

void TIMERO_1();

void TIMERO_0();

unsigned char led[4]={0xee,0xdb,0xf5,0xdb};

unsigned char code tabe[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x00};

unsigned char num;

unsigned char key_scan()

{ unsigned char hang,lie,key;

P3=0x0f;

if(P3!=0x0f)

delay(100);

if(P3!=0x0f)

{

switch(P3&0x0f)

{

case 0x0e:hang=0;break;

case 0x0d:hang=1;break;

case 0x0b:hang=2;break;

//case 0x07:hang=3;break;

}

P3=0xf0;

switch(P3&0xf0)

{

case 0xe0:lie=0;break;

case 0xd0:lie=1;break;

case 0xb0:lie=2;break;

case 0x70:lie=3;break;

}

while(P3!=0xf0);

key=hang4+lie;

}

// else

// key=12;

return (key);

}

unsigned char key_press()

{

unsigned char temp,key_flag;

P3=0x0f;

delay(100);

temp=P3;

if (temp!=0x0f)

{

key_flag=1;

}

else

{

key_flag=0;

}

return key_flag;

}

void TIMERO_0() interrupt 1

{

TH0=0X3C;

TL0=0XB0;

m++;

if(m==20)

{

m=0;

n1--;

shi=n1/10;

ge=n1%10;

}

if(n1==0)

{i=i+1;

n2=3;

TR1=1;

TR0=0;

}

//if(ge==0)

//{ge=2;}

}

void TIMERO_1() interrupt 3

{

TH1=0X3C;

TL1=0XB0;

m2++;

if(m2==20)

{

m2=0;

n2--;

shi=n2/10;

ge=n2%10;

}

if(n2==0)

{

i=i+1;

n1=js;

TR0=1;

TR1=0;

if(i== 4)

{

i=0;

}

//if(ge==0)

//{ge=js;}

}

}

void display(unsigned char a,b,c,d,e,f)

{

P2_1=1;

P2_0=0;

P0=0x20;

P2_0=1;

P2_1=0;

P0=tabe[a];

delay(10);

P0=0x00;

P2_1=1;

P2_0=0;

P0=0X10;

P2_0=1;

P2_1=0;

P0=tabe[b];

delay(10);

P0=0x00;

P2_1=1;

P2_0=0;

P0=0x08;

P2_0=1;

P2_1=0;

P0=tabe[c];

delay(10);

P0=0x00;

P2_1=1;

P2_0=0;

P0=0x04;

P2_0=1;

P2_1=0;

P0=tabe[d];

delay(10);

P0=0x00;

P2_1=1;

P2_0=0;

P0=0x02;

P2_0=1;

P2_1=0;

P0=tabe[e];

delay(10);

P0=0x00;

P2_1=1;

P2_0=0;

P0=0x01;

P2_0=1;

P2_1=0;

P0=tabe[f];

delay(10);

P0=0x00;

delay(10);

}

void main()

{

TMOD=0X11;

TH0=0X3C;

TL0=0XB0;

TH1=0X3C;

TL1=0XB0;

ET1=1;

ET0=1;

EA=1;

P1=0XFF;

while(1)

{

P0=0;

if(key_press())

{ num=key_scan();

if(num<=9)

{

shi=ge;

ge=num;

js=shi10+ge;

n1=js;

}

if(num==10)

{

TR0=0;

TR1=0;

shi=ge;

ge=num;

}

if(num==11)

{

TR0=1;

i=0;

js=shi10+ge;

}

}

P1=led[i];

display(12,12,12,12,shi,ge);

}

}

void delay(unsigned char i )

{

unsigned char j, k;

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

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

}

按照你的要求编写的红绿灯程序,你看看吧,比较简单。

完整的程序如下:

import javaawt;

import javaawtevent;

import javaxswing;

import javaawtGraphics;

public class TrafficLight extends JFrame{

JRadioButton jrbYellow,jrbGreen,jrbRed;

int flag=0;

jpNewPanel jpNewPanel;

public static void main(String[] args){

TrafficLight frame=new TrafficLight();

framesetSize(500,200);

framesetLocationRelativeTo(null);

framesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

framesetTitle("TrafficLight");

framesetVisible(true);

}

public TrafficLight(){

jpNewPanel=new jpNewPanel();

add(jpNewPanel,BorderLayoutCENTER);

JPanel jpRadioButtons=new JPanel();

jpRadioButtonssetLayout(new GridLayout(1,3));

jpRadioButtonsadd(jrbYellow=new JRadioButton("Yellow"));

jpRadioButtonsadd(jrbGreen=new JRadioButton("Green"));

jpRadioButtonsadd(jrbRed=new JRadioButton("Red"));

add(jpRadioButtons,BorderLayoutSOUTH);

ButtonGroup group=new ButtonGroup();

groupadd(jrbYellow);

groupadd(jrbGreen);

groupadd(jrbRed);

jrbYellowaddActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

flag=2;

jpNewPanelrepaint();

}

});

jrbGreenaddActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

flag=1;

jpNewPanelrepaint();

}

});

jrbRedaddActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

flag=3;

jpNewPanelrepaint();

}

});

}

class jpNewPanel extends JPanel{

protected void paintComponent(Graphics g){

superpaintComponent(g);

gdrawRect(0,0,40,100);

gdrawOval(10,10,20,20);

gdrawOval(10,40,20,20);

gdrawOval(10,70,20,20);

if(flag==1){

gsetColor(ColorGREEN);

gfillOval(10, 70, 20, 20);

}

else if(flag==2){

gsetColor(ColorYELLOW);

gfillOval(10, 40, 20, 20);

}

else if(flag==3){

gsetColor(ColorRED);

gfillOval(10, 10, 20, 20);

}

}

}

}

以上就是关于红绿灯的plc简单编程是什么全部的内容,包括:红绿灯的plc简单编程是什么、用单片机做交通灯,这么做、求单片机交通灯控制系统设计的程序(最后有中文解析)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9294295.html

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

发表评论

登录后才能评论

评论列表(0条)

保存