#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar cs1,cs2,num1,num2;
uchar code table[]={0,1}; //占空比50%
sbit qdg=P3^4; //前红外对管,检测小车前方障碍
sbit xdg=P3^5; //下红外对管,检测小车是否碰到台阶
sbit in1=P1^0; //L298输入
sbit in2=P1^1; //L298输入
sbit in3=P1^2; //L298输入
sbit in4=P1^3; //L298输入
sbit ena=P1^4; //L298输入使能A
sbit enb=P1^5; //L298输入使能B
void delay(int z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化函数
{
TMOD=0x11;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
ET0=1;
TR0=1;
EA=1;
}
void main()
{
init();
while(1)
{
if(qdg==1) //如果前方没有检测到障碍,对管输出高电平
{
ena=1; //L298使能端A为高
enb=1; //L298使能端B为高
in2=0; //L298IN2为低,小车左轮前进
in4=0; //L298IN4为低,小车右轮前进
}
else
{
ena=0; //如果前方检测到障碍,L298使能端为低 ,左轮停止(小车转弯)
delay(2000);
ena=1; //一秒后转弯结束,继续两轮驱动前进
}
if(xdg==0) //如果小车下方未检测到障碍(碰到台阶)
{
in2=1; //L298IN2为高,小车左轮后退
in4=1; //L298IN4为高,小车右轮后退
delay(2000);
ena=0; //后退一秒后,左轮停止(转弯)
delay(2000); //一秒后转弯结束,小车继续前进
}
}
}
void timer0() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
cs1++;
if (cs1==10)
{
cs1=0;
num1++;
if(num1==3)
num1=0;
in1=table[num1];
num2++;
if(num2==3)
num2=0;
in3=table[num2];
}
}
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit CS = P3^0;
sbit CLK = P3^1;
sbit DO = P3^6;
sbit sw = P3^7; //定义正反转开关
sbit s0 = P2^0;
sbit s1 = P2^1;
sbit ENA = P2^4;
int total = 256;
void delay(int time){
int i;
for(i = 0;i < time;i++){
//...
}
}
void Move(int time){
ENA = 1;
delay(time);
ENA = 0;
delay(total - time);
}
int readData(){
int temp = 0;
int i;
DO = 1;
_nop_();
_nop_();
CS = 0;
_nop_();
_nop_();
CLK =0;
_nop_();
_nop_();
CLK =1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
CLK = 1;
_nop_();
_nop_();
CLK = 0;
_nop_();
_nop_();
for(i = 0;i < 8;i++){
CLK = 1;
_nop_();
_nop_();
temp <<= 1;
if(DO){
temp ++;
}
CLK = 0;
_nop_();
_nop_();
}
CS = 1;
_nop_();
_nop_();
return temp;
}
void main(){
int state = sw;
int time = 0;
while(1){
state = sw;
if(state){
s0 = 0;s1 = 1;//正转
}
else{
s0 = 1;s1 = 0;//反转
}
time = readData();
Move(time);
}
}
#include<reg51.h>
sbit K1=P1^6; //P^0接开关
sbit LED=P1^7;//接LED
void main(void)
{
while(1)
{
LED=K1;
}
}
按模块处理,把3个独立的程序变成3个独立的模块,然后使用switch控制,相当于菜单吧。
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y