红外遥控小车的c程序_第1页
红外遥控小车的c程序_第2页
红外遥控小车的c程序_第3页
红外遥控小车的c程序_第4页
红外遥控小车的c程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include#include#define uchar unsigned char /数据类型#define uint unsigned intsbit hwx=p33;uchar key;uchar l_lhj66;/定义66位数组变量来存储接收的时间参数uchar ledmap10=0x3f, 0x06 , 0x5b, 0x4f, 0x66, 0x6d,0x7d;/*sbit ena=p24; /* l298的enable a sbit enb=p27; /* l298的enable b sbit in1=p22; /* l298的input 1 sbit in2=p2

2、3; /* l298的input 2 sbit in3=p25; /* l298的input 3 sbit in4=p26; /* l298的input 4 uchar t=0; /* 中断计数器 uchar m1=0; /* 电机1速度值 uchar m2=0; /* 电机2速度值 uchar tmp1,tmp2; /* 电机当前速度值 /*/函数定义void init8952( ) ; /初始化at89c52单片机void move_fo( ) ; / 小车向前运动void move_ba( ) ; / 小车向后运动void move_le( ) ; / 小车向左运动void move_r

3、i( ) ; / 小车向右运动 void stop( ); / 小车停止void move_qi(); /小车加速运动void move_sl();/小车减速运动void delay(uchar n) ;/ 延时n 毫秒void delay1(void); /空5个指令void motor(uchar index , char speed);/控制小车速度void car_action();/*/延时/*void delay(uchar n) uchar i; while(n-) for (i=0;i=-100 & speed=100) if(index=1) / 电机1的处理 m1=abs(

4、speed); / 取速度的绝对值 if(speed0) / 速度值为负则反转 in1=0; in2=1; else / 不为负数则正转 in1=1; in2=0; if(index=2) / 电机2的处理 m2 = abs(speed); / 电机2的速度控制 if(speed0) / 电机2的方向控制 in3 = 0; in4 = 1; else in3 = 1; in4 = 0; /*void move_fo( ) / 小车向前运动p1 = ledmap1; motor(1,40);delay(250) ; void move_ba( ) / 小车向后运动p1 = ledmap2;mot

5、or(1,-40) ; delay(250) ;void move_le( ) / 小车向左运动 p1 = ledmap3; /motor(1,40);motor(2,90);delay(30) ;motor(1,80);delay(50) ;void move_ri( ) / 小车向右运动 p1 = ledmap4;motor(2,-90);delay(30) ;/delay(250) ;motor(1,80); delay(50) ;void move_qi( ) /加速uchar i;p1 = ledmap5;for(i=40;i0;j-=8)motor(1,j);delay(250)

6、;delay(250) ; void stop( ) /小车停止p1 = ledmap0;in1 = in2;in3 = in4;void car_action() /判断红外线信号小车响应运动 switch( key ) case 0x03: /暂停 stop( ) ; break ; case 0x01: /前进 move_fo() ;break; case 0x02: / 后退 move_ba() ;break; case 0x04: / 左转 move_le() ;break; case 0x05: / 右转 move_ri() ;break; case 0x06: /快速运行 mov

7、e_qi( ) ; break ; case 0x07: move_sl( ) ;break ;/减速/*/主函数 void main( ) /delay(100) ;init8952( ); while(1) car_action();/delay(10) ; /*/定时器0 中断函数void timer0( ) interrupt 1 / t0中断服务程序 if(t=0) / 1个pwm周期完成后才会接受新数值 tmp1 = m1 ; tmp2 = m2 ; if(ttmp1) ena = 1 ; else ena = 0 ; / 产生电机1的pwm信号 if(t=100) / 1个pwm

8、信号由100次中断产生 t = 0 ; /*void hongwai(void) interrupt 2 /外部中断 1 ,int1(p33)连接红外线接收ic数据脚uchar i,j,tmp;ex1=0;j=33;/传送一组数包括引导码1位,地址码8位加反码8位,指令码8位加反码8位,总共33位i=0;/从第一维数组开始tmp=100;/加八延时,while(tmp)tmp-;if(hwx) /然后再检测红线接收脚是有数据招收,有继续,没有则退出ex1=1;return;while(j) /循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平时间常数,只接低电平常数就 /可以判断

9、1或0了,在这里我们都接收,为串口调试软件接收计算波形 /还有一点要知道,接收波形是反向,在没有接收时端口为高电平tmp=0;l_lhji=1;/时间量从1开始while(!hwx)/检测高低电平的变化l_lhji+;/没变继续加1delay1();/加入延时,是因为我们采用8位二进来存储,如果不加延时,时间量将计满tmp+;/此变量为防止干扰带来的死循环if(tmp=250)break;i+;tmp=0;l_lhji=1;/时间量从1开始while(hwx)/检测高低电平的变化l_lhji+;/没变继续加1delay1();/同上tmp+;if(tmp=250)break;i+;j-;i=255;/加入循环延时,抗干扰while(i)tmp=255;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论