《第1讲:C51单片机应用与C语言程序设计 总纲ppt课件.ppt》由会员分享,可在线阅读,更多相关《第1讲:C51单片机应用与C语言程序设计 总纲ppt课件.ppt(45页珍藏版)》请在三一办公上搜索。
1、深圳市德普施科技有限公司SHENZHEN DEPUSH.TECHLONOGY CO.,LTD,C51单片机应用与C语言程序设计基于机器人工程对象的项目实践,秦志强,DEPUSH,中级机器人制作与编程,版权与商标,版权属于深圳市德普施科技有限公司,DEPUSH,中级机器人制作与编程,第一讲 C51单片机与机器人大脑,AT89S52,教学底板,DEPUSH,中级机器人制作与编程,第一讲 C51单片机与机器人大脑,微控制器的用途,单片机与C51系列单片机,DEPUSH,中级机器人制作与编程,第一讲 C51单片机与机器人大脑,获得软件Keil uVision2 IDE官方下载(),DEPUSH,中级机
2、器人制作与编程,第一讲 C51单片机与机器人大脑,安装软件从网上下载软件后安装,DEPUSH,中级机器人制作与编程,第一讲 C51单片机与机器人大脑,硬件安装,DEPUSH,中级机器人制作与编程,第一讲 C51单片机与机器人大脑,通讯测试:你的第一个程序,DEPUSH,中级机器人制作与编程,第一讲 C51单片机与机器人大脑,第一个程序,DEPUSH,中级机器人制作与编程,#includeint main(void)uart_Init();/串口初始化 printf(Hello,this is a message from your Robotn);,第一讲 C51单片机与机器人大脑,第一个程序
3、,添加头文件uart.h,程序入口,main()函数,printf()函数,打印输出,在终端上显示,“/”表示注释,后面内容将被编辑器忽视,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,C51单片机的I/O口及伺服电机,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,单灯闪烁:使用P1端口的第一脚(P1_0)来控制发光二极管(LED)闪烁。,while(1)P1_0=1;/P1_0输出高电平 delay_nms(500);/延时500ms P1_0=0;/P1_0输出低电平 delay_nms(500);/延时500ms,while 循环函
4、数,delay_nms 延时函数,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,时序图简介时序图反应的是高、低电压信号与时间的关系图,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,伺服电机控制信号,零点标定信号时序图,while(1)P1_0=1;/P1_0输出高电平 delay_nus(1500);/延时1.5ms P1_0=0;/P1_0输出低电平 delay_nus(20000);/延时20ms,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,安装伺服电机,伺服电机与教学底板的连线原理图(左)和实际接线示意
5、图(右),DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,测试伺服电机,1.3 ms的控制脉冲序列使电机顺时针全速旋转,1.7ms的连续脉冲序列使电机逆时针全速旋转,while(1)P1_0=1;delay_nus(1300);P1_0=0;delay_nus(20000);,while(1)P1_0=1;delay_nus(1700);P1_0=0;delay_nus(20000);,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,伺服电机旋转规定的时间,for循环 for(表达式1;表达式2;表达式3)语句,按如下方式理解,for(循环变
6、量赋初值;循环条件;循环变量增值)语句,for(Counter=1;Counter=100;i+)P1_1=1;delay_nus(1700);P1_1=0;delay_nms(20);,DEPUSH,中级机器人制作与编程,第二讲 输出接口与机器人伺服电机控制,用PC机控制机器人的运动,scanf(格式控制,地址表列);,printf(Program Running!n);printf(Please input pulse number:n);scanf(%d,DEPUSH,中级机器人制作与编程,第三讲 机器人巡航控制,基本巡航动作,机器人及其前进方向的定义,向前巡航,for循环的参数控制了发
7、送给电机的脉冲数量。由于每个脉冲的时间是相同的,因而for循环的参数也控制了伺服电机运行的时间。,for(counter=0;counter130;counter+)/运行3秒 P1_1=1;delay_nus(1700);P1_1=0;/左轮逆时针 P1_0=1;delay_nus(1300);P1_0=0;/右轮顺时针 delay_nms(20);,DEPUSH,中级机器人制作与编程,第三讲 机器人巡航控制,其它巡航动作,将delay_nus函数的参数n以不同的值组合就可以使机器人以其它的方式运行,向后行走,P1_1=1;delay_nus(1300);P1_1=0;/左轮顺时针 P1_0
8、=1;delay_nus(1700);P1_0=0;/右轮逆时针 delay_nms(20);,原地左转,P1_1=1;delay_nus(1300);P1_1=0;/左轮顺时针 P1_0=1;delay_nus(1300);P1_0=0;/右轮顺时针 delay_nms(20);,原地右转,P1_1=1;delay_nus(1700);P1_1=0;/左轮逆时针 P1_0=1;delay_nus(1700);P1_0=0;/右轮逆时针 delay_nms(20);,DEPUSH,中级机器人制作与编程,第三讲 机器人巡航控制,其它巡航动作以某一轮子为支点旋转,从前面向左旋转,P1_1=1;de
9、lay_nus(1500);P1_1=0;/左轮静止 P1_0=1;delay_nus(1300);P1_0=0;/右轮顺时针 delay_nms(20);,从前面向右旋转,P1_1=1;delay_nus(1700);P1_1=0;/左轮逆时针 P1_0=1;delay_nus(1500);P1_0=0;/右轮静止 delay_nms(20);,从后面向左旋转,P1_1=1;delay_nus(1500);P1_1=0;/左轮静止 P1_0=1;delay_nus(1700);P1_0=0;/右轮逆时针 delay_nms(20);,从后面向右旋转,P1_1=1;delay_nus(1300
10、);P1_1=0;/左轮顺时针 P1_0=1;delay_nus(1500);P1_0=0;/右轮静止 delay_nms(20);,DEPUSH,中级机器人制作与编程,第三讲 机器人巡航控制,匀变速运动:防止机器人加速过快,for(pulseCount=10;pulseCount=200;pulseCount=pulseCount+1)P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);,用函数简化运动程序:Forward()、Left_Turn()、R
11、ight_Turn()、Backward(),void Forward(void)int i;for(i=1;i=65;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);,DEPUSH,中级机器人制作与编程,第三讲 机器人巡航控制,高级主题建立复杂运动,如果要让机器人执行一个更长,更复杂的动作,前面讲到的方法将会很麻烦。用字符数组存储运动动作 用switch语句解释这些动作,char Navigation10=F,L,F,F,R,B,L,B,B,Q;,while(Navigationaddr
12、ess!=Q)switch(Navigationaddress)case F:Forward();break;case L:Left_Turn();break;case R:Right_Turn();break;case B:Backward();break;address+;,switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;break;,switch分支语句一般形式:,DEPUSH,中级机器人制作与编程,第四讲输入接口与机器人触觉导航,通过前面两章的学习,你已经掌握
13、如何用单片机的端口来控制机器人的各种运动。当时,连接机器人伺服电机的端口是作为输出使用。从本章开始,单片机端口将作为输入使用。,触觉导航,触须(胡须)硬件,安装好胡须的机器人,DEPUSH,中级机器人制作与编程,第四讲 输入接口与机器人触觉导航,测试胡须,胡须电路图,int P1_4state(void)/获取P1_4的状态 return(P1,C语言的一种运算符?,表达式1?表达式2:表达式3,DEPUSH,中级机器人制作与编程,第四讲 输入接口与机器人触觉导航,胡须导航,if(P1_4state()=0),两边同时碰到,后退,左转两次,右边碰到,后退再左拐,左边碰到,后退再右拐,没有障碍物
14、,前进,DEPUSH,中级机器人制作与编程,第四讲 输入接口与机器人触觉导航,当机器人进入墙角时,左胡须触墙,于是它右转,向前行走,右胡须触墙,于是左转前进,又碰到左墙,再次碰到右墙。如果不是你把它从墙角拿出来,它就会一直困在墙角里而出不来。,逃离墙角死区,修改程序让机器人碰到上述问题时逃离死区。技巧是记下胡须交替触动的总次数。技巧的关键是程序必须记住每个胡须的前一次触动状态,并和当前触动状态对比。如果状态相反,就在交替总数上加1。如果这个交替总数超过了程序中预先给定的阀值,那么就该做一个“U”型转弯,并且把胡须交替计数器复位。,编程实现依赖于ifelse嵌套语句,if(P1_4state()
15、!=P2_3state()if(old2!=P1_4state(),DEPUSH,中级机器人制作与编程,第五讲 机器人红外线导航,使用红外线发射和接收器探测道路,DEPUSH,中级机器人制作与编程,第五讲 机器人红外线导航,搭建IR发射和探测器对,左侧和右侧IR组原理图,三极管结构、符号及管脚,DEPUSH,中级机器人制作与编程,for(counter=0;counter38;counter+)P1_3=1;delay_nus(13);P1_3=0;delay_nus(13);irDetectLeft=P1_5state();,第五讲 机器人红外线导航,测试IR发射和探测器对,让每个IR LE
16、D 探测器组工作的关键是发送1毫秒频率38.5 kHz的红外信号,然后立刻将IR探测器的输出存储到一个变量中。,周期 T=26us,频率f=1/T=38.5kHz持续时间t=38T=1ms,变量irDetectLeft存储探测器状态,DEPUSH,中级机器人制作与编程,第五讲 机器人红外线导航,函数延时的不精确性,函数调用所需时间是微秒级,与工作要求同级,故延时不精确。,空函数_nop_(void),当微控制器在12MHz晶振下工作时,单片机AT89S52一个时钟周期为:T=(1/12)*10-6 S 微控制器操作是用机器周期来计算的,一个机器周期为十二个时钟周期:t=12*T=1*10-6s
17、=1us 所以空函数_nop_()能产生1us的延时。,教学板的晶振选用11.0592MHz,它能产生延时时间是1.08us,比1us有稍许误差,DEPUSH,中级机器人制作与编程,第五讲 机器人红外线导航,探测和避开障碍物,用#define语句来简化程序,如:#define LeftIR P1_2/左边红外接收连接到P1_2#define LeftLaunch P1_3/左边红外发射连接到P1_3在以后的程序中,可以用LeftIR代替P1_2,发射并检测信号,IRLaunch(R);irDetectRight=RightIR;/右边接收IRLaunch(L);irDetectLeft=Lef
18、tIR;/左边接收,红外线导航,与胡须类似,if(irDetectLeft=0),DEPUSH,中级机器人制作与编程,第五讲 机器人红外线导航,高性能的IR导航,发送脉冲给电机之前检查障碍物,可以大大改善机器人的行走性能。程序可以使用传感器输入为每个瞬间的导航选择最好的机动动作。这样,机器人永远不会走过头,它会找到绕开障碍物的完美路线,成功的走过更加复杂的路线。,如果前方有障碍物,机器人会使用脉冲命令避开,然后探测,如果物体还在,再使用另一个脉冲来避开它。机器人能持续使用电机驱动脉冲和探测,直到它绕开障碍物,然后它会继续发向前行走的脉冲。,if(irDetectLeft=0),使用整型变量pu
19、lseLeft和pulseRight来设置发送的脉冲持续时间,DEPUSH,中级机器人制作与编程,第五讲 机器人红外线导航,边缘探测,DEPUSH,中级机器人制作与编程,第六讲 机器人距离探测,精确的延时:定时/计数器的应用,数组:保存相同类型的若干变量,DEPUSH,中级机器人制作与编程,第六讲 机器人距离探测,尾随小车,DEPUSH,中级机器人制作与编程,第六讲 机器人距离探测,跟踪条纹带,DEPUSH,中级机器人制作与编程,第七讲 机器人中URAT的应用,通过串口发送数据,通过串口接收数据,串口通讯UART(Universal Asynchronous Receiver/Transmit
20、ter)是一种能够把二进制数据按位(bit)传送的通信方式。AT89S52拥有1个串行通信接口UART。其主要功能如下:在输出数据时,把数据进行并-串转换,即从计算机接收位并行数据并发送到串口输出;在输入数据时,把数据进行串-并转换,即从串口读入外部串行数据并将其转换为位并行数据送到计算机。,DEPUSH,中级机器人制作与编程,第七讲 机器人中URAT的应用,RS232电平与TTL电平转换,TTL(Tansistor-Transistor Logic),是指三极管三极管逻辑电路。很多单片机,包括你所使用的AT89S52都是用的这种标准。它的逻辑“1”电平是5V,逻辑“0”电平是0V。RS232
21、接口是1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的逻辑“1”电平是-5V-15V,逻辑“0”电平是+5V+15V。,RS232RXDTXDGND,AT89S52TXDRXDGND,DEPUSH,中级机器人制作与编程,第七讲 机器人中URAT的应用,编写串口通信程序,头文件 uart.h 的实现过程(串口的初始化):,设置定时器工作方式,设置串口工作方式,设置波特率,启动定时器,开串口中断,开总中断,DEPUSH,中级机器人制作与编程,第八讲 机器人中LCD的应用,LCD(Liquid Crystal Display)显
22、示器的介绍,1602 LCD实物图,字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式液晶显示模块。由若干5*7或5*11等点阵符号组成。,DEPUSH,中级机器人制作与编程,第八讲 机器人中LCD的应用,LCD模块于MCU连接图,LCD初始化过程:,延时15ms写指令38H(不检测忙信号)(或28H,表示4位数据接口,下同)延时15ms写指令38H(不检测忙信号)延时15ms写指令38H(不检测忙信号)(以后每次写指令、读/写数据操作之前都均需检测忙信号)写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0cH:显示开及光标设
23、置,初始化完成后,就可显示。指针的使用。,DEPUSH,中级机器人制作与编程,第九讲 多传感器智能机器人,设计目标,结合胡须及红外线传感器优点,综合性导航。,导航过程:传感器大脑执行器。,DEPUSH,中级机器人制作与编程,第九讲 多传感器智能机器人,结构体的引用:为了存储各种类型信息,传感器信息与C语言结构体的使用和编程,structint pulseLeft;int pulseRight;char counter;Forward=1700,1300,LeftTurn=1300,1300,26,RightTurn=1700,1700,26,Backward=1300,1700,26;,P1_1=1;delay_nus(Move.pulseLeft);P1_1=0;P1_0=1;delay_nus(Move.pulseRight);P1_0=0;delay_nms(20);,DEPUSH,中级机器人制作与编程,第九讲 多传感器智能机器人,机器人的行为控制策略和编程,监测区域的划分,传感器的优先级,DEPUSH,中级机器人制作与编程,