|
#include<reg52.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit L1=P3^0;
sbit L2=P3^1;
sbit H1=P3^4;
sbit H2=P3^5;
sbit H3=P3^6;
sbit H4=P3^7;
void XS_YS(void) //延時函數,延時約0.6毫秒
{
uint i;
for(i=0;i<200;i++);
}
void delay(int num) //延時函數
{
int x,y;
for(x=num; x>0; x--)
for(y=110; y>0; y--)
{
;//延時1ms
}
}
void ShuMa_XS(uint c,uint b,uint a)
//數碼顯示并延時 c 為倒數數字 ,b=0位黃燈不閃爍,b=1位黃燈閃爍,
//c 需要數碼顯示時間,a=1;表示1,3路口黃燈閃爍;a=2表示2,4路口閃爍
{
uchar ShuZi[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; //共陰數碼顯示
// 0 1 2 3 4 5 6 7 8 9
uint e=0; //必要參數 C表示秒數,
delay(100);
if(b==0) //b=0位黃燈不閃爍
{
while(1) //保持數顯示的穩定
{
P2=0XF1;P0=ShuZi[c/10];XS_YS(); //十位顯示
P2=0XFF;XS_YS(); //端口初始化------必要!!!!!!!
P2=0XFC;P0=ShuZi[c%10];XS_YS(); //個位顯示
P2=0X00;e++; //e從0加至200,延時,保持數顯示的時間
if(c==0) {delay(800);break;} //c=0執行完畢跳出
if(e==200){c--,e=0; }} //C--倒敘秒數
}
else if(b==1)//b=1位黃燈閃爍
{
while(1) //保持數顯示的穩定
{
if(a==1){P2=0XED;}
else if(a==2){P2=0XDD;} //a=1;表示1,3路口黃燈閃爍;a=2表示2,4路口閃爍
P0=ShuZi[c/10];XS_YS(); //十位顯示
P2=0XFF;XS_YS(); //端口初始化------必要!!!!!!!
if(a==1){P2=0XE8;}
else if(a==2){P2=0XD8;} //a=1;表示1,3路口黃燈閃爍;a=2表示2,4路口閃爍
P0=ShuZi[c%10];XS_YS(); //個位顯示
P2=0X00;e++; //e從0加至200,延時,保持數顯示的時間
if(c==0) {delay(800);break;} //c=0執行完畢跳出
if(e==200){c--,e=0;}} //C--倒敘秒數
}
}
//1號路口對應南路口,2號路口對應東路口
//3-----------北----, 4-----------西
void main()
{
uint i=0;
P1=0x00;P2=0xFF;//初始化
delay(20);
IT0=0;EX0=1;EA=1;
while(1)
{
P1=0XA9; //1,3 直行
ShuMa_XS(30,0,0);
ShuMa_XS(3,1,1);
P1=0XA6; //2,4 轉彎
ShuMa_XS(15,0,0);
ShuMa_XS(3,1,2);
P1=0X9A; //1,3 直行
ShuMa_XS(15,0,0);
ShuMa_XS(3,1,1);
P1=0X6A; //2,4 轉彎
ShuMa_XS(30,0,0);
ShuMa_XS(3,1,2);
}
}
void ZhongDuan0()interrupt 1
{
P2=0X00;P0=0X40;delay(200);delay(200);
H1=1;H2=1;H3=1;H4=1;L1=0;L2=0; //反轉必要參數
if(P3==0XE8) //南路口
{ delay(20); //消抖
if(P3==0XE8)
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20);
switch(P3)
{ case 0X0A: P1=0X9A;delay(30);break; //直行
case 0X09: P1=0XA9;delay(30);break;}} //轉彎
}
if(P3==0XD8)
{ delay(20);
if(P3==0XD8) //東路口
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20);//反轉必要參數
switch(P3)
{ case 0X0A: P1=0XA6;delay(30);break; //直行
case 0X09: P1=0X6A;delay(30);break;}}
}
if(P3==0XB8)
{delay(20); //消抖
if(P3==0XB8) //北路口
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20); //反轉必要參數
switch(P3)
{ case 0X0A: P1=0XA6;delay(30);break; //直行
case 0X09: P1=0X6A;delay(30);break;}} //轉彎
}
if(P3==0X78)
{delay(20); //消抖
if(P3==0X78) //西路口
{H1=0;H2=0;H3=0;H4=0;L1=1;L2=1;delay(20); //反轉必要參數
switch(P3)
{ case 0X0A: P1=0X9A;delay(30);break; //直行
case 0X09: P1=0XA9;delay(30);break;}} //轉彎
}
}
|
-
數顯
-
緊急干預
-
-
項目8 交通燈設計.zip
2020-3-29 14:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
310.12 KB, 下載次數: 38, 下載積分: 黑幣 -5
評分
-
查看全部評分
|