8255A并行口实验三控制交通灯怎么做?

来源:百度知道 编辑:UC知道 时间:2024/06/15 16:53:03
五、编程提示
①通过8255A控制发光二极管PB3、PB0、PA5、PA2对应黄灯,PB1、PA6、PA3、PA0对应红灯,PB2、PA7、PA4、PA1对应绿灯,以模拟交通路灯的管理。
②要完成本实验,必须先了解交通路灯的亮灭规律,没有一个十字路口1、3为南北方向,2、4为东西方向,初始状态为四个路口的红灯全亮。之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车。延时一段时间后,1、3路口的绿灯熄灭,而1、3路口的黄灯开始闪烁,闪烁若干次以后,1、3路口红灯亮,而同时2、4路口的绿灯亮,2、4路口方向通车,延时一段时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到1、3路口方向,之后,重复上述过程。
③程序中设定好8255A的工作模式,及三个端口均工作在方式0,并处于输出状态。
④各发光二极管共阳极,使其点亮应使8255A相应端口的位清0。
给位高手帮帮忙,感激不尽!

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar b=5,c;
unsigned char code a[]=;
sbit sg=P1^0;
sbit sy=P1^1;
sbit sr=P1^2;
sbit hg=P1^3;
sbit hy=P1^4;
sbit hr=P1^5;
sbit ge=P1^6;
sbit shi=P1^7;
uint num1,num2,num3;

void delay(unsigned int z1)
{
unsigned int a1,b1;
for(a1=z1;a1>0;a1--)
for(b1=12500;b1>0;b1--);
}
void main()
{
P2=0;
P1=0;
shi=1;
P2=a[8];
shi=0;
ge=1;
P2=a[4];
ge=0;
TMOD=0X11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{

switch(num2) //红绿灯
{
case(0): //10s内s绿灯亮
sr=0;
hg=0;
sg=1;
hr=1;
break;
case(1): //5S:竖黄横红
sg