智能小车代码.docx

上传人:牧羊曲112 文档编号:3576803 上传时间:2023-03-14 格式:DOCX 页数:11 大小:39.22KB
返回 下载 相关 举报
智能小车代码.docx_第1页
第1页 / 共11页
智能小车代码.docx_第2页
第2页 / 共11页
智能小车代码.docx_第3页
第3页 / 共11页
智能小车代码.docx_第4页
第4页 / 共11页
智能小车代码.docx_第5页
第5页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《智能小车代码.docx》由会员分享,可在线阅读,更多相关《智能小车代码.docx(11页珍藏版)》请在三一办公上搜索。

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

2、t IN4=P13; sbit ena=P16; sbit enb=P17; sbit in1=P24; sbit in2=P25; sbit in3=P26; sbit in4=P27; /0x7c,0x39,0x5e,0x79,0x71,0x76 /定义数码管位选相关引脚 sbit PIN0=P20; sbit PIN1=P21; sbit PIN2=P22; sbit PIN3=P23; uchar blackline_1,blackline_2; / 黑线数 uchar m,second,sign; /分别为路程,时间,速度,50ms变量,秒变量 uint distance,time,

3、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, 灭 /*/ /*中断服务程序部分*/ /*/ void intt0(void) interrupt 0 /外中断0服务程序 blackline_1+; void intt1(void) interrupt

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

5、d delay20ms(void) /50ms延时,作为电机控制脉宽 uchar i,j; for(i=0;i15;i+) for(j=0;j120;j+); void delay50ms(void) /50ms延时,作为电机控制脉宽 uchar i,j; for(i=0;i50;i+) for(j=0;j120;j+); /*/ /*显示程序群*/ /*/ void display_init P0=dis_code0; PIN0=0; PIN1=0; PIN2=0; PIN3=1; void display_countdown(uchar e) /终点线10S倒计时函数 P0=dis_cod

6、ee; PIN0=1; PIN1=0; PIN2=0; PIN3=0; void display(uint e) /显示总路程/总时间 uchar i; for(i=0;i0;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;PIN2=0;PIN3=1; else P0=dis_codedis1; PIN0=0;PIN1=0;PIN2=1;PIN3=0; delay20ms; if(i-1)%2=0) P0

7、=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_init; motor_zhengzhuan; while(second=4) uchar i=4-second; display_countdown(i); /倒计时显示 /循环控制模块 while

8、(1) while(blackline_1=0) /未到起跑线是加速 speed_display(0xff); while(blackline_1=1) /起跑线全速 speed_display(0xff); while(blackline_1+blackline_2=2); p=0; while(pblackline_2) sign=1; else if(blackline_1blackline_2) sign=2; if(sign=1) turn_left; turn_left; turn_left; turn_left; if(sign=2) turn_right; turn_right

9、; turn_right; turn_right; while(blackline_1=2) /到限速线有36M的距离,故先全速,再中速,然 / 过渡到低速,从而能在限速线上顺利减速 speed_display(0xff); speed_display(0xff); speed_display(0xff); speed_display(0xcc); while(blackline_1=2&blackline_2=2); p=0; while(pblackline_2) sign=1; else if(blackline_1blackline_2) sign=2; if(sign=1) turn

10、_left; turn_left; turn_left; turn_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(pblackline_2) sign=1; else if(blackline_1blackline_2) sign=2; if(sign=1) turn_left; turn_left; turn_le

11、ft; 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); /到达终点线,先刹车,再关使能ENA和ENB motor_stop; speed_display(0x00); /关使能 second=0; /

12、在定时器0中1s自增 while(second=10) /10秒倒计时且数码管显示 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=7); p=0; while(pblackline_2) sign=1; else if(blackline_1blackline_2) s

13、ign=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(0xff); speed_display(0xff); speed_display(0xcc); while(blackline_1=8&blackline_2=8); p=0; while(pblackline_2) sign=1; else if(blackline_1blackli

14、ne_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) speed_display(0x88); while(blackline_1=9&blackline_2=9); p=0; while(pblackline_2) sign=1; else if(blackline_1blackline_2) sign=2; if(sign=1) turn_left;

15、 turn_left; turn_left; turn_left; if(sign=2) turn_right; turn_right; turn_right; turn_right; while(blackline_1=10) speed_display(0xff); while(blackline_1=11) speed_display(0xcc); speed_display(0x88); while(blackline_1!=12);/终点线上停车,3S间隔轮流显示总时间和总路程 motor_stop; speed_display(0x00); total_time=time; while(1) second=0; while(second=3) display_time; second=0; while(second=3) display(distance); /接下来的控制同上 /倒回到起点线上时刹车,然后轮流显示总时间t和总路程s

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号