智能小车代码_第1页
智能小车代码_第2页
智能小车代码_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、/车轮周长为x,总路程S,总时间t,速度v/ 目前程序都是在理想状态考虑下编写的,还需考虑很多问题:/ 问题有:车走偏,该如何通过软件调整车向,如果车在不该停的时候停车了该怎/ 现在还需解决的是:如何将调速程序与显示程序结合为一个程序,单片机引脚连 #include<REG52.h>#include<absacc.h> #include<math.h> #define uchar unsigned char#define uint unsigned int / 定义电机控制相关功能引脚sbit ENA=P1A4;sbit ENB=PM5;sbit IN1=P

2、1A0;sbit IN2=P1A1;sbit IN3=P1A2;sbit IN4=P1A3;sbit ena=P1A6;sbit enb=P1A7;sbit in1=P2A4;sbit in2=P2A5;sbit in3=P2A6;sbit in4=P2A7;/0x7c,0x39,0x5e,0x79,0x71,0x76/ 定义数码管位选相关引脚sbit PIN0=P2A0;sbit PIN1=P2A1;sbit PIN2=P2A2;sbit PIN3=P2A3;uchar blackline_1,blackline_2; /黑线数uchar m,seco nd,sig n; /分别为路程,时间

3、,速度,50mS变量,秒变量uint distance,time,speed,total_time,p;uchar loop=0;uchar dis4=0x5f,0x44,0x9d,0xcd; /数码管显示缓冲区uchar dis_code13=0xfa,0x22,0xb9,0xab,0x63,0xcb,0xdb,0xa2,0xfb,0xeb,0xf2,0x00; /数码管段码/ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a,灭*中断服务程序部分*外中断 0服务程序外中断 1 服务程序void intt0(void) interrupt 0 /blackline_1+;voi

4、d intt1(void) interrupt 2 /blackline_2+;TR0=0; TR1=0; / 关定时器和计数器m+; p+;if(m=20)10S做时钟/ 秒计second+;m=0; /50ms 定时, 20 次为 1s,second 为终点线停车 loop=TL1;speed=loop*21; distance+=loop*21; time+;TH1=0;TL1=0; / 每过一秒读取一次计数值,即为速度值(以转 TH0=0x3c;TL0=0xb0; / 重装初值TR0=1; TR1=1; / 开定时器,计数器void delay20ms(void) /50ms 延时,作

5、为电机控制脉宽uchar i,j;for(i=0;i<15;i+)for(j=0;j<120;j+);void delay50ms(void) /50ms 延时,作为电机控制脉宽uchar i,j;for(i=0;i<50;i+)for(j=0;j<120;j+);*显示程序群*void display_init()P0=dis_code0;PIN0=0;PIN1=0;PIN2=0;PIN3=1;void display_cou ntdow n(uchar e) /终点线 10S倒计时函数P0=dis_codee;PIN0=1;PIN1=0;PIN2=0;PIN3=0;

6、void display(uint e) /显示总路程 /总时间uchar i;for(i=0;i<4;i+) disi=e%10;e=e/10;P0=dis_codedis0; PIN0=0;PIN1=0;PIN2=0;PIN3=1; delay20ms();P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();P0=dis_codedis2; PIN0=0;PIN1=1;PIN2=0;PIN3=0; delay20ms();P0=dis_codedis3; PIN0=1;PIN1=0;PIN2=0;PIN3=0; dela

7、y20ms();void display_time(void) / 显示总路程 / 总时间 dis0=total_time%10; dis1=total_time/10; dis2=11; dis3=11;P0=dis_codedis0; PIN0=0;PIN1=0;PIN2=0;PIN3=1; delay20ms();P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();void turn_left(void)ENA=1; ena=1;ENB=1; enb=1;delay50ms();ENA=0; ena=0;ENB=0; enb

8、=0;delay50ms();ENA=1; ena=1;ENB=0; enb=0;delay50ms();ENA=0; ena=0;ENB=0; enb=0;delay50ms();void turn_right(void)ENA=1; ena=1;ENB=1; enb=1;delay50ms();ENA=0; ena=0;ENB=0; enb=0;delay50ms();ENA=0; ena=0;ENB=1; enb=1;delay50ms();ENA=0; ena=0;ENB=0; enb=0;delay50ms();void motor_zhengzhuan(void) / 正转IN1=

9、1;IN2=0;in1=1;in2=0;IN3=1;IN4=0;in3=1;in4=0;void motor_fanzhuan(void) /IN1=0;IN2=1;in1=0;in2=1;IN3=0;IN4=1;in3=0;in4=1;void motor_stop(void) /IN1=1;IN2=1;IN3=1;IN4=1;in1=1;in2=1;in3=1;in4=1;ENA=0; ENB=0;ena=0;enb=0;void motor_start(void)/ENA=1;ENB=1;ena=1;enb=1;void motor_init(void) /IN1=0;IN2=0;IN3

10、=0;IN4=0;in1=0;in2=0;in3=0;in4=0;ENA=0;ENB=0;ena=0;enb=0;void int0_init(void) /EA=1;EX0=1;PX0=1;IT0=1;void timer_init(void) /EA=1;ET0=1;刹车启动反转电机控制引脚初始化外中断 0设置定时器 0初始化TMOD=0x51;TR0=1; /TMOD=0101 0001BET1=1; TH1=0;TL1=0; TR1=1;void bianliang_init(void) / 全局变量初始化distance=0; speed=0; time=0; p=0; sign=0

11、;m=0; blackline_1=0; blackline_2=0; second=0;void speed_display(uchar dat) /调速函数 &&数码管显示函数结合体uchar i,e;e=speed;dis0=e%10;dis1=e/10;dis2=0x00;dis3=0x00;for(i=8;i>0;i-)if(dat&0x80) ENA=1;ENB=1;ena=1;enb=1;else ENA=0;ENB=0;ena=0;enb=0;dat<<=1;if(i%2=0)P0=dis_codedis0; PIN0=0;PIN1=0

12、;PIN2=0;PIN3=1; else P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();if(i-1)%2=0)P0=dis_codedis0; PIN0=0;PIN1=0;PIN2=0;PIN3=1; else P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms();void main(void)/ 初始化模块display_init();bianliang_init();int0_init();timer_init();count_init();motor_in

13、it();motor_zhengzhuan();while(second<=4) uchar i=4-second;倒计时显示未到起跑线是加速起跑线全速display_countdown(i); / / 循环控制模块while(1)while(blackline_1=0) / speed_display(0xff);while(blackline_1=1) / speed_display(0xff); while(blackline_1+blackline_2<=2);p=0; while(p<10) if(blackline_1=blackline_2) sign=0;el

14、se if(blackline_1>blackline_2) sign=1; else if(blackline_1<blackline_2) sign=2; if(sign=1) turn_left(); turn_left(); turn_left(); turn_left(); if(sign=2) turn_right(); turn_right(); turn_right(); turn_right();while(blackline_1=2)/到限速线有36M勺距离,故先全速,再中速,然/过渡到低速,从而能在限速线上顺利减速 speed_display(0xff); s

15、peed_display(0xff); speed_display(0xff); speed_display(0xcc); while(blackline_1=2&&blackline_2=2);p=0;while(p<10) if(blackline_1=blackline_2) sign=0; else if(blackline_1>blackline_2) sign=1; else if(blackline_1<blackline_2) sign=2; if(sign=1) turn_left();turn_left();turn_left();turn

16、_left();if(sign=2) turn_right(); turn_right(); turn_right(); turn_right();while(blackline_1=3) / 限速线到达,低速 speed_display(0x88); while(blackline_1=3&&blackline_2=3);p=0;while(p<10) if(blackline_1=blackline_2) sign=0; else if(blackline_1>blackline_2)sign=1;else if(blackline_1<blackline

17、_2)sign=2;if(sign=1) turn_left(); turn_left(); turn_left(); turn_left();if(sign=2) turn_right();turn_right();turn_right();turn_right();while(blackline_1=4) / speed_display(0xff);while(blackline_1=5) / speed_display(0xcc);speed_display(0x88);while(blackline_1!=6); /motor_stop();加速离开限速区中低速结合,便于终点线快速刹车

18、到达终点线,先刹车,再关使能 ENA和ENB关使能在定时器0中1s自增while(second<=10) /10秒倒计时且数码管显示speed_display(0x00); / second=0; /倒计时显示 uchar i=10-second; display_countdown(i); / motor_fanzhuan();speed_display(0xff); /全速倒行while(blackline_1!=7);while(blackline_1=7) speed_display(0xff); while(blackline_1=7&&blackline_2=

19、7);p=0;while(p<10) if(blackline_1=blackline_2) sign=0;else if(blackline_1>blackline_2)sign=1;else if(blackline_1<blackline_2)sign=2;if(sign=1) turn_left();turn_left();turn_left();turn_left();if(sign=2) turn_right();turn_right();turn_right();turn_right();while(blackline_1=8) speed_display(0x

20、ff); speed_display(0xff); speed_display(0xcc); while(blackline_1=8&&blackline_2=8);p=0;while(p<10) if(blackline_1=blackline_2) sign=0;else if(blackline_1>blackline_2) sign=1;else if(blackline_1<blackline_2) sign=2;if(sign=1) turn_left();turn_left();turn_left();turn_left();if(sign=2) turn_right();turn_right();turn_right();turn_right(); while(blackline_1=9) s

温馨提示

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

评论

0/150

提交评论