?? 交通燈控制器.c
字號:
/************************************/
/*程序名:TIMER0控制交通燈 */
/*作 者 :鐵手一郎 */
/*時 間 :2009.6.20 */
/*Q Q :347999853 */
/*信息共享 */
/************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;
static uchar second;
bit red,green,yellow,turnred;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/***************顯示子程序**********************/
void display(uchar sun)
{
uchar shi,ge;
ge=table[sun/10];
shi=table[sun%10];
P2=0xff;
P0=ge;
P2=0x01;
delay(5);
P2=0xff;
P0=shi;
P2=0x02;
delay(5);
P2=0xff;
P0=ge;
P2=0x04;
delay(5);
P2=0xff;
P0=shi;
P2=0x08;
delay(5);
P2=0xff;
P0=ge;
P2=0x10;
delay(5);
P2=0xff;
P0=shi;
P2=0x20;
delay(5);
P2=0xff;
P0=ge;
P2=0x40;
delay(5);
P2=0xff;
P0=shi;
P2=0x80;
delay(5);
}
/*****************清零函數************************/
void crl(void)
{
display(0);
}
void main()
{
TMOD=01;
TH0=-50000/256;
TL0=-50000%256;
EA=1;
ET0=1;
TR0=1;
second=30;
red=1;
P1=0xf5;
while(1)
{
display(second);
}
}
uchar count;
/*****************中斷服務函數*******************/
void T0_time() interrupt 1
{
TH0=-50000/256;
TL0=-50000%256;
count++;
if (count==20)
{
count=0;
second--;//秒減1
if(second==0)
{ //這里添加定時到0的代碼 ,可以是燈電路,繼電器吸合等,或者執行一個程序
if(red)
{
red=0;yellow=1;
second=5;
P1=0xdb;//黃燈亮5秒
}
else if(yellow && !turnred)
{
yellow=0;green=1;
second=50;
P1=0xee;//綠燈亮50秒
}
else if(green)
{
yellow=1;green=0;
second=5;
P1=0xdb;//黃燈亮5秒
turnred=1;
}
else if(yellow && turnred)
{
red=1;yellow=0;
P1=0xf5;;//紅燈亮60秒
second=30;
turnred=0;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -