本帖最后由 1194856051 于 2013-5-25 15:48 编辑
课题设计,按启动键,交通灯开始工作,东西绿灯亮,南北红灯亮。30s后,东西南北黄灯亮2s,然后东西红灯亮,南北绿灯亮。东西南北黄灯亮2s,然后东西绿灯亮,南北红灯亮。如此循环,按停止键交通灯停止。
#include <reg51.h>
#define uchar unsigned char
sbit dx_g=P1^0;//东西绿
sbit dx_y=P1^1;//东西黄
sbit dx_r=P1^2;//东西红
sbit nb_g=P1^3;//南北绿
sbit nb_y=P1^4;//南北黄
sbit nb_r=P1^5;//南北红
unsigned int num=0;
unsigned int x=600;
void delay10ms() //按键10ms去抖
{
uchar a,b;
for(a=50;a>0;a--)
for(b=100;b>0;b--);
}
uchar keyscan() //选择开始P0.0或停止p0.1
{
P0=0xff;
if((P0&0x0f)!=0x0f)
{
delay10ms();
if((P0&0x0f)!=0x0f)
return(P0&0x0f);
}
else return(0);
}
void a_int() interrupt 1 using 1 //定时器中断函数
{
num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void stop() // 停止子函数
{
dx_g=1;dx_y=1;dx_r=1;
nb_g=1;nb_y=1;nb_r=1;
}
void start() //开始子函数
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;TR0=1;
while(1)
{
dx_g=0;dx_y=1;dx_r=1;
nb_g=1;nb_y=1;nb_r=0;
while(num!=x);
num=0;
dx_g=1;dx_y=0;dx_r=1;
nb_g=1;nb_y=0;nb_r=1;
while(num!=40);
num=0;
dx_g=1;dx_y=1;dx_r=0;
nb_g=0;nb_y=1;nb_r=1;
while(num!=x);
num=0;
dx_g=1;dx_y=0;dx_r=1;
nb_g=1;nb_y=0;nb_r=1;
while(num!=40);
num=0;
}
}
main ()
{
uchar key;
while(1)
{
key=keyscan();
switch(key)
{
case 0x0e : start();break;
case 0x0d : stop() ;break;
default : break;
}
}
}
原理图.zip
(4.98 KB, 下载次数: 8)
俺的程序,帮看看停止不了。
我用P0.0作为开始。P0.1作为停止。p1.0~1.5为6个灯,求大神帮我编一个吧!
一周热门 更多>