📄 交通灯.c
字号:
/*程序功能:89S52单片机交通灯模拟程序*************/
/*设计者:吴海林**********************/
/*硬件说明:P0口作为数码管段控,P1口作为数码管位近代
P2口作为交通灯信号模拟P2.0为绿,P2.1为黄
P2.3为红,P2.4为绿,P2.5为黄,P2.6为红*****************/
#include "reg51.h"
#include "absacc.h"
typedef unsigned char uchar;
sbit green1=P2^0;
sbit red1=P2^1;
sbit yellow1=P2^2;
sbit green2=P2^3;
sbit red2=P2^4;
sbit yellow2=P2^5;
void contr(void);
void time(void);
void deal0(void);
void deal1(void);
void deal2(void);
void deal3(void);
void display(uchar data *p);
void deltime(uchar s);
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //在ROM中定义数字转换码;
uchar data b[3];
uchar flag,state,second,n=0;
void main(void)
{ TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
contr();
}
void contr(void)
{loop:state=0;
second=10;
while(1)
{switch(state)
{case 0: if(second==0){state=1;second=5;}
else deal0();break;
case 1: if(second==0){state=2;second=5;}
else deal1();break;
case 2: if(second==0){state=3;second=5;}
else deal2();break;
case 3: if(second==0){state=0;second=10;}
else deal3();break;
default: goto loop;
}
}
}
void deal0(void)
{ green1=1;red1=0;yellow1=0;
green2=0;red2=1;yellow2=0;
b[0]=second%10;b[1]=second/10;
b[2]=(second+5)%10;b[3]=(second+5)/10;
display(b);
}
void deal1(void)
{ green1=0;red1=0;yellow1=1;
green2=0;red2=1;yellow2=0;
b[0]=second%10;b[1]=second/10;
b[2]=second%10;b[3]=second/10;
display(b);
}
void deal2(void)
{ green1=0;red1=1;yellow1=0;
green2=1;red2=0;yellow2=0;
b[0]=second%10;b[1]=second/10;
b[2]=(second-5)%10;b[3]=(second-5)/10;
display(b);
}
void deal3(void)
{ green1=0;red1=1;yellow1=0;
green2=0;red2=0;yellow2=1;
b[0]=second%10;b[1]=second/10;
b[2]=second%10;b[3]=second/10;
display(b);
}
void display( uchar data *p)
{ uchar data i;
uchar sel=0x01;
for(i=0;i<=3;i++)
{P0=tab[*p];
P1=~sel;
deltime(1);
P1=0xff;
p++;
sel=sel<<1;
}
}
/*延时程序,使数码管每次点亮的时间足够长*/
void deltime(uchar s)
{ uchar data j;
while(s--)
{for(j=0;j<=25;j++);}
}
void time(void) interrupt 1 using 1
{TR0=0;
TH0=0x3c;
TL0=0xb0;
n++;
if(n==20)
{n=0;second--;}
TR0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -