51单片机声控智能小车C语言程序设计代码
基于单片机技术的语音控制小车设计(1)
基于单片机技术的语音控制小车设计【摘要】本文主要介绍了Keil C51简介、汇编语言的发展、智能小车的软件实现,以及小车的机械结构和使用说明以及工作原理。
基于单片机技术的语言控制小车的程序。
关键词:语音控制、汇编语言Abstract: This text primarily introduced the keil c51 the brief introductioned, edit collected materials language that small car of development, intelligence that software realizes, and small car of the machine construction explain with usage and work principle.According to procedure for small car of control of language of technique machine of single slice.It is detailed to introduced......Key words:Speech control, edit collected materials the language、uVision2、Keil C51目录1 绪论 (1)1.1问题的引入 (1)1.1.1声控产品前景及发展趋势 (1)1.1.2研究的目的及意义 (1)2 声控小车软件的设计方案 (3)2.1任务分析 (3)2.1.1设计要求 (3)2.1.2设计思路及软件流程图 (3)图2-1 (3)3 KEIL C51简介及汇编语言的发展 (4)3.1K EIL C51简介 (4)3.1.1 8051开发工具 (4)3.1.2 uVision2集成开发环境 (4)3.1.3 uVision2编辑器和调试器 (5)3.2汇编语言的发展 (6)3.2.1汇编语言的发展史 (6)3.2.2 汇编语言的优点 (6)3.2.3 汇编语言的应用 (6)4 小车使用说明 (8)4.1小车的工作原理 (8)4.1.1 车体的介绍及工作原理 (8)4.2语音的训练 (9)4.2.1 S1—S4功能键如下 (9)4.2.2 基本控制电路 (10)5 声控小车的软件实现 (11)5.1功能分析 (11)5.1.1主控电路 (11)5.2程序设计 (12)结束语 (18)谢辞 (19)文献 (20)1 绪论本文主要介绍“基于单片机技术的语音控制小车”。
智能小车程序c语言
set_motor(1,60,1,120);
bb=2;
}
//左偏
else if( L && ml && mm && !mr&& R )
{
set_motor(1,120,1,60);
bb=3;
}
//
else if( !L && ml && mm && mr&& R)
{
turnleft();
bb=4;
if(bb==4) LCMTextOut(20,"左拐路");
if(bb==5) LCMTextOut(20,"右拐路");
if(bb==6) LCMTextOut(20,"左丁字路");
if(bb==7) LCMTextOut(20,"右丁字路");
if(bb==8) LCMTextOut(20,"中丁字路");
LEn=0;
else
LEn=1;
if(PwmCnt<PwmR)
REn=0;
else
REn=1;
}
void main()
{
Init();
LCMTextInit();
LCMTextOut(1,"智能小车走迷宫");
LCMTextOut(9,"T1");
LCMTextOut(13,"T2");
LCMTextOut(17,"路型");
sbit mr=P2^7;
sbit R =P2^4;
基于51单片机的红外遥控智能小车源程序(C语言)
/*预处理命令*/#include<reg52.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};sbit IRIN=P3^2; //红外接收器数据线sbit LCD_RS = P0^7;sbit LCD_RW = P0^6;sbit LCD_EN = P0^5;uchar begin[]={"My car!"};uchar cdis1[]={"jiansu!"};uchar cdis2[]={"qianjin!"};uchar cdis3[]={"jiasu!"};uchar cdis4[]={"zuozhuang!"};uchar cdis5[]={"STOP!"};uchar cdis6[]={"youzhuan!"};uchar cdis8[]={"daoche!"};sbit M1 = P1^0;sbit M2 = P1^1;sbit M3 = P1^2;sbit M4 = P1^3;sbit EN12 = P1^4;sbit EN34 = P1^5;uchar IRCOM[7];uchar m,n;uchar t=2;uchar g;uchar code digit[]={"0123456789"};uint v;uchar count;bit flag;void delayxms(uchar t);void delay(unsigned char x) ;void delay1(int ms);void motor();void lcd_display();/*检查LCD忙状态lcd_busy为1时,忙,等待。
用C语言设计智能车的方案
用C语言设计智能车的方案一、需求与设计目标1、实现电动车的驱动模块功能2、实现传感器模块控制电动车的基本驱动功能3、实现显示模块功能4、实现语音控制模块功能5、合理设计实现电路,外观、布局、布线美观二、车体硬件功能设计方案1、成品电动车的外观改造2、电动车驱动模块设计3、传感器控制模块设计4、显示模块设计5、中心控制电路模块设计6、语音识别控制模块设计(备选功能)三、车体硬件功能实施方案1、车体介绍供电:电池(四节AA)工作电压:直流4-6V工作电流:200mA小车驱动结构:双侧履带驱动2、行走原理直行:两侧履带同时前进后退:两侧履带同时后退左转:右侧履带前进,左侧履带后退右转:左侧履带前进,右侧履带后退3、系统方案选择与论证(1)电机的选择方案一:采用步进电机控制。
步进电机的优点是步数可以精确控制;缺点是步进电机低转速时会产生振动,振动幅度过大则会影响车体的平衡,因此不适于此题过跷跷板的要求。
方案二:采用左右双直流驱动电机控制。
直流电机的优点是具有优良的调速特性,带负载能力强,便于电动车在有限的场地内灵活运动。
考虑到用左右电机的转速差来控制电动车转向比步进电机有较大的优势且电路相对简单方便控制,本设计采用了方案二。
(2)单片机的选择方案一:采用可编程逻辑器件CPLD。
这种器件的功能强大,运算速度快、集成度高,但是其价格相对比较昂贵。
因此这种器件比较适用于较高级和传感器数量非常多的设计中。
方案二:采用单片机。
单片机已经发展了30多年,其技术已非常成熟,应用也非常广泛,从高端的嵌入式系统到我们生活中的日常家电都有它的身影。
众所周知,单片机本身就是一个计算机系统,这对于实现本设计的各项功能都十分方便,并且其价格与CPLD相比要便宜许多,有很高的性价比。
这两种方式各有特点,在目前的相关研究中都有广泛应用。
鉴于电动车过跷跷板所实现的功能有限,规模较小,考虑到端口数量、所需的存储器的容量、成本等因素后,决定采用单片机作为本次设计的控制系统核心部件。
单片机控制的智能小车的C语言程序
#include<reg52.h>#define sense P1 /*宏定义光电传感器端口*/#define input1 P0 /*左电机的IN1,IN2定义在P0口*/#define input2 P2 /*右电机的IN3,IN4及ENA,ENB定义在P2口*/ //宏定义电机的具体端口sbit MOTO1_INT1=P0^0;sbit MOTO1_INT2=P0^1;sbit MOTO1_ENA=P2^0;sbit MOTO2_INT3=P2^5;sbit MOTO2_INT4=P2^4;sbit MOTO2_ENB=P2^2;//宏定义传感器的具体端口sbit sense_L=P1^3;sbit sense_R=P1^6;//宏定义金属传感器端口sbit METAL=P1^1;//宏定义DELAY函数中的一些变量int Dtime1=20000;int Dtime2=2000;int i=0;unsigned char SIGNAL(void); //传感器信号分析函数void DELAY(void); //延时函数void main(){int a;MOTO1_INT1=1; //使车开始时运动MOTO1_INT2=0;MOTO1_ENA=1;MOTO2_INT3=1;MOTO2_INT4=0;MOTO2_ENB=1;while(1){if(METAL==1) //有金属时车停止DELAY();else{a=SIGNAL();switch(a){case 1:input2=0x25;break; //前进case 2:input2=0x24;break; //左转case 3:input2=0x21;break; //右转default:break;}}}}void DELAY() //延时函数{input2=0x20; //使驱动芯片的两个使能端为0,使两个电机停转for(i=0;i<Dtime1;i ); //实现延时,用DTIME控制input2=0x25; //使驱动芯片的两个使能端为1,使两个电机重新转for(i=0;i<Dtime2;i );}unsigned char SIGNAL(){unsigned char Re;Re=sense&0x28;if(Re==40)return 1;//前进else if(Re==8)return 2;//左转else if(Re==32)return 3;//右转else return 1;//有错时前进}。
(完整版)基于51单片机的智能小车控制源代码(毕业设计)
'*************************************************//***************************************************//// 智能小车控制器基于51 单片机实现前进后退转弯与智能采样控制功能#include <reg52.h>#include<intrins.h>unsigned int tata[8];unsigned char flag=0,flag2=0,flag3=0,n,m;unsigned int Angle,q,length,temp1;sbit A仁P3A2;sbit A2=P3A3;sbit B1=P3A4;sbit B2=P3A5;sbit ENA=P3A6;sbit ENB=P3A7;sbit red1=P1A3;sbit red2=P1A6;void InitUART(void) {TMOD = 0x20;SCON = 0x50;TH1 = 0xFD;TL1 = TH1;PCON = 0x00; ES = 1; TR1 = 1;EA = 1;ENA = 1;ENB = 1;}void delay(void) // 直线延时延时函数{unsigned char a,b;for(b=255;b>0;b --) for(a=38;a>0;a--);}void delay1(void) // 转角延时函数{unsigned char w,y,c;for(c=1;c>0;c--) for(y=97;y>0;y--)for(w=3;w>0;w --);void delay3(void) // 避障延时函数{unsigned char a,b,c; for(c=98;c>0;c--) for(b=100;b>0;b --)for(a=40;a>0;a --);}void delay2(void) // 手动控制延时函数{unsigned char a,b,c;for(c=98;c>0;c--) for(b=15;b>0;b --) for(a=17;a>0;a --) { if(m){ break;}}}void qianjin() // 前进{unsigned char f;A1=1;A2=0;B1=1;B2=0;for(f=0;f<155;f++){A1=0;A2=0;B1=0;B2=1;} // 直线校准语句A1=1;A2=0;B1=1;B2=0;}void zuozhuan() // 左转{A1=1;A2=0;B1=0;B2=1;}void youzhuan() // 右转A1=0;A2=1;B1=1;B2=0;}void houtui(){A1=0;A2=1;B1=0;B2=1;}void tingzhi(){A1=0;A2=0;B1=0;B2=0;}void main(){unsigned char temp;InitUART();while(1){if(flag){flag=0;for(temp=2;temp<8;temp++) // 字符型转成整型函数{tata[temp]=tata[temp]%16;}// 执行转角指令Angle=10*(tata[2]*100+tata[3]*10+tata[4]);m=0;if(Angle<10) // 地面小角度摩擦校正函数{Angle++;}if(tata[1]=='L'){for(q=0;q<Angle;q++){zuozhuan();delay1();if(m){break;}}}else if(tata[1]=='R'){for(q=0;q<Angle;q++){ youzhuan(); delay1(); if(m) { break;}}} tingzhi();delay(); for(temp=2;temp<8;temp++) // 字符型转成整型函数{ tata[temp]=tata[temp]%16;}// 执行前进指令length=100*(tata[5]*100+tata[6]*10+tata[7]);// m=0;if(!m){ for(q=0;q<length;q++){ qianjin(); delay(); delay(); if(m) { break;} if(!red1){ delay1(); if(!red1) { youzhuan(); delay3();while(!red1);}if(!red2){delay1(); if(!red2){zuozhuan(); delay3();while(!red2);}}if((!red1)||(!red2)){houtui();delay3();while((!red1)||(!red2));}}}}if(flag3){m=0;flag3=0;if(tata[1] =='W'){qianjin(); }else if(tata[1]=='A'){A1=0;A2=0;B1=0;B2=1;} elseif(tata[1]=='S'){houtui();}else if(tata[1]=='D'){A1=0;A2=1;B1=0;B2=0;}else if(tata[1]=='T'){tingzhi(); }delay2();}tingzhi();}}void UARTInterrupt(void) interrupt 4 {if(RI) m=1;RI = 0;if(SBUF=='$'){flag2=1;}if(flag2){tata[n]=SBUF;n++;if(n==9&&tata[8]=='*'){n=0;flag=1;flag2=0;}if(n==3&&tata[2]=='#'){n=0;flag3=1;flag2=0;}}。
基于51单片机的智能循迹避障小车C源程序
项目名称:智能小车系别:信息工程系专业:11电气工程及其自动化姓名:刘亮、崔占闯、韩康指导教师:王蕾崔占闯联系邮箱:目录摘要: ...............................................................................................3关键词: (3)绪论: (3)一、系统设计 (4)1.一、任务及要求 (4)1.2车体方案认证与选择 (4)二、硬件设计及说明 (5)2.1循迹+避障模块 (5)2.2主控模块 (6)2.3电机驱动模块 (6)2.4机械模块 (7)2.5 电源模块 (7)三、自动循迹避障小车整体设计 (7)四、软件设计及说明 (8)4.1系统软件流程图 (9)4.2系统程序 (9)五、系统测试进程 (12)六、总结 (13)七、附录:系统元器件 (13)摘要本设计要紧有三个模块包括信号检测模块、主控模块、电机驱动模块。
信号检测模块采纳红外光对管,用以对有无障碍与黑线进行检测。
主控电路采纳宏晶公司的8051核心的STC89C52单片机为操纵芯片。
电机驱动模块采纳意法半导体的L298N专用电机驱动芯片,单片操纵与传统分立元件电路相较,使整个系统有专门好的稳固性。
信号检测模块将搜集到的路况信号传入STC89C52单片机,经单片机处置事后对L298N发出指令进行相应的调整。
通过有无光线接收来操纵电动小车的转向,从而实现自动循迹避障的功能。
关键词:智能循迹避障小车,STC89C52单片机,L298N驱动芯片,信号检测模块,循迹避障绪论(一)智能小车的作用和意义自第一台工业机械人诞生以来,机械人的进展已经遍及机械、电子、冶金、交通、宇航、国防等领域。
最近几年来机械人的智能水平不断提高,而且迅速地改变着人们的生活方式。
人们在不断探讨、改造、熟悉自然的进程中,制造能替代人劳动的机械一直是人类的妄图。
随着科学技术的进展,机械人的感系统,关于视觉的各类技术而言图像处置技术已相当发达,而基于图像的明白得技术还很掉队,机械视觉需要通过大量的运算也只能识别一些结构化环境简单的目标。
巡线智能小车的单片机c语言程序
speed();
}
}
/*************************************************/
void speed()
//速度过高处理
{
if(PWM1ratio>100)
{
PWM2ratio=PWM2ratio-PWM1ratio+100;
PWM1ratio=100;
//定时
/***************************************************************************** *************/
void control() { int state=0;
//调速,调节占空比
uchar sl,sr,a=0,b=0,c=0,d=0,e=0,f=0;
巡线智能小车的单片机 c 语言程序
/**************************** 智 能 小 车 程 序 ************************** 单片机:atml89s52 晶振:12MHz
*********************************************************************/
//延时 ms
} /********************************************** ***********************************************/ uchar time() { uchar t; t=10000/frequency; cisu=t/256+1; temp=cisu; return(256-t/cisu);
51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表
51单片机智能小车PWM调速前进程序源代码、电路原理图、电路器件表从控制电路角度划分,智能小车电路板分为核心板和驱动板。
核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。
驱动板上有电源电路、电机驱动电路以及一些功能模块接口。
智能小车前进只要控制智能小车四个轮子向前转动就可以了。
智能小车四个轮子由四个直流减速电机驱动。
直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D电机驱动芯片。
但有时候我们需要控制智能小车的速度,不希望智能小车全速前进。
比如在“智能小车循迹实验”中,如果智能小车速度过快,来不及反应做出方向的调整,智能小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。
那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。
智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。
在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。
不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。
这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。
这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。
智能小车PWM调速前进程序如下:首先,定义了2个变量,这2个变量用于设置智能小车的速度。
unsigned char pwmval_left_init=6; //调节此值可以调节小车的速度。
unsigned char pwmval_right_init=6; //调节此值可以调节小车的速度。
通过以下函数初始化定时器0,每1毫秒中断一次。
void Timer0_Init(void) //定时器0初始化{TMOD=0x01;TH0=0xf8;TL0=0xcd;TR0=1;ET0=1;EA=1;}下面我们看定时器0的中断处理函数。
基于单片机的语音控制小车
基于单片机的语音控制小车设计摘要随着电子工业的发展,具有语音控制功能的小车越来越受到人们的青睐,在人们的日常消费生活中起着不可忽视的作用。
目前,声控技术已在很多领域得到使用。
本文对语音控制功能的小车概况做了阐述。
在硬件设计方面,本论文以凌阳公司的SPCE061A单片机为控制核心,以语音小车控制电路板为辅,设计小车的动作。
完成了电源电路、复位电路、键盘电路、音频输入电路,音频输出电路和无线控制电路等硬件功能模块的设计。
在软件方面,利用C语言进行编程,进行语音的“训练”和“识别”。
设计出具有如下功能的语音声控小车:能够根据录制的语音命令来控制小车的前进,后退,左转,右转的功能。
测试表明,在环境背景噪音不太大,控制者的发音清晰的前提下,语音控制小车的语音识别系统能对特定的语音指令做出智能反应,做出预想中的有限的动作。
论文首先对系统的方案进行论证,然后对各单元的软件、硬件工作原理进行了阐述,并介绍了系统的主要组成部分情况。
关键词:SPCE061A,语音识别,全桥驱动,小车IVoice control car design based on single chipmicrocomputerAbstractWith the development of the electronics industry, the voice - the control car become more and more popular to people. And it plays an important role in people 's daily life. At present, the voice - activated technology has had 2 in many fields, For example, voice - activated phone. Only if you called out the names you want and it automatically called to the telephone.This article gives a detail to the voice-activated car. In hardware design, the paper use Sunplus SPCE061A as the control of core. On the software, we use C language programming for voice "training"and"recognition". .Completedthepowercircuit,resetcircuit,keyboardcircuitry,audioinput circuits,audiooutputcircuitandcontrolcircuitofwirelesshardwaresuchasthedesignoffunctionmodule s.It has the following features: According to recorded the voice command to control the car to start, stop,turn right , and turn left. Tests have shown that background noise in the environment is not too big, the controller under the premise of clear pronunciation, voice control car voice recognition system can make intelligent response to a particular voice commands, limited, as expected.First of all, cca shut confirm the system of the program, and then describe the unit 's software and hardware as well as introduce the main components of the situation.Key words:S PCE061A,Speech Recognition,Full-bridge ,driver,TrolleyII目录摘要 (I)Abstract (II)第1章绪论.......................................................................................................................... - 1 -1.1 选题的目的和意义.................................................................................................... - 1 -1.1.1选题目的............................................................................................................. - 1 -1.1.2.选题意义............................................................................................................. - 1 -1.2 语音小车的发展及现状............................................................................................ - 1 -1.3 课题的目的任务和要求............................................................................................ - 2 - 第2章语音小车的方案论证.................................................................................................. - 3 -2.1 语音控制方案............................................................................................................ - 3 -2.2 方案论证.................................................................................................................... - 4 -2.2.1 采用DSP+FPGA方案 ...................................................................................... - 4 -2.2.2采用MCS-51方案 ............................................................................................. - 4 -2.2.3 采用凌阳61方案.............................................................................................. - 5 -2.3 系统控制方案............................................................................................................ - 6 - 第3章系统硬件设计.............................................................................................................. - 9 -3.1 系统硬件总体设计.................................................................................................... - 9 -3.2 系统各单元设计...................................................................................................... - 10 -3.2.1 控制单元设计.............................................................................................. - 10 -3.2.2 动力单元设计.............................................................................................. - 15 -3.2.3 音频单元设计.............................................................................................. - 16 -3.2.4 小车单元设计.............................................................................................. - 19 -3.3 系统总体电路图...................................................................................................... - 25 - 第4章系统软件设计............................................................................................................ - 26 -4.1系统总体程序设计................................................................................................. - 26 -4.2 系统各分支设计..................................................................................................... - 28 -4.2.1训练子程序....................................................................................................... - 28 -4.2.2语音识别子程序............................................................................................... - 29 -III4.2.3动作子程序....................................................................................................... - 31 -4.2.4中断子程序....................................................................................................... - 34 - 第5章系统调试.................................................................................................................... - 37 -5.1 硬件调试.................................................................................................................. - 37 -5.2 软件调试.................................................................................................................. - 38 -5.3 系统联调.................................................................................................................. - 39 - 结论........................................................................................................................................ - 41 - 参考文献.................................................................................................................................. - 43 - 致谢........................................................................................................................................ - 45 - 附录........................................................................................................................................ - 47 -IV第1章绪论1.1 选题的目的和意义1.1.1选题目的通过设计一个用单片机控制的语音小车来熟悉模块化编程方法,掌握C语言汇编语言的程序设计和调试方法,并理解单片机的原理、结构、指令;运行模式及应用方法。
基于STC51单片机315M无线遥控智能小车-Protues仿真-程序编写
无线遥控智能小车摘要:本设计就采用了比较先进的89C51为控制核心,89C51采用CHOMS工艺,功耗很低。
这种方案能实现对智能小车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
本设计采用MCS-51系列中的89C51单片机。
以89C51为控制核心,利用超声波传感器检测道路上的障碍,控制电动小车的自动避障、自动寻迹功能。
整个系统小巧紧凑,控制准确,性价比高,人机互动性好。
关键词:单片机;避障;寻迹;89c51图2-1系统硬件框图三、硬件的设计(一)系统硬件设计思路按设计要求,根据超声波测距原理,以单片机AT89c51为核心的测液位系统。
设计系统各部分电路功能。
图3.1为89C51单片机的最小系统。
图3.1 89C51单片机最小系统1.时钟电路89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。
89C51单片机的时钟产生方法有两种。
内部时钟方式和外部时钟方式。
本设计采用内部时钟方式,利用芯片内部的振荡电路,在XTAL1、XTAL2引脚上外接定时元件,内部的振荡电路便产生自激振荡。
本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHZ到12MHZ之间选择。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,CX1、CX2可在20pF到100pF之间取值,但在60pF到70pF时振荡器有较高的频率稳定性。
所以本设计中,振荡晶体选择6MHZ,电容选择65pF。
在设计印刷电路板时,晶体和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保证振荡器稳定和可靠地工作。
为了提高温度稳定性,应采用NPO 电容。
2.复位电路89C51的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
基于51单片机智能小车循迹程序
#include <reg51.h>#include <stdio.h>#define uint unsigned int#define uchar unsigned char/**********************************/uchar led_data[9]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80}; uchar turn_count=0;bit end=0; //圈数跑完标志/*********************************/sbit xg0=P1^0; //左寻轨对管sbit xg1=P1^1; //中间寻轨对管sbit xg2=P1^2; //右寻轨对管sbit xz=P1^3; //感应挡板对管/*********************************/sbit Q_IN1=P2^0; //车前左轮控制sbit Q_IN2=P2^1;sbit Q_IN3=P2^2; //车前右轮控制sbit Q_IN4=P2^3;sbit H_IN1=P2^4; //车尾左轮控制sbit H_IN2=P2^5;sbit H_IN3=P2^6; //车尾右轮控制sbit H_IN4=P2^7;sbit Q_ENA=P3^0; //车前左轮使能,PWMsbit Q_ENB=P3^1; //车前右轮使能,sbit H_ENA=P3^6; //车尾左轮使能,sbit H_ENB=P3^7; //车尾右轮使能,/****************************************/#define stra_q_l 100 //直线行走时,四个轮子占空比调试#define stra_q_r 100#define stra_h_l 100#define stra_h_r 100#define turn_q_l 100 //转弯时四个轮子的占空比调试#define turn_q_r 100#define turn_h_l 100#define turn_h_r 100#define turnr_time 2900//右转弯时的延时常数#define turnl_time 3000 //左转弯时的延时常数#define dt_time 5800 //原地掉头时延时常数#define over_time 1000 //停止延时#define back_time 2500 //走完环形,回到直道延时转弯#define black_time 1500 //过黑线的时间#define correct_l_time 700 //左矫正时间#define correct_r_time 700 //右矫正时间#define hou_time 200/***************************************/uchar q_duty_l,q_duty_r,h_duty_l,h_duty_r,//车前后左右轮占空比i=0,j=0,k=0,m=0;/**************************************/void delay_cir(uint n){uchar x;while(n--){for(x=0; x<250;x++);};}/***********************************/void delay(uint ct) // 延时函数{uint t;t=ct;while(t--);}/***************************************/ void straight() //直走{q_duty_l=stra_q_l;q_duty_r=stra_q_r;h_duty_l=stra_h_l;h_duty_r=stra_h_r;Q_IN1=1;Q_IN2=0;Q_IN3=1;Q_IN4=0;H_IN1=1;H_IN2=0;H_IN3=1;H_IN4=0;}/***************************************/ void houtui() //后退{q_duty_l=stra_q_l;q_duty_r=stra_q_r;h_duty_l=stra_h_l;h_duty_r=stra_h_r;Q_IN1=0;Q_IN2=1;Q_IN3=0;Q_IN4=1;H_IN1=0;H_IN2=1;H_IN3=0;H_IN4=1;}/***************************************/ void turn_left() //左转{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_h_l;h_duty_r=turn_h_r;Q_IN1=0; //左轮反转Q_IN2=1;H_IN1=0;Q_IN3=1; //右轮正转Q_IN4=0;H_IN3=1;H_IN4=0;delay(turnl_time);}/***********************************/ void turn_right() //右转{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_q_l;h_duty_r=turn_q_r;Q_IN1=1; //左轮正转Q_IN2=0;H_IN1=1;H_IN2=0;Q_IN3=0; //右轮反转Q_IN4=1;H_IN3=0;delay(turnr_time);}/**************************************************/ void turn_round() //原地掉头{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_h_l;h_duty_r=turn_h_r;Q_IN1=0; //左轮反转Q_IN2=1;H_IN1=0;H_IN2=1;Q_IN3=1; //右轮正转Q_IN4=0;H_IN3=1;H_IN4=0;delay(dt_time);}/******************************************************/void over() //小车停止{Q_IN1=0;Q_IN2=0;Q_IN3=0;Q_IN4=0;H_IN1=0;H_IN2=0;H_IN3=0;H_IN4=0;}/*****************************************************/ void correct_right() //左偏,向右矫正{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_q_l;h_duty_r=turn_q_r;Q_IN1=1; //左轮正转Q_IN2=0;H_IN1=1;H_IN2=0;Q_IN3=0; //右轮反转Q_IN4=1;H_IN3=0;H_IN4=1;delay(correct_r_time);}void correct_left() //右偏,向左矫正{q_duty_l=turn_q_l;q_duty_r=turn_q_r;h_duty_l=turn_h_l;h_duty_r=turn_h_r;Q_IN1=0; //左轮反转Q_IN2=1;H_IN1=0;H_IN2=1;Q_IN3=1; //右轮正转Q_IN4=0;H_IN3=1;H_IN4=0;delay(correct_l_time);}/*************************************/ void xunji(){if(xg1==1){turn_count++;over();delay(over_time);if(turn_count==1){straight();delay(black_time);}elseif(turn_count==2){houtui();delay(hou_time);turn_left();}elseif(turn_count==3) {houtui();delay(hou_time); turn_right();}elseif(turn_count==4) {houtui();delay(hou_time); turn_right();}elseif(turn_count==5) {straight();delay(black_time); }elseif(turn_count==6) {houtui();delay(hou_time); turn_right();}elseif(turn_count==7) {houtui();delay(hou_time); turn_right(); straight();delay(back_time); turn_left();}elseif(turn_count==8) {straight();delay(black_time); }elseif(turn_count==9) {houtui();delay(100);turn_round();}if(turn_count>=9){turn_count=0;cir_count++;circle--;}{end=1;over();delay(500);}}elseif((xg0==0)&&(xg1==0)&&(xg2==0)) {straight();}elseif((xg0==1)&&(xg1==0)&&(xg2==0)) {over();delay(over_time);houtui();delay(hou_time);correct_right();}//左偏,向右矫正elseif((xg0==0)&&(xg1==0)&&(xg2==1)){over();delay(over_time);houtui();delay(hou_time);correct_left();} //右偏,向左矫正}/***********************************************/ void int0(void) interrupt 0 //中断圈数设定{EX0=0;delay_cir(250);circle++;if(circle>8){circle=0;}P0=led_data[circle];EX0=1;}/*************************************/void time1(void) interrupt 3 //T1溢出中断,电机调速{i++;j++;k++;m++;if(i<q_duty_l)Q_ENA=1;else Q_ENA=0;if(i>100){Q_ENA=1;i=0;}if(j<q_duty_r)Q_ENB=1;else Q_ENB=0;if(j>100 ){Q_ENB=1;j=0;}if(k<h_duty_l)H_ENA=1;else H_ENA=0;if(k>100){H_ENA=1;k=0;}if(m<h_duty_r)H_ENB=1;else H_ENB=0;if(m>100){H_ENB=1;m=0;}P0=led_data[circle];TH1=0XFF;TL1=0XF6;}/*************************************/ void main(){P0=led_data[circle];P1=0xFF;P1=0XFF; //P1口做输入P2=0X00; //P2口初始化,小车禁止P3=0XFF;TMOD=0X11;//T0,T1,工作方式1TH1=0XFF; //T1中断一次10USTL1=0XF6;TR1=1;EX0=1;ET1=1;EA=1;while(1){while((xz==1)&&(end!=1)) //无挡板,扫描对管,前进{xunji();};};}。
51单片机智能小车
51单片机智能小车51单片机智能小车一、介绍本文档是关于使用51单片机制作智能小车的详细指南。
智能小车是一种能够自主感知周围环境并做出相应行动的。
通过学习本文档,您将了解到如何使用51单片机搭建一个具有基本功能的智能小车。
二、硬件准备1、51单片机开发板2、电机驱动模块3、电源模块4、超声波传感器5、电机6、小车底盘三、电路搭建1、将51单片机开发板和电机驱动模块连接起来,确保电机正常工作。
2、将超声波传感器连接到51单片机开发板上。
3、将电源模块连接到开发板和电机驱动模块上,确保电源供应稳定。
四、程序设计1、编写51单片机的C语言程序,实现小车的基本功能,例如前进、后退、左转、右转等。
2、利用超声波传感器进行障碍物检测,并在检测到障碍物时进行相应的避障行动。
3、可以根据需要添加其他功能,例如跟随线路行驶、遥控操作等。
五、调试与测试1、使用烧录器将程序烧录到51单片机开发板中。
2、将电机驱动模块和超声波传感器连接到开发板后,进行电路的连通测试。
3、使用遥控器或其他方式控制小车的运动,观察小车是否根据预期进行动作。
4、进行避障测试,将障碍物放在小车前方,观察小车是否能够正确避开障碍物。
附件:1、51单片机开发板连接图2、电机驱动模块接线图3、超声波传感器接线图法律名词及注释:1、版权:指著作权法所保护的有关著作权人对其创作作品享有的复制、发表、展览、上演、放映、广播、信息网络传播、出版等权利。
2、专利:指在法律规定的范围内以注册的形式保护发明创造的独占权。
3、商标:指为了区别商品来源而使用,具有识别性、区分性和专用性的标志。
4、法律责任:指根据法律规定,个人或者单位在违反法律规范时应承担的法律后果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
unsigned char code LEDShowData[]={0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x19,0x03};
m=0;
z=0;
ET0=1;
ET1=1;
TR0=1; //启动T0定时器
break;//跳出switch
}
default://对周期时间T之内无效m清零
{
m=0;
z++;
if(z==5)
{
ET0=0;
ET1=0;
LED=1;
P1=0x00;
x=0;
z=0;
P2=LEDShowData[2];
m1a=0;
ET0=1;
ET1=1;
TR0=1;//启动T0定时器
break;//跳出switch
}
case 2://高速挡,占空比99.6%
{
P2=LEDShowData[1];//七段数码管显示2
TH0=1;
TL0=1; //对T0定时器赋初值
TH1=255;
TL1=255; //对T1定时器赋初值
x=m+1;
if(n==250)//n控制查询周期时间
{
n=0;
switch(m)
{
case 1://低速挡,占空比77.8%
{
P2=LEDShowData[0];//七段数码管显示1
TH0=210;
TL0=210;//对T0定时器赋初值
TH1=240;
TL1=240;//对T1定时器赋初值
x=m;
m=0;
z=0;
TL2=0xD8F8;
RCAP2H=0xD8F0;//重装数据寄存器
RCAP2L=0xD8F0;
ET0=1;//开启定时器T0中断请求允许位
ET1=1; //开启定时器T1中断请求允许位
ET2=1; //开启定时器T2中断请求允许位
EA=1;//开启总中断
TR0=0;//关闭定时器T0
TR1=0; //关闭定时器T1
sbit LED=P0^7;
sbit m1a=P0^0;
sbit m1b=P0^1;
sbit m2a=P0^2;
sbit m2b=P0^3;
sbit B1=P0^4;
uint m,n,x,y,z;
void delayB1()
{
unsigned int delaytime=500;
while(delaytime--);
return;
}
void delayLED(uint ms)
{
uint a,b;
for(a=0;a<ms;a++)
{
for(b=0;b<1250;b++)
{
if(B1==0)
{
delayB1();
LED=!LED;
m++;
}
}
}
}
void timer0(void) interrupt 1
{
TR0=0;//关闭T0定时器
TR1=1;//启动T1定时器
m1a=0;
m2a=0;
}
void timer1(void) interrupt 3
{
TR0=1;//启动T0定时器
TR1=0;//关闭T1定时器
m1a=1;
m2a=1;
}
void timer2(void) interrupt 5
{
TF2=0;//软件对T2标志位清零
n++;
TБайду номын сангаас2=1;//开启定时器T2
while(1)
{
y=10*(6-x);//配置不同档位LED灯闪烁调用延时时间个数
if(x>0)//完成主板LED灯闪烁
{
P1=0xff;//全灭
delayLED(y);
P1=0x00;
delayLED(y);//灯全亮
}
else
{
P1=0x00;
delayLED(1);
}
}
}
m2a=0;
break;
}
}
}
}
}
void main(void)
{
P1=0x00;//初始化主板LED,全亮
n=m=x=y=z=0;
m1a=0;
m2a=0;
m1b=0;
m2b=0;
TMOD=0x22;//T0,T1选用8位重装定时器功能
T2CON=0x00;//T2作为定时器使用,16位重装
TH2=0xD8F0;//65536