|
/*红绿灯项目
使用普中板A7
接口P0、P1、P2、静态数码管接口。
实现效果:
1.车行灯和人行灯实现交换亮灯。
2.静态数码管呈现9-0倒数,倒数后0闪3次,车道黄灯同时闪。
*/
#include "reg52.h"
#include "intrins.h"
#define LED1 P0 //静态数码管
typedef unsigned char u8;
typedef unsigned int u16;
//LED灯接口数据
sbit BLS1=P2^0; //人行绿灯1 D1
sbit BHS1=P2^1; //人行红灯1 D2
sbit DLS1=P2^2; //车行绿灯1 D3
sbit DHS1=P2^3; //车行黄灯1 D4
sbit DHD1=P2^4; //车行红灯1 D5
sbit DLS2=P2^5; //车形绿灯2 D6
sbit DHS2=P2^6; //车行黄灯2 D7
sbit DHD2=P2^7; //车行红灯2 D8
sbit BLS2=P1^0; //人行绿灯2 D9
sbit BHS2=P1^1; //人行红灯2 D10
u8 timeSJ[11]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f,0x00}; //静态数码管显示
void time(u16 T)
{
while(T--);
}
void DHS(u16 c) //黄灯开关函数
{
switch(c)
{
case 0:{DHS1=0,DHS2=0;}break; //车行黄灯亮
case 1:{DHS1=1,DHS2=1;}break; //车行黄灯灭
}
}
void PAT(u16 e) //闪烁函数
{
u16 d=0;
for(d=0;d<e;d++)
{
LED1=~timeSJ[10]; //数码管不显示
DHS(1); //调用黄灯函数
time(50000);
LED1=~timeSJ[9]; //数码管显示0
DHS(0);
time(50000);
}
DHS(1);
}
void main()
{
u16 a=0,b=0;
while(1)
{
for(a=0;a<2;a++) //for实现换灯
{
for(b=0;b<=10;b++)
{
if(b==10)
{
//换灯闪3次0 黄灯亮
if(a==0)
{
BLS1=1; //人行绿灯1灭
BHS2=1; //人行红灯2灭
DLS1=1; //车行绿灯1灭
DHD2=1; //车行红灯2灭
}
else
{
BLS2=1; //人行绿灯2灭
BHS1=1; //人行红灯1灭
DLS2=1; //车行绿灯2灭
DHD1=1; //车行红灯1灭
}
PAT(3); //函数修改形参改变闪烁次数
}
else
{
//从9开始倒数交叉显示灯亮
if(a==0)
{
LED1=~timeSJ[b];
BLS1=0; //人行绿灯1亮
BHS2=0; //人行红灯2亮
DLS1=0; //车行绿灯1亮
DHD2=0; //车行红灯2亮
time(50000);
}
else
{
LED1=~timeSJ[b];
BLS2=0; //人行绿灯2亮
BHS1=0; //人行红灯1亮
DLS2=0; //车行绿灯2亮
DHD1=0; //车形红灯1亮
time(50000);
}
}
}
}
}
}
|
|