📄 car.c
字号:
delay(1);
i=(quan_l%100)/10;
lcd_dat(string[i]);
delay(1);
lcd_dat(string[11]); //小数点
delay(1);
i=quan_l%10;
lcd_dat(string[i]);
delay(1);
lcd_dat(string[12]); // m
delay(1);
EX0=1;
}
void interrupt_init() //中断实始化程序
{
TMOD=0x01; //设置T0为16位
TH0=-50000/256; //50MS初值
TL0=-50000%256;
ET0=1; //允许T0中断
EX0=1; //允许EX0中断
IT0=1; //EX0为边沿触发,下降沿有效
PX0=1; //EX0为高优先级中断
TR0=1; //T0开始运行
EA=1; //开总中断
}
void quan_1() //前进子程序
{
quan=0;
hou=1;
}
void hou_1() //后退子程序
{
hou=0;
quan=1;
}
void right_1() //右转子程序
{
leght=0;
right=1;
}
void leght_1() //左转子程序
{
right=0;
leght=1;
}
void zhxian() //直线前进子程序
{
right=0;
leght=0;
}
void sudu_0() //0档速度子程序,低速
{
sudu2=0;
sudu1=0;
}
void sudu_1() //1档速度子程序,中速
{
sudu2=0;
sudu1=1;
}
void sudu_2() //2档速度子程序,高速
{
sudu1=1;
sudu2=1;
}
void stop() //小车停止
{
quan=0;
hou=0;
right=0;
leght=0;
}
void start() //用于开始始就完成制作要求的动作
{
sudu_0(); //低速
leght_1(); //左转
hou_1(); //后退
delay(500);
sudu_0(); //低速
right_1(); //右转
quan_1(); //前进
delay(500);
zhxian(); //直线前进
sudu_1(); //完成制作要求的动作后开始中速前进,设置刚开始的速度
quan_1(); //前进
delay(1000);
}
main() //主函数
{
int j;
stop();
delay(1000);
lcd_init(); //液晶初始化
interrupt_init(); //中断初始化
start(); //完成制作要求的动作之后直线前进
while(1)
{
dang=0; //先拉低P3。0口的电平
for(j=0;j<10;j++); //延时一会
if(dang) //是否检测到障碍物
{
for(j=0;j<100;j++); //延时一会,去干扰
if(dang) //重新判断是否检测到障碍物
{
sudu_0(); //低速,遇到障碍物时置小车为低速
leght_1(); //左转
hou_1(); //后退
delay(500);
sudu_0(); //低速
right_1(); //右转
quan_1(); //前进
delay(500);
}
}
else //没有遇到障碍物且时间末到时,高速前进
{
if(second<30)
{
zhxian(); //直线前进
sudu_2(); //高速
quan_1(); //前进
}
}
if(second==30) //小车行驶时间到,则停止,并且显示时间,路程和速度
{
stop(); //小车停止
lcd_init(); //液晶初始化
delay(10);
lcd_pos(0x03); //设置液晶第一行显示数据的位置
delay(1);
i=hour/10; //小时高位
lcd_dat(string[i]); //显示
delay(1);
i=hour%10; //小时低位
lcd_dat(string[i]);
delay(1); //延时
lcd_dat(string[10]); //显示 :
delay(1);
i=min/10; //分高位
lcd_dat(string[i]);
delay(1);
i=min%10; //分低位
lcd_dat(string[i]);
delay(1);
lcd_dat(string[10]); //显示 :
delay(1);
i=second/10; //秒高位
lcd_dat(string[i]);
delay(1);
i=second%10; //秒低位
lcd_dat(string[i]);
delay(1);
lcd_pos(0x40); //设置液晶第二行数据显示的位置
i=quan_h%10;
if(i) //如果里程高位为0则隐藏
lcd_dat(string[i]);
else
lcd_dat(string[13]);
delay(1);
i=quan_l/100;
if(quan_h%10==0) //如果里程高位为0,且次高位为零则隐藏
{
if(i)
lcd_dat(string[i]);
else
lcd_dat(string[13]);
}
else
lcd_dat(string[i]);
delay(1);
i=(quan_l%100)/10;
lcd_dat(string[i]);
delay(1);
lcd_dat(string[11]); //小数点
delay(1);
i=quan_l%10;
lcd_dat(string[i]);
delay(1);
lcd_dat(string[12]); // m
delay(1);
lcd_pos(0x49);
k=s/100; //速度高位
if(k) //如果里程高位为0则隐藏
lcd_dat(string[k]);
else
lcd_dat(string[13]);
delay(1);
k=(s%100)/10; //速度次高位
if(s/100==0) //如果里程高位为0,且次高位为零则隐藏
{
if(k)
lcd_dat(string[k]);
else
lcd_dat(string[13]);
}
else
lcd_dat(string[k]);
delay(1);
k=s%10; //速度低位
lcd_dat(string[k]);
delay(1);
lcd_dat(string[16]); // c
delay(1);
lcd_dat(string[12]); // m
delay(1);
lcd_dat(string[14]); // /
delay(1);
lcd_dat(string[15]); // s
delay(1);
second=31;
sudu_0();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -