⑴ 用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個定時器,
,另外一邊的思路也類似,你先畫個流程或者思路圖在寫程序,思路就清楚了