单片基础原理教程 4_第1页
单片基础原理教程 4_第2页
单片基础原理教程 4_第3页
单片基础原理教程 4_第4页
单片基础原理教程 4_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第三章

I/O口控制与Proteus仿真目录CONTENTS0151单片机基础与I/O口认知通用I/O口结构、引脚功能与工作原理04按键输入与上位机交互独立按键反馈、scanf函数、串口上位机控制03I/O口基础输出与PWM控制闪烁灯实现、PWM调光调速核心原理与编程02Proteus仿真软件实操工程新建、电路绘制、程序载入与仿真运行05直流电机驱动与运动控制电机基础分类、驱动电路搭建、启停与PWM调速06综合项目实践三轮小车运动控制、核心知识点复盘与重难点梳理学习目标01基础认知掌握了解单片机技术发展与应用,熟练掌握51单片机通用I/O口的功能原理,精通I/O口输入、输出的编程与实操方法。02仿真工具精通熟练使用Proteus软件完成单片机电路设计、程序下载与全程仿真调试,具备独立搭建仿真工程的能力。03核心技术吃透深度理解PWM脉宽调制概念,掌握PWM信号输出、占空比调节的实现方法,熟练运用scanf函数完成串口数据交互。04工程实践落地掌握直流电机驱动逻辑、PWM无级调速控制,能够结合I/O口、按键、通信、电机模块,完成三轮小车运动控制等综合工程项目设计与仿真实现。

4个8位GPIO:P0、P1、P2、P3可作输入/输出,支持位操作AT89C52:40引脚,32个I/O口本章重点:P1口的输入识别与输出控制3.151单片机I/O口概述AT89C52的引脚准双向口,复位时锁存器为“1”作为输入:先写“1”,再读引脚作为输出:直接输出高低电平示例:P1_0=1;//输出高电平I/O口的输入/输出设置英国LabCenterElectronics公司开发支持多种单片机系统仿真(8051、AVR、PIC等)包含ISIS(原理图设计)和ARES(PCB设计)优势:无需硬件即可完成电路设计与功能验证3.2Proteus软件简介1.新建电路,选择元件2.放置元件,调整属性3.连接导线(直接或总线方式)4.加载hex文件,运行仿真ProteusISIS工作流程启动ISIS,新建项目使用“PickDevices”选择元件(如AT89C51)放置元件、电源、地连接导线,使用标签和总线加载程序文件(.hex)运行仿真,观察LED、按键等响应Proteus基本操作演示放置元器件及构建电路Proteus中部分常见的元件及相关名称元件名称中文名说明元件名称中文名说明7407驱动门BATTERY电池/电池组1N914二极管CAP电容74Ls00与非门CAPACITOR电容器74LS04非门CLOCK时钟信号源74LS08与门CRYSTAL晶振74LS390TTL双十进制计数器FUSE保险丝7SEG7段式数码管开始字符LAMP灯LED发光二极管POT-HG三引线可变电阻器LM2行16列液晶RES电阻MOTOR马达RESISTOR电阻器SWITCH开关RESPACK排阻BUTTON按钮805151系列单片机Inductor电感ARMARM系列Speakers

&

Sounders扬声器PICPIC系列单片机ALTERNATOR交流发电机AVRAVR系列单片机连接导线使用标签和总线注意:在一个电路图中,标签名相同的导线在逻辑上是连接在一起的。为总线上的导线添加标签为导线添加标签,移动鼠标到需要加标签的导线上并右击“String”输入框中输入该导线的标签名。加载程序文件加载的程序只能是hex类型的可执行文件,可以在Keil软件中设计、生成hex文件3.3工程实践任务1流水灯仿真(Proteus)任务2闪烁灯与PWM控制任务3循环计数控制运行时间任务4上位机控制任务5直流电动机及其驱动任务6PWM调速任务7——按键输入控制电机任务8*——三轮小车运动控制

使用示波器观察PWM波形使用逻辑分析仪查看多路信号

调试方法:检查hex文件是否加载检查电源、地连接单步运行观察I/O状态Proteus仿真调试技巧整体步骤:构建流水灯电路(图3.12)

编写闪烁程序(mcu301.c)软件延时实现150ms闪烁加载hex文件,仿真运行任务1流水灯仿真(Proteus)构建流水灯电路任务1流水灯仿真(Proteus)任务要点:编写闪烁程序(mcu301.c)软件延时实现150ms闪烁加载hex文件,仿真运行任务1流水灯仿真(Proteus)#include#defineucharunsignedchar#defineuintunsignedintsbitLED=P2^0;//延时

voidDelayMS(uintx){uchari;while(x--){for(i=0;i<120;i++);}}//主函数voidmain(){while(1){LED=~LED;DelayMS(150);}12MHz晶振→1机器周期=1μs

汇编与C语言延时实现while(1)无限循环控制LED闪烁注意:循环体多条语句需加花括号软件延时与while循环流水灯效果实现使用_crol_()函数循环左移代码示例:mcu302.c8只LED轮流点亮,形成流水效果头文件:#include<intrins.h>任务1流水灯仿真(Proteus)任务2闪烁灯与PWM控制PWM概念与原理PWM:脉宽调制

通过调整占空比控制平均电压应用:LED调光、电动机调速关键参数:周期、占空比、频率PWM实现方法(软件模拟)使用定时器产生周期性中断在中断中改变I/O口电平

示例思路:设置周期为20ms

高电平时间=占空比×周期控制LED亮度或电机转速任务要点:电路:P1.0~P1.7→74HC573→D1~D8低电平点亮LED两组LED交替亮灭(mcu303.c)时序图与占空比概念引入任务2闪烁灯与PWM控制//mcu303.c#include#includeintmain(void){uart_Init();//初始化串口printf("watchingThestatechangingoftheLEDswhichisconnectedtoP1!\n");while(1){P1=0x0F;delay_nms(500);//延时500msP1=0xF0;delay_nms(500);//延时500ms}任务2闪烁灯与PWM控制闪烁灯电路图任务要点:使用for语句控制状态持续时间示例:模拟单向交通灯红灯6s,黄灯闪烁2s,绿灯6s参考代码:mcu304.c任务3循环计数控制运行时间控制一段代码执行次数最方便的方法是利用for语句for(初值表达式1;条件表达式2;循环变量更新表达式3)语句任务3循环计数控制运行时间for(counter=1;counter<=10;counter++){printf("%d",counter);}整型变量counter来计数的for循环程序段请思考如何使用for语句让LED保持某一状态到需要的时长,如黄灯闪烁2s,同时红灯、绿灯灭任务3循环计数控制运行时间黄灯闪烁2s,同时红灯、绿灯灭for(counter=1;counter<=4;counter++){P1_0=1;P1_5=1;P1_3=0;delay_nms(300);P1_3=1;这个for语句整体执行一次的时间是:200ms+300ms=500ms,本循环执行4次,即时长=4×500ms=2s。任务3循环计数控制运行时间红灯和绿灯亮6sfor(counter=1;counter<=12;counter++){P1_3=1;P1_5=1;P1_0=0;单向交通灯的参考例程mcu304.c代码任务要点:单片机与PC串口通信使用scanf()接收数据动态控制交通灯循环次数与延时参考代码:mcu305.c上位机调试界面任务4上位机控制单片机需要读取周边传感器的信息,并把数据传给上位机;上位机需要解释和分析传感器数据,然后把分析结果或者决策发给单片机以执行某种操作任务4上位机控制//mcu305.c#include#includeintmain(void){intcounter;intcounternum,pulseduration;uart_Init();printf("Pleaseinputcounternumberandpulseduration:\n");scanf("%d%d",&counternum,&pulseduration);for(counter=1;counter<=counternum;counter++){P1_0=1;P1_5=1;P1_3=0;delay_nms(pulseduration);P1_3=1;delay_nms(pulseduration);}调试结果在上位机上的显示任务要点:电动机分类:直流、交流、伺服、步进、减速电机TT马达(130电机,减速比1:48)驱动模块:L293D(H桥PWM)控制逻辑表接口电路任务5直流电动机及其驱动电动机按工作电源、结构原理和用途可分为三大类:直流电动机、交流电动机(含异步电动机和同步电动机)及控制用电动机直流电机调速:PWM控制平均电压驱动电路:H桥(实现正反转)常用驱动芯片:L298N、L293D直流电动机驱动任务5直流电动机及其驱动采用130电机的TT马达L293D控制逻辑任务5直流电动机及其驱动L293d驱动状态表EN1IN1IN2直流电机状态0XX停止100制动101正转110反转111制动直流电动机驱动模块L293D在L293D中,OUT1、OUT2为通道1输出引脚,连接电动机1;OUT3、OUT4为通道2输出引脚,连接电动机2。任务5直流电动机及其驱动//mcu306.c#include#includesbitIN1=P1^0;sbitIN2=P1^1;sbitIN3=P1^4;sbitIN4=P1^5;sbitEN1=P1^2;//通道1使能引脚sbitEN2=P1^3;//通道2使能引脚intmain(void){uart_Init();//初始化串口printf("Letthemotorrunning!\n");while(1){EN1=1;//使能通道1直流电动机IN1=0;IN2=1;//直流电动机正转}L293D的IN1引脚连接P1.0引脚L293D的IN2引脚连接P1.1引脚L293D的EN1引脚连接P1.2引脚L293D的EN2引脚连接P1.3引脚L293D的IN3引脚连接P1.4引脚L293D的IN4引脚连接P1.5引脚任务要点:问题:全速运行惯性大,不易控制解决方法:PWM调速占空比越大,平均电压越高,转速越快匀加速实现:逐步增加占空比任务6PWM调速PWM信号实际就是一种脉宽可连续调节的矩形脉冲波,满足伏秒积计算:U幅值×占空比=U平均实验目标:控制直流电机转速硬件:AT89C51、L298N、直流电机软件:定时器生成PWM

按键调节占空比(如10%→90%)占空比越大,转速越快PWM调速实验示例for(velocity=0;velocity<=100;velocity+=5){EN1=1;IN1=0;IN2=1;//正转

delay_nms(velocity);//高电平时间

EN1=0;

delay_nms(100-velocity);//低电平时间}可实现匀速加速→全速→减速停止参考代码:mcu307.cPWM调速代码示例voidrun(intcount,intvelocity){for(i=1;i<=count;i++){IN1=0;IN2=1;EN1=1;

delay_nms(velocity);EN1=0;

delay_nms(100-velocity);}}//调用:run(30,75);//占空比75%,正转3秒将占空比作为参数,便于调速控制PWM调速函数(mcu308.c)任务要点:按键电路:P3.2、P3.3、P3.6、P3.7接独立按键(低电平有效)按键状态读取函数:P3_2state()、P3_3state()使用位操作符&提取引脚状态使用条件操作符?:返回状态值任务7——按键输入控制电机任务7——按键输入控制电机//mcu309.c#include#includeintP3_2state(void)//获取P3.2引脚的状态{return(P3&0x04)?1:0;}intP3_3state(void)//获取P3.3引脚的状态{return(P3&0x08)?1:0;}intmain(void){uart_Init();printf("buttons‟states\n");while(1){printf("右边按键的状态:%d",P3_2state());printf("左边按键的状态:%d\n",P3_3state());delay_nms(150);}设置P3.2(INT0)、P3.3(INT1)、P3.6(WR)、P3.7(RD)这4只引脚分别接4个独立常开按键S2、S3、S4位操作符:&(与)、|(或)、^(异或)、~(取反)、<<、>>示例:(P3&0x04)?1:0提取P3.2状态条件操作符:表达式1?表达式2:表达式3等价于if-else结构位操作符与条件操作符操作符&与|或^异或~补>>

右移<<

左移按键按下:I/O口检测到低电平问题:机械抖动(约10ms)解决方案:软件延时去抖示例流程:检测到按下→延时10ms→再次检测→确认有效独立按键输入与去抖定义正转函数run(loopcount)定义反转函数backrun(loopcount)定义停止函数stop()主循环中检测按键状态,调用对应函数实现按键控制电机正转、反转、停止按键状态检测与电机控制(mcu310.c)独立按键状态获取调试if((P3_2state()==0)&&(P3_3state()==0))/*S2、S3两个按键同时被按下*/{stop();}elseif(P3_2state()==0)//S2按键被按下,直流电动机正转{run();}elseif(P3_3state()==0)//S3按键被按下,直流电动机反转{backrun();}else//没有按键被按下

stop();按键的输入信息选择关系与逻辑运算符>

大于>=大于等于<

小于<=小于等于=等于!=不等于&&与||或!非每0.5秒检测一次按键状态提高实时性,适用于传感器输入可调整脉冲时间(如2000ms)观察控制效果思考:如何实现按键控制多段运动?输入信号刷新检测run()函数中加了延时函数和控制运行时间的参数loopcount,也就是说一个驱动控制信号只运行一个脉冲时间,这里是500ms,即0.5s任务要点:后置双驱+万向轮底座左、右直流电动机独立控制前进:左轮正转+右轮正转左转:左轮慢/停/反转,右轮正转右转:左轮正转,右轮慢/停/反转任务8*——三轮小车运动控制voidrun(void)//前进{

温馨提示

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

评论

0/150

提交评论