哈尔滨德强商务学院
实验报告
课程名称:可编程控制器原理与应用
系 别: 计算机与信息工程系
专 业: 工业工程
班 级: 09-2
学 号: 2009510591(29)
学生姓名: 梅松
20##年6月5日
实验室名称:工业工程专业实验室(504)实验机器号: 10 实验分组: 10
实验时间: 2012.6.5 指导教师签字: 成绩:
实验项目五:十字路口交通灯控制
一、实验目的和要求
1.实验目的
(1)熟练地掌握PLC的编程和程序调试方法,灵活掌握定时器的使用。
(2)进一步熟悉PLC的I/O连接。
2.实验要求
熟悉十字路口交通灯的控制方式及其编程方法,在十字路口交通灯控制的模拟实验区完成实验。
二、实验原理
1.实验原理
信号灯受一个起动开关控制,当起动开关接通时,信号灯系统开始工作,且先南北红灯亮,东西绿灯亮。当起动开关断开时,所有信号灯都熄灭。
2.程序流程图
三、主要仪器设备
1.计算机(V4.0 STEP 7 MicroWIN SP3软件)1台
2.THFDC-1型可编程控制器·单片机·传感器综合实验装置1套
3.A11实验挂箱1个
4.PC/PPI通讯电缆1根
5.3号导线12根
四、实验内容、步骤及操作方法
1.内容:根据控制要求分配I/O点并编程完成十字路口交通灯控制的模拟实验。
2.步骤及操作方法
(1)按照控制要求分配I/O点;
(2)按设计好的I/O分配情况把PLC的I/O端子分别接线至对应的按钮、开关或输出指示灯。
(3)编写PLC梯形图或指令表程序使之满足控制要求,编译通过;
(4)把编译好的程序下载到PLC中;
(5)按下实验板上的启动按钮开始工作,顺次模拟动作实验装置,观察输出的逻辑次序是否符合控制要求,若符合,实验结束,若不符合,返回3修改程序继续调试。
3 . I/O端口分配功能表
4.控制接线图
五、实验数据记录和处理
程序注释:
网络 1
// 初始复位
LD SM0.1
ON I0.0
MOVB 0, VB0
MOVB 0, QB0
网络 2
// 启动上升沿、循环一个周期结束下降沿,将初始值1写入循环寄存器位
LD I0.0
EU
LD V0.5
ED
OLD
MOVB 1, VB0
网络3
// 循环移位
LD V0.0
A T37
LD V0.1
A T38
OLD
LD V0.2
A T39
OLD
LD V0.3
A T37
OLD
LD V0.4
A T38
OLD
LD V0.5
A T39
OLD
EU
SLB VB0, 1
网络 4
// 各时间段控制
LD SM0.0
LPS
LD V0.0
O V0.3
ALD
TON T37, 200
LRD
LD V0.1
O V0.4
ALD
TON T38, 30
LPP
LD V0.2
O V0.5
ALD
TON T39, 20
网络 5
// 输出处理
LD SM0.0
LPS
LD V0.4
A SM0.5
O V0.3
ALD
= Q0.0
LRD
A V0.5
= Q0.1
LRD
LD V0.0
O V0.1
O V0.2
ALD
= Q0.2
LRD
LD V0.1
A SM0.5
O V0.0
ALD
= Q0.3
LRD
A V0.2
= Q0.4
LPP
LD V0.3
O V0.4
O V0.5
ALD
= Q0.5
六、实验结果与分析
1.实验结果:完成十字路口交通灯运行控制。
2.实验分析:启动面板,十字路口交通灯亮启,当定时器T37计时20s后十字路口的交通灯将会变换闪烁,闪烁时间由T38确定,计时3s后交通灯将统一变换到黄等待2s,这个时间由T39来控制,等时间一到交通指示等将再次变换到下一个指示灯,这样在继续20s后将又会往复进行交通等上诉的变换。
第二篇:单片机控制十字路口交通灯
设计题目:十字路口交通灯控制2
一、 要求
1、通过LED控制四个路口的红黄绿灯的变化。
2、绿灯表示通行,红灯表示停止,黄灯表示等待。
3、每次绿灯变红灯时黄灯先亮五秒,此时另外干道上的红灯不变。
4、每次变化时绿灯闪烁五次。
二、 分析
课程设计采用实验室的单片机作为主控来实现十字路口交通灯的变化规律,十字路口的红绿灯交替变化,用双色发光二级管来模拟交通灯变化,使用定时器/计数器0作为定时器,从P1和P3口输出。
三、 设计
1、硬件设计(包括设计方案及说明、完整的硬件连接图等)
(1)因为本实验是交通灯控制实验,所以要先了解交通灯的变化规律。假设一个十字路口为东西和南北方向,初始状态是状态0(各个路口都是红灯);首先是状态1(东路口通车,其他路口红灯);过一段时间装入状态2(东路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);再转入状态3(南路口绿灯亮,其他路口红灯亮);过一段时间转入状态4(南路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);再转入状态5(西路口绿灯亮,其他路口红灯亮);过一段时间转入状态6(西路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);再转入状态7(北路口绿灯亮,其他路口红灯亮);过一段时间转入状态8(北路口绿灯闪几次转黄灯亮,延时几秒,其他路口仍然红灯);最后循环至状态1。
(2)各用一组红黄绿色LED分别表示东南西北方向。
(3)由定时器来产生通车延时时间,时间间隔为5s。
(4)用软件延时方法产生“闪”延时时间。
说明:用CPU的P1口和P3口输出控制信号,控制12个LED灯(红、黄、绿),模拟交通灯的管理。各个输出口对应的IO口如下:
P1.0·····LED00
P1.1·····LED01
P1.2·····LED02
P1.3·····LED03
P1.4·····LED04
P1.5·····LED05
P1.6·····LED06
P1.7·····LED07
P3.2·····LED08
P3.3·····LED09
P3.4·····LED10
P3.5·····LED11
2、软件编程(包括流程图、完整的汇编源程序及其注释)
程序流程图如图1所示:
程序如下:
#include<reg52.h>
sfr light_address_1=0x90;
sfr light_address_2=0xB0;
sbit red_e=P1^0;
sbit yellow_e=P1^1;
sbit green_e=P1^2;
sbit red_s=P1^3;
sbit yellow_s=P1^4;
sbit green_s=P1^5;
sbit red_w=P1^6;
sbit yellow_w=P1^7;
sbit green_w=P3^2;
sbit red_n=P3^3;
sbit yellow_n=P3^4;
sbit green_n=P3^5;
bit light_up=0;
bit light_down=1;
unsigned char light_down_all=0xff;
unsigned char count=0;
void delay_MS(unsigned char data0);
void Init_timer0(void);
void light_state1();
void light_state2();
void light_state3();
void light_state4();
void light_state5();
void light_state6();
void light_state7();
void light_state8();
void main()
{
Init_timer0();
while(1)
{light_address_1=light_down_all;
light_address_2=light_down_all;
light_state1();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state2();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state3();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state4();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state5();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state6();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state7();
light_address_1=light_down_all;
light_address_2=light_down_all;
light_state8();
}
}
void light_state1() //东路口绿灯亮,其他路口红灯亮
{ red_s=light_up;
red_w=light_up;
red_n=light_up;
green_e=light_up;
count=0;
while(count<100)
{ }
}
void light_state2() //东路口绿灯闪几次转黄灯亮,延时几秒,其他路口红灯任然亮
{
unsigned char j;
red_s=light_up;
red_w=light_up;
red_n=light_up;
for(j=0;j<5;j++)
{
green_e=light_up;
delay_MS(500);
green_e=light_down;
delay_MS(500);
}
yellow_e=light_up;
count=0;
while(count<20)
{ }
}
void light_state3() //南路口绿灯亮,其他路口红灯亮
{
green_s=light_up;
red_e=light_up;
red_w=light_up;
red_n=light_up;
count=0;
while(count<100)
{ }
}
void light_state4() //南路口绿灯闪几次转黄灯亮,延时几秒,其他路口红灯亮
{
unsigned char j;
red_e=light_up;
red_w=light_up;
red_n=light_up;
for(j=0;j<5;j++)
{
green_s=light_up;
delay_MS(500);
green_s=light_down;
delay_MS(500);
}
yellow_s=light_up;
count=0;
while(count<20)
{ }
}
void light_state5() //西路口绿灯亮,其他路口红灯亮
{
red_e=light_up;
red_s=light_up;
red_n=light_up;
green_w=light_up;
count=0;
while(count<100)
{ }
}
void light_state6() //西路口绿灯闪几次转黄灯亮,其他路口红灯
{
unsigned char j;
red_e=light_up;
red_s=light_up;
red_n=light_up;
for(j=0;j<5;j++)
{
green_w=light_up;
delay_MS(500);
green_w=light_down;
delay_MS(500);
}
yellow_w=light_up;
count=0;
while(count<20)
{ }
}
void light_state7() //北路口绿灯亮,其他路口红灯亮
{
red_e=light_up;
red_s=light_up;
red_w=light_up;
green_n=light_up;
count=0;
while(count<100)
{ }
}
void light_state8() //北路口绿灯闪几次转黄灯亮,其他路口红灯亮
{
unsigned char j;
red_e=light_up;
red_s=light_up;
red_w=light_up;
for(j=0;j<5;j++)
{
green_n=light_up;
delay_MS(500);
green_n=light_down;
delay_MS(500);
}
yellow_n=light_up;
count=0;
while(count<20)
{ }
}
void delay_MS(unsigned char data0)
{
unsigned char i,j;
for(i=0;i<data0;i++)
for(j=0;j<120;j++);
}
void Init_timer0(void)
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
}
void Timer0_int() interrupt 1
{
count++;
TH0=0x3c;
TL0=0xb0;
}
3、调试说明
在实验室将程序输入电脑进行编译,连接好试验箱上的P1口和P3口与各个LED灯的连线后,将程序通过STC下载软件下载到单片机中,然后上电运行,观察各个LED灯的变化,通过调试,能够达到实验要求,各个LED灯交替闪烁变化,实现交通灯的控制。
下图是用keil软件编译的情况:
下图是STC下载软件:
4、设计结果及错误分析
在软硬件都调试完毕之后,在把所烧写的程序烧入单片机之后,我们开始进行性能的测试,在按下电源按钮后,能够进入交通灯模拟状态,该设计呢鞥够改变红绿灯亮的时间,使交通运行时间更具优化,也更具人性化,在保证交通畅通的情况下减少等待时间。
写好程序后进行了程序的调试和分析,经过调试,只是少了路口左转的功能,具有直行和左转一体的功能,也有黄灯闪烁等待的过程。通过多次的调试分析和论证,最终将程序完整化,完善化。
四、 总结
本系统的硬件控制电路图简单,用汇编语言编程时,位操作指令用的较多,但遇到了很多困难,最后还是采用C语言编写。本软、硬件系统在单片机开发装置上调试运行取得较好的效果,对灵活有效地利用交通灯控制行车安全,车辆分流有一定的实际意义。
从本交通信号灯自动控制系统的设计与实验中可以看出,涉及到数据输出程序的设计方法;模拟交通灯控制的方法;信号灯的使用.在此基础上我们可对其进行改进,加入中断的要求,从而涉及外部中断技术的基本使用方法和编程方法.8051内部定时/计数器的使用和编程方法;而且还可以在外部中断中增加用继电器的开合模拟急救车通过的声音等要求.
在整个设计与制作过程中,从一开始拿到题目,经过查阅有关方面的书籍,到分析与设计,以P1和P3口作为输出来控制LED灯的亮灭和闪烁,用C语言和Keil软件来编写程序,来实现对硬件电路的控制。对于程序的调试,通过多次调试,得到完整正确的程序。继而,将程序烧录到单片机芯片中,LED显示正常达到本次设计的目的。完成了适当的硬件电路的设计和软件的编程与调试、控制。