#include

sbit pwm = P2^0;    //定义舵机p20

sbit ENA = P3^6;   //定义驱动模块

sbit ENB = P3^7;   //

sbit IN1 = P3^0;

sbit IN2 = P3^1;

sbit IN3 = P3^2;

sbit IN4 = P3^3;   //定义驱动模

/*定义光电管,光电管检测到黑线输出高电平,否则输出低电平*/

sbit zuoz = P2^7;  //定义最左边 光电

sbit zuo = P2^6;        //定义中左边 光电

sbit you = P2^5;        //定义中右边 光电

sbit youy = P2^4;  //定义最右边光电模块

unsigned int         sum1 = 0; //定义几个光电管的和1

unsigned int         sum2= 0;  //定义几个光电管的和2

unsigned int         i ;

void zhengzhuan();            //前进

void tingzhi();            //停止

void youzhuan();

void zuozhuan();

void quansu();

void InitTimer();

typedef unsigned int uint;

typedef unsigned char uchar;

void delay_ms(uint x)

{

uint i;

while(x--)

for(i=0;i<125;i++);

}

void delay(int z)//延时函数,调节电机转速

{

int i,j;

for(i=2;i>0;i--)

for(j=z;j>0;j--);

}

void InitTimer(void)

{

TMOD=0x11;//开定时器0,1

TH0=-18432/256;//定时20MS,20MS为一个周期

TL0=-18432%256;

TH1=-1382/256;//定时1.5MS,这时舵机处于0度

TL1=-1382%256;

EA=1;//开总断

TR0=1;//开定时器0

ET0=1;

TR1=1;//开定时器1

ET1=1;

}

//输出PWM信号

uint pwm_value=1382;                     //初值为1.5ms

uint value[]={1150,1290,1382,1474,1580,};//定义1.2ms,1.4ms,1.5ms,1.6ms,1.75ms;

void main()

{

while(1)

{

uint j;

InitTimer();

pwm_value=1382;

sum1=zuoz&zuo&you&youy;

sum2=zuoz|zuo|you|youy;

if(zuoz==1&&zuo==0)

j=0;

else if(zuo==1&&you==0&&zuoz==0)

j=1;

else if(you==1&&zuo==0&&youy==0)

j=2;

else if(youy==1&&you==0)

j=3 ;

else if(sum1==1) //所有光电管输出高电平,停止

j=4;

else if(sum2==0)  //所有光电管输出低电平,前进

j=5;

else  j= 6 ;

switch(j)

{

case 0: pwm_value=value[4]; delay_ms(100);break;    //舵机输出小偏转角度 。高电平1.3ms

case 1: pwm_value=value[3]; delay_ms(50);break;

case 2: pwm_value=value[1]; delay_ms(50);break;

case 3: pwm_value=value[0]; delay_ms(100);break;

case 4: pwm_value=value[2]; delay_ms(50);break;

case 5: pwm_value=value[2]; delay_ms(50);break;

default : break;

}

while((zuoz==1)&&(zuo==0))//判断当左边光电管遇到黑线,

{                                                        //右边和前边的光电管遇到白线时左转

zuozhuan();//调用左转函数

}

while((zuoz==0)&&(zuo==1)&&(you==0))//判断当右边光电管遇到黑线,

{                                                        //左边和前边的光电管遇到白线时右转

zhengzhuan();//

}

while((zuo==0)&&(you==1)&&(youy==0))//判断当左边光电管遇到黑线,右边光电管也遇到黑线

{                                                        //前边的光电管遇到白线时停止

zhengzhuan();//调用停止函数

}

while((you==0)&&(youy==1))

{

youzhuan();

}

while((zuo==0)&&(zuoz==0)&&(you==0)&&(youy==0))

{

zhengzhuan();

}

while((zuo==1)&&(zuoz=1)&&(you==1)&&(youy==1))

{

tingzhi();

}

}

}

/*以下调用函数*/

void timer0(void) interrupt 1//定时器0中断函数

{

pwm=1;

TH0=-18432/256;

TL0=-18432%256;

TR1=1;

}

void timer1(void) interrupt 3//定时器1中断函数

{

pwm=0;

TH1=-pwm_value/256;

TL1=-pwm_value%256;

TR1=0;

}

void tingzhi()

{

ENA=1;

ENB=1;

IN1=0;

IN2=0;

IN3=0;

IN4=0;

}

void zhengzhuan()//左右轮协同前进子函数

{        ENA=1;

ENB=1;

IN1=1;

IN2=0;

IN3=1;

IN4=0;

delay(10-1);//pwm调速

IN1=0;

IN2=0;

IN3=0;

IN4=0;

delay(1);

}

void zuozhuan()//左右轮协同左转子函数

{        ENA=1;

ENB=1;

IN1=0;

IN2=0;

IN3=1;

IN4=0;

delay(10-1);//pwm调速

IN1=0;

IN2=0;

IN3=0;

IN4=0;

delay(1);

}

void youzhuan()//左右轮协同右转子函数

{        ENA=1;

ENB=1;

IN1=1;

IN2=0;

IN3=0;

IN4=0;

delay(10-1);//pwm调速

IN1=0;

IN2=0;

IN3=0;

IN4=0;

delay(1);

}

void quansu()

{

ENA=1;

ENB=1;

IN1=1;

IN2=0;

IN3=1;

IN4=0;

}

循黑线程序c语言,51单片机舵机循黑线小车程序相关推荐

  1. 51单片机led灯闪烁程序C语言,51单片机控制led灯闪烁程序

    Keil 写程序的过程,建立工程-->保存工程-->建立文件-->添加文件到工程-->编写程序-->编译-->下载程序. #include sbit LED = P ...

  2. 万能遥控程序c语言,51单片机万能红外遥控解码程序

    51hei单片机论坛里流传的遥控解码程序现在都弱爆了根本解不了现在的遥控自己写个万能红外遥控解码 本程序中需要用的头文件下载:http://www.51hei.com/mcu/2564.html // ...

  3. 键盘与显示实验程序c语言,51单片机按键控制数码管程序

    单片机数码管应用,数码管扫描 #include #define uint unsigned int #define uchar unsigned char uchar c; sbit p10=P1^0 ...

  4. c51单片机蜂鸣器程序C语言响,单片机蜂鸣器响生日快乐编程程序

    单片机蜂鸣器响生日快乐编程程序 #include #define   uint   unsigned int #define   uchar  unsigned char sbit      spea ...

  5. 单片机自动调光C语言,51单片机触控调光程序C语言

    /********************************************************************************************* 程序名: ...

  6. ds12c887程序C语言,51单片机驱动DS12C887的时钟芯片C语言程序

    本程序旨在读出DS12C887的时间,显示部分只做了分和秒的部分,已通过测试,详细注释很好用的. #include < absacc.h > #include < reg51.h & ...

  7. c语言pID程序怎么设计,51单片机PID的算法实现程序C语言

    #include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; ...

  8. 51单片机程序加密c语言,51单片机24C04密码锁(C程序+Proteus仿真)

    #include #include #include #define uint unsigned int #define uchar unsigned char #define NOP4() {_no ...

  9. 电梯程序c语言51单片机,基于51单片机的六层电梯控制系统c语言程序.pdf

    #include #define MAXFLOOR 6 //定义一个最大层数为6 层的电梯 unsigned char code LEDCODES[]={0x3f,0x06,0x5b,0x4f,0x6 ...

最新文章

  1. Windows7 64位机上Emgu CV2.4.2安装与配置
  2. 实现ASP.NET MVC3 HtmlHelper 的 RadioButtonList 与CheckBoxList 扩展
  3. 80个Python经典资料(教程+源码+工具)汇总——下载目录
  4. mysql grant 不想让用户看到 系统默认 mysql_MYSQL用户权限管理GRANT使用
  5. STM32 DSP库的使用方法
  6. java数组元素是类_Java数组及其常用类
  7. Spring-context-ApplicationEvent/ApplicationListener/ApplicationEventMulticaster
  8. Android学习(十三) BroadcastReceiver组件(广播)
  9. mysql离线安装 window_5分钟完成mysql离线安装
  10. POJ-2034 Anti-prime Sequences dfs
  11. 从0开始学习 GitHub 系列之「06.团队合作利器 Branch」
  12. 法斗几个月长鼻筋_带锯罢工了,木工小哥检查问题出在哪里?分享带锯使用九个月感受...
  13. Java之约瑟夫环问题
  14. windows多线程同步机制---原子锁
  15. PostgreSQL 配置优化
  16. C# 自制微信登录窗口,100%还原,数据库(SQL Server)
  17. java毕业设计宠物寄养预约系统Mybatis+系统+数据库+调试部署
  18. SCI、EI论文框架
  19. ldo低压差线性稳压器电路解析
  20. 鲲鹏Bigdata pro 之日志分析综合实验-补充细节

热门文章

  1. Cadence原理图层次化设计
  2. LaTex排版时track changes
  3. SettingsProvider简单分析
  4. 基础五:光的量子纠缠
  5. 从游戏中理解Java特性,我悟了!
  6. IT公司招聘人才新标准:不需高学历但要绝顶聪明
  7. 马士兵mysql_MYSQL相关总结(马士兵教育)
  8. UEFI and legacy
  9. 猿创征文 | openGauss 高级特性 DB4AI 进行 AI 开发
  10. 【MySQL】1安装与忘记密码