基于51单片机汽车信号灯的课程设计程序源代码:
#include<reg52.h>
void turn_left();
void turn_right();
void emergency();
void brake_turn_left();
void brake_turn_right();
void brake_emergency();
void turn_left_brake_emergency();
void turn_right_brake_emergency();
void delay(int z);
unsigned char temp;
unsigned char time=0; //记录中断次数,time=30时产生1HZ的
sbit L_FRNT=P1^0; //左前灯
sbit R_FRNT=P1^1; //右前灯
sbit L_DASH=P1^2; //左仪表
sbit R_DASH=P1^3; //右仪表
sbit L_BACK=P1^4; //左后灯
sbit R_BACK=P1^5; //右后灯
//sbit P3_0=P3^0;
//sbit P3_4=P3^4;
void main(void)
{
TMOD=0x01; //定时器0,方式1
TH0=(65536-50000)/256; //置初值,产生30MS定时
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
//置成低电平
while(1)
{
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
P2=0xff;
temp=P2; //P1先送0xff,P1中保存的是按键的值
//暂存键值到temp
temp=temp&0x0f; //因为高四位不用,去掉
switch(temp)
{
case 0x0b: { L_BACK=0; R_BACK=0;} break; //刹车
case 0x0d: emergency(); break; //紧急
/*case 0x0B: //停靠
{
L_FRNT=!L_FRNT;
R_FRNT=!R_FRNT;
L_BACK=!L_BACK;
R_BACK=!R_BACK;
}break;*/
case 0x07: turn_left();break; // 左转
case 0x0e: turn_right();break; //右转
case 0x03: brake_turn_left();break;//刹车左转
case 0x0a: brake_turn_right();break;//刹车右转
case 0x06: brake_emergency();break; //刹车紧急
case 0x01: turn_left_brake_emergency();break; // 左转刹车紧急case 0x08: turn_right_brake_emergency();break; // 右转刹车紧急default:break;
}
delay(28); P1=0xff;
}
void turn_left() // 左转
{
if(time==5)
{
L_FRNT=!L_FRNT;
L_BACK=!L_BACK;
L_DASH=!L_DASH;
time=0;
}
else time++;
}
void turn_right() //右转
{
if(time==5)
{
R_FRNT=!R_FRNT;
R_BACK=!R_BACK;
R_DASH=!R_DASH;
time=0;
}
else time++;
}
void emergency()
{
if(time==5)
{
L_FRNT=!L_FRNT;
R_FRNT=!R_FRNT;
L_DASH=!L_DASH;
R_DASH=!R_DASH;
L_BACK=!L_BACK;
R_BACK=!R_BACK;
time=0;
}
else time++;
}
void brake_turn_left() //刹车左转{
R_BACK=0;
if(time==5)
{
L_BACK=!L_BACK;
L_FRNT=!L_FRNT;
L_DASH=!L_DASH;
time=0;
}
else time++;
}
void brake_turn_right() //刹车右转
{
L_BACK=0;
if(time==5)
{
R_BACK=!R_BACK;
R_FRNT=!R_FRNT;
R_DASH=!R_DASH;
time=0;
}
else time++;
}
void brake_emergency() //刹车紧急
{
L_BACK=0;
R_BACK=0;
if(time==5)
{
R_FRNT=!R_FRNT;
L_FRNT=!L_FRNT;
R_DASH=!R_DASH;
L_DASH=!L_DASH;
time=0;
}
else time=time+1;
}
void turn_left_brake_emergency() // 左转刹车紧急{
R_BACK=0;
if(time==5)
{
L_BACK=!L_BACK;
R_FRNT=!R_FRNT;
R_DASH=!R_DASH;
L_FRNT=!L_FRNT;
L_DASH=!L_DASH;
time=0;
}
else
{time=time+1;}
}
void turn_right_brake_emergency() // 右转刹车紧急{
L_BACK=0;
if(time==5)
{
R_BACK=!R_BACK;
R_FRNT=!R_FRNT;
R_DASH=!R_DASH;
L_FRNT=!L_FRNT;
L_DASH=!L_DASH;
time=0;
}
else
{time=time+1;}
}
void delay(int z) //延时1ms
{
int i,j,n;
for(n=z;n>0;n--)
{
for(i=102;i>0;i--)
for(j=3;j>0;j--);
}
}。