您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C51单片机应用与C语言程序设计第二章 (1)
第二章单片机输出接口与伺服电机控制深圳市鸥鹏科技有限公司黄曦2009.3.21©2008Open-Tech.Allrightsreserved.摘要•C51单片机的输入/输出接口•任务一单灯闪烁控制–while语句•任务二机器人伺服电机控制信号•任务三计数并控制循环次数–for语句•任务四用你的计算机来控制机器人的运动–scanf函数•工程素质和技能归纳•科学精神的培养©2008Open-Tech.Allrightsreserved.单片机的输入/输出接口•控制机器人伺服电机以不同速度运动是通过让单片机的输入/输出(I/O)口输出不同的脉冲序列来实现的。51系列单片机有4个8位的并行I/O口:P0、P1、P2和P3。这4个接口,既可以作为输入,也可以作为输出;可按8位处理,也可按位方式(1位)使用。右图是单片机STC89C52RC的引脚定义图,这是一个标准的40引脚双列直插式集成电路芯片。©2008Open-Tech.Allrightsreserved.任务一单灯闪烁控制•在本任务中,使用P1端口的第一脚(记为P1_0)来控制发光二极管以1HZ的频率不断闪烁。该任务的目的是检测IO口的输出电平是否是自己在程序中所要求的高低电平。•要准备的元器件:–红色LED2个–470欧电阻2个©2008Open-Tech.Allrightsreserved.任务一单灯闪烁控制•源程序:参照教材P21页的HighLowLed.c•接通面包板上的电源。–输入、保存、编译并下载程序HighLowLed.c–观察与P1_0连接的LED是否每隔一秒发光、关闭一次。•HighLowLed.c是如何工作的?–Boebot.h•voiddelay_nms(unsignedinti)•voiddelay_nus(unsignedinti)–uart.h•uart_Init()•printf–while(1)©2008Open-Tech.Allrightsreserved.任务一单灯闪烁控制•while语句的一般形式如下:–while(表达式)循环体语句•当表达式为非0值时,执行while语句中的内嵌语句,其特点是先判断表达式,后执行语句。例程中直接用1代替了表达式,因此总是非0值,所以循环永不结束,也就可以一直让LED灯闪烁。©2008Open-Tech.Allrightsreserved.任务一单灯闪烁控制•单片机P1.0口的输出信号时序图•尝试一下!–如何使连接到另外一个接口——P1_1口上的LED灯也闪烁?–如何使两个LED交替闪烁?©2008Open-Tech.Allrightsreserved.任务二机器人伺服电机控制信号•控制伺服电机转速为零的时序•控制伺服电机顺时针全速旋转的时序•控制伺服电机逆时针全速旋转的时序©2008Open-Tech.Allrightsreserved.任务二机器人伺服电机控制信号•关于驱动电机的IO口–P1_0专门控制右轮伺服电机–P1_1专门控制左轮伺服电机伺服电机与教学底板的连线原理图(左)和实际接线示意图(右)©2008Open-Tech.Allrightsreserved.任务二机器人伺服电机控制信号•将以下程序复制到HighLowLed.c文件中,替换相应的程序段。观察连接到P1_0的伺服电机是不是分别为停止,全速顺时针旋转和逆时针旋转。while(1){P1_0=1;//P1_0输出高电平delay_nus(1300);//延时1.3msP1_0=0;//P1_0输出低电平delay_nus(20000);//延时20ms}while(1){P1_0=1;//P1_0输出高电平delay_nus(1500);//延时1.5msP1_0=0;//P1_0输出低电平delay_nus(20000);//延时20ms}while(1){P1_0=1;//P1_0输出高电平delay_nus(1500);//延时1.7msP1_0=0;//P1_0输出低电平delay_nus(20000);//延时20ms}©2008Open-Tech.Allrightsreserved.任务二机器人伺服电机控制信号•该你了,让机器人的两个轮子全速旋转。#includeBoeBot.h#includeuart.hintmain(void){uart_Init();//初始化串口printf(TheLEDsconnectedtoP1_0andP1_1areblinking!\n);while(1){P1_0=1;//P1_0输出高电平P1_1=1;//P1_1输出高电平delay_nus(1300);//延时500msP1_0=0;//P1_0输出低电平P1_1=0;//P1_1输出低电平delay_nms(20);//延时20ms}}©2008Open-Tech.Allrightsreserved.任务三计数并控制循环次数•for语句–for语句的执行过程–for语句的形式:for(循环变量赋初值;循环条件;循环变量增/减值)语句–自增和自减–for循环控制电机的运行时间•例程:控制伺服运行时间。–源程序参照教材第30页ControlServoRunTimes.c•例程:一个电机正向旋转3秒,另一个电机同时的反向旋转3秒。–源程序参照教材第31页BothServosThreeSeconds.c©2008Open-Tech.Allrightsreserved.任务四用你的计算机来控制机器人的运动•在本任务中,使用串口调试工具发送以下两个信息,以控制机器人的运动。–由单片机发给伺服电机的脉冲个数;–脉冲宽度(以µs为单位)•程序参照教材第33页ControlServoWithComputer.c。©2008Open-Tech.Allrightsreserved.任务四用你的计算机来控制机器人的运动•ControlServoWithComputer.c是如何工作的?•scanf函数scanf(“格式控制字符串”,地址列表);–程序运行过程:•首先输出“ProgramRunning!”和“Pleaseinputpulsenumber:”;•程序处于等待状态,等待输入数据;•输入数据给变量PulseNumber;•输出“Pleaseinputpulseduration:”;•处于等待状态;•输入数据给变量PulseDuration;•电机运转。©2008Open-Tech.Allrightsreserved.工程素质和技能归纳•C51系列单片机的引脚定义和分布•用C51单片机的P1端口的位输出控制单灯或双灯闪烁,时序图的概念,while循环的引入和延时函数的引用。•机器人伺服电机的控制脉冲序列,通过给C51编程让其输出这些控制脉冲序列。•自增运算符的使用•for循环的使用以控制机器人的运动•如何通过串口输入数据控制机器人的运动。©2008Open-Tech.Allrightsreserved.科学精神的培养•查找C语言的标准输入输出库函数,了解scanf的总体功能。
本文标题:C51单片机应用与C语言程序设计第二章 (1)
链接地址:https://www.777doc.com/doc-3435107 .html