实验项目名称:交通灯控制
一、实验目的:
1. 对所学的电子线路、单片机原理等方面知识的综合训练,巩固所学知识提高应用能力。
2. 培养独立分析问题和解决问题的能力,提高用所学知识解决实际问题的能力。
3. 提高设计及动手操作能力,对今后的学习及将来工作起到促进作用。
二、实验内容与原理:
设计电路、完成电路连接、调试、设计程序、完成程序调试及软硬件综合调试,程序
固化等过程,达到脱机运行目的。(样机单独运行)
要求实现设一个十字路口,1、3 为南北方向;2、4 为东西方方向;每个方向设有
东西方向
南北方向
1
2
3
4
红
20S
20S
绿
黄
红
绿
黄
4S
20S
4S
16S
红、黄、绿信号灯共 12 个。单片机控制 4 个路口亮灭的规律:设初态为 4 个路口的红灯
全亮,之后 1、3 路口的红灯灭,绿灯亮,2、4 路口的红灯亮,1、3 路口方向通车。延
迟一段时间后,1、3 路口的绿灯灭,而黄灯开始闪烁若干次后熄灭,点亮 4 个路口的红
灯,之后再点亮 2、4 路口的绿灯,红灯熄灭,2、4 路口方向开始通车。延迟一段时间
后,2、4 路口绿灯熄灭,黄灯开始闪烁若干次后熄灭,而红灯点亮,然后再切换到 1、3
路口方向。之后重复上述过程。
三、实验器材(设备、元器件、软件工具、平台):
平台:windows xp
软件工具:EasyPRO80B、MedwinV3.0、Proteus
元器件:面包板、AT89S51 单片机、7407 芯片、12MHz 晶振、20pF 电容、
300Ω电阻、1KΩ电阻、10μF 电解电容、蜂鸣器、手动开关、led 数码管、发光二极管
插线若干
设 备:微机、AT89S51、微机一台 2. ME-52HP 仿真器 一台、开关电源一台、
万用表一台、EasyPRO80B 写入器一台
四、实验步骤:
电路设计
程序设计:
#include
typedef unsigned char u8;
typedef unsigned int u16;
sbit red1 =P0^0;
sbit red2 =P0^3;
sbit gre1=P0^1;
sbit gre2=P0^4;
sbit yel1=P0^2;
sbit yel2=P0^5;
sbit sw=P0^6;
sbit swp=P0^7;
code u8 table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(u16 n)
{
//延时程序
for(mm=50;mm>0;mm--)
display(n);
yel2=~yel2;
}
}
u16 i,j;
for(i=n;i>0;i--)
for(j=1180;j>0;j--);
}
void display(u8 nn)
{
u8 n,m;
n=nn / 10;
m=nn % 10;
sw =1;
swp =0;
P2=~table[n];
delay(1);
sw=0;
swp=1;
P2=~table[m];
delay(1);
}
void dis()//显示 16 倒计时
{
u8 n,mm;
for(n=16;n>0;n--)
{
for(mm=50;mm>0;mm--)
display(n);
}
}
void diss()//显示 4 倒计时
{
u8 n,mm;
for(n=4;n>0;n--)
{
void diss2()//显示 4 倒计时
{
u8 n,mm;
for(n=4;n>0;n--)
{
for(mm=50;mm>0;mm--)
display(n);
yel1=~yel1;
}
}
void zero()
{
}
void first()
{
red1=0;
red2=0;
gre1=0;
gre2=0;
yel1=0;
yel2=0;
zero();
red1=1;
gre2=1;
dis();
zero();
red1=1;
yel2=1;
diss();
zero();
red2=1;
gre1=1;
dis();
zero();
red2=1;
yel1=1;
diss2();
}
void main()
{
P0=0x00;
P0=0xff;
delay(400);
while(1)
{
first();
display(12);
}
}
正确进行电路连接(电路布局、芯片管角、正负极、短路 、断路)
运用仿真器调试程序:(进行汇编、调试、运行。目的:达到所设计任务的要求)
写入器写入程序(一个是写入过程,另一个是写入后的芯片插入电路中完成设计功能)
五、实验数据及结果分析:
实验结果:开机所有灯全亮 4 秒后;南北开始绿灯计时 16 秒,东西红灯亮;后黄灯
闪烁间隔 1 秒并倒计时;南北红灯,东西绿灯亮,倒计时 16 秒;后黄灯闪烁间隔 1 秒并
倒计时显示。
红绿灯两路用 P0^0 ~P0^6 控制南北 RED,GREEN,YELLOW,东西 RED,GREEN,
YELLOW;数码管采用扫描方式显示,段选接 P2 口并上拉电阻,P0^6,P0^7 接位选信
号。
六、实验结论:
与实验要求相符,实现所有要求。
七、思考题
1、红绿灯点亮时间如何控制?
答:调用 10ms 延时 delay(),点亮对应 led 后延时调用 delay(1600);即可实现 16 秒
延时,根据要求设置延时时间,达到控制 led 的目的。
八、实验总结
总的来说实验完成的还是不错的,只是在插线时有与连接不紧密,导致多次重新插装,
浪费太多时间,因此下次做实验应认真插线完成快速实验。