?? 交通燈.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 + -