单片机原理及应用实践教程 课件 第3、4章 IO口控制与Proteus仿真、定时计数器与中断_第1页
单片机原理及应用实践教程 课件 第3、4章 IO口控制与Proteus仿真、定时计数器与中断_第2页
单片机原理及应用实践教程 课件 第3、4章 IO口控制与Proteus仿真、定时计数器与中断_第3页
单片机原理及应用实践教程 课件 第3、4章 IO口控制与Proteus仿真、定时计数器与中断_第4页
单片机原理及应用实践教程 课件 第3、4章 IO口控制与Proteus仿真、定时计数器与中断_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

第三章

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)//前进{EN1=1;EN2=1;IN1=0;IN2=1;//左电机正转

IN3=0;IN4=1;//右电机正转}voidrunleft(void)//左转{EN1=1;EN2=1;IN1=0;IN2=1;//左电机正转

IN3=1;IN4=0;//右电机反转}三轮小车控制代码示例(mcu311.c)voidrun(void)//前进{EN1=1;EN2=1;IN1=0;IN2=1;//左电机正转

IN3=0;IN4=1;//右电机正转}voidrunleft(void)//左转{EN1=1;EN2=1;IN1=0;IN2=1;//左电机正转

IN3=1;IN4=0;//右电机反转}三轮小车控制代码示例(mcu311.c)左、右轮实际转速不一致→需要PWM调速

定义leftspeed(velocity)和rightspeed(velocity)前进时左轮占空比50%,右轮25%(需调试)左转时左轮占空比10%,右轮70%实现前进、左转、右转、后退等动作PWM调速实现小车精确控制(mcu312.c)编写函数实现:前进后退左转右转

组合运动实现正方形、圆形轨迹

思考:如何实现匀速圆弧运动?小车运动轨迹编程挑战1.实现按键控制小车前进、后退、左转、右转、停止。2.编写程序让小车走一个正方形轨迹。3.使用PWM实现小车匀速转弯。4.思考:如何用超声波传感器实现避障小车?课后练习与拓展感谢观看THANKSFORWATCHING第四章

定时/计数器与中断目录CONTENTS01单片机中断系统中断机制原理、中断优先级与触发逻辑04看门狗防护机制看门狗工作原理、系统防死机应用03定时/计数器配置与编程初值计算、初始化流程与定时精准实现02定时/计数器基础内部结构、控制寄存器与工作模式05进阶功能与宏定义开发C语言宏定义、音阶频率与音频计数06工程实践与本章总结PWM项目实训、核心重难点梳理复盘学习目标01原理体系认知理解51单片机中断系统、定时/计数器的底层运行逻辑,明晰看门狗的功能作用与应用场景,建立单片机精准时序控制的知识框架。02核心功能精通熟练掌握中断优先级配置、定时器初始化、工作模式切换的编程方法,掌握C语言宏定义简化程序开发的实操技巧。03精准技术落地掌握定时初值、音阶频率的计算方法,能够利用定时器中断,独立输出占空比可调、精度稳定的PWM控制信号。04综合项目应用可以独立完成二进制计数、呼吸灯调光、直流电机调速、电子音响等综合实训任务,具备时序类项目的仿真设计与问题调试能力。

51单片机有5个中断源,2个中断优先级中断响应顺序(同级下):

INT0→T0→INT1→T1→串口高优先级可打断低优先级,同优先级或低优先级不能打断4.1单片机的中断系统中断相关寄存器1.中断允许寄存器IE中断允许寄存器IE各位的含义EA总中断;EX0/EX1外部中断;ET0/ET1定时器中断;ES串口中断;EX的英文全称为external(外部),所以EX0表示外部中断0中断相关寄存器2.中断优先级寄存器IP可位寻址,相应位置1表示高优先级,相应位置0表示低优先级。中断优先级寄存器IP各位的含义PS:串口中断。PT1:定时/计数器T1中断。PX1:外部中断1。PT0:定时/计数器T0中断。PX0:外部中断0。中断相关寄存器3.中断控制寄存器TCON中断控制寄存器TCON各位的含义IT0/IT1:触发类型控制位,IT0/IT1=1表示下降沿触发,IT0/IT1=0表示低电平触发,可以由软件来设置或清除。IE0/IE1:中断请求标志位,当检测到INT0/INT1引脚上出现外部中断信号的下降沿时,由硬件将相应的中断请求标志位置1,申请中断。进入中断服务程序后,中断请求标志位被硬件自动清除。TR0/TR1:T0/T1运行控制位,由软件置1或清0,置1时T0/T1开始工作,清0时T0/T1停止工作。TF0/TF1:T0/T1中断请求标志位,当T0/T1计数溢出归零时,由内部硬件将相应的中断请求标志位置1;当CPU响应中断并进入中断服务程序后,由硬件自动将TF0/TF1清0中断相关寄存器4.串口控制寄存器SCON串口控制寄存器SCON各位的含义TI(TransmitInterrupt,发送中断):串口发送中断标志位,当CPU将数据写入发送缓冲器SBUF时,启动发送。每发送完一帧串行数据后,由中断系统的硬件自动将TI置1,但CPU响应中断时,并不清除TI,必须在中断服务程序中用指令将TI清0。RI(ReceiveInterrupt,接收中断):串口接收中断标志位,在允许串口接收时,每接收完一帧数据后,中断系统的硬件自动将RI置1。5.中断服务程序中断服务程序被定义为函数返回值函数名([参数])[模式][再入]interruptm[usingn]interrupt0:外部中断0interrupt1:定时器T0interrupt2:外部中断1interrupt3:定时器T1interrupt4:串口中断5.中断服务程序usingn:定义函数使用的工作寄存器组,n的取值范围为0~3中断服务程序目标代码的影响如下。(1)当调用中断服务程序时,特殊功能寄存器中的累加器A、寄存器B、DPH、DPL和PSW在需要时入栈。(2)如果不使用工作寄存器组切换,中断服务程序所需的所有工作寄存器都入栈。(3)退出中断服务程序前,所有工作寄存器都出栈。(4)中断服务程序由““RETI”指令终止。EA=1;EX0=1;IT0=1;外部中断0为例,开放中断源。外部中断0的中断服务程序结构voidint_0()interrupt0{}功能:数码管循环显示0~9,按键触发外部中断0,数码管闪烁10次后继续循环关键代码:EA=1;EX0=1;IT0=1;

voidint0()interrupt0{//闪烁处理

}外部中断示例(mcu401.c)外部中断仿真电路51单片机:T0、T1(16位)52单片机:增加T2

两种模式:定时模式:对内部时钟计数计数模式:对T0(P3.4)/T1(P3.5)外部脉冲计数最小延时单位:1个机器周期(12MHz→1μs)4.2定时/计数器概述TCON:TF1、TR1、TF0、TR0(高4位)TMOD:GATE、C/T、M1、M0(高4位给T1,低4位给T0)GATE=0:仅TRx启动;GATE=1:TRx+外部引脚高电平启动C/T=0:定时;C/T=1:计数定时/计数器控制寄存器4.2.1定时/计数器的控制4.2.1定时/计数器的控制定时/计数器工作方式寄存器TMODTMOD用于确定定时/计数器的工作方式及功能,其中高4位用于控制T1,低4位用于控制T0。4.2.2定时/计数器工作方式(T0为例)根据定时时间和工作方式,通过公式:定时时长T=(2n-X)×12/fosc(fosc

为晶振频率),计算出计数初值X,把X转换成二进制数,把高8位送给TH0/TH1,低8位送给TL0/TL1,就可以启动定时/计数器开始定时了。公式:T=(2^n-X)×12/f_osc

例:f_osc=12MHz,T=10ms,方式1(n=16)

X=65536-10000=55536=0xD8F0TH0=0xD8,TL0=0xF0(1)方式0当TMOD中的M1M0=00时,定时/计数器T0工作在方式0,构成13位定时/计数器,它由TH0的8位和TL0的低5位组成。定时/计数器T0方式0(2)方式1当TMOD中M1M0=01时,定时/计数器T0工作在方式1,构成16位定时/计数器,它由TH0的8位和TL0的8位组成。定时/计数器T0方式1(3)方式2当TMOD中的M1M0=10时,定时/计数器T0工作在方式2,即8位自动重载方式,它由TL0构成8位计数器,TH0仅用来存储时间常数,即计数初值。定时/计数器T0方式2(4)方式3当TMOD中的M1M0=11时,定时/计数器T0工作在方式3。需要说明的是,只有T0具有方式3,T1不具有。T0工作在方式3时,TH0和TL0分成2个独立的8位计数器。定时/计数器T0方式3(1)选择工作方式,设置M1M0的值。(2)确定门控位GATE,若GATE为0,则只要软件设定好参数即可;若GATE为1,则需要软件设定参数,且定时/计数器的中断引脚需要为高电平。(3)确定定时/计数器的工作模式,若C/T为0,则为定时模式;若C/T为1,则为计数模式。(4)给TMOD送字节数进行设置。(5)给定时/计数器送计数初值,若计数初值为8位以上,则对TH0/TH1和TL0/TL1分别置数。(6)开启定时/计数器中断,即将ET0或ET1置1。(7)开启总中断,即将EA置1。(8)启动定时/计数器,即将TR1或TR0置1。定时/计数器初始化设置功能:P1.0输出50Hz方波(周期20ms,每10ms取反)关键代码:TMOD=0x01;//T0方式1TH0=0xD8;TL0=0xF0;EA=1;ET0=1;TR0=1;voidT0_int()interrupt1{P1_0=~P1_0;TH0=0xD8;TL0=0xF0;}定时器示例(mcu402.c)作用:防止程序跑飞或死循环工作过程:程序正常运行中定期“喂狗”若超时未喂狗,WDT复位单片机STC单片机内部集成WDT,通过WDT_CONTR寄存器控制4.2.3*看门狗(WDT)原理字节地址:E1H,不能位寻址位功能:

EN_WDT:启动看门狗

CLR_WDT:喂狗(清0计数器)

IDLE_WDT:空闲模式是否计数

WDT_PS[2:0]:分频系数(决定溢出时间)STC看门狗寄存器WDT_CONTR符号地址B7B6B5B4B3B2B1B0WDT_CONTRCIHWDT_FLAG-EN_WDTCLR_WDTIDL_WDTWDT_PS[2:0]看门狗定时器寄存器WDT_CONTR公式:溢出时间=(N×分频系数×32768)/晶振频率

N=12(12T模式)或N=6(6T模式)

例:f_osc=12MHz,12T,分频系数=5(对应WDT_PS=101)

溢出时间≈2s看门狗溢出时间计算WDT_PS[2:0]预分频数看门狗溢出时间(ms)000265.500141310108262.101116524.2100321048.5101642097.11101284194.31112568388.6不同分频系数时看门狗定时器的溢出时间看门狗示例(mcu403.c)sfrWDT_CONTR=0xe1;sbitled1=P1^0;voiddelayms(uintxms){uinti,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}voidmain(){WDT_CONTR=0x35;led1=0;delayms(500);led1=1;while(1){

delayms(1000);WDT_CONTR=0x35;}若删除喂狗语句,LED会不断闪烁(单片机反复复位)看门狗初始化与喂狗函数封装voidwdt_init(void){WDT_CONTR=0x35;//配置并启动WDT}voidwdt_feed(void){WDT_CONTR=0x35;//喂狗}任务1——二进制计数器代码结构:

TMOD=0x05;//计数模式,方式1TR0=1;ET0=1;EA=1;voidtime0()interrupt1{pp++;}while(1){led=pp;}4.3工程实践功能:按键S2按下次数计数,P1口LED显示8位二进制硬件:按键接P3.4(T0外部计数输入),P1接LED工作方式:T0方式1(16位计数器)任务2——PWM信号发生(固定占空比)关键代码:

TH0=0xFF;TL0=0xA4;//100μsif(pp<=2)pwm=1;elsepwm=0;if(pp==10)pp=0;

输出引脚:P1.0,可用示波器观察目标:产生1kHz、占空比1/5的PWM信号方法:定时器T0方式1,每100μs中断一次,中断10次为1个周期扩展——按键调节占空比(mcu406.c)增加按键S2(加)、S3(减)调节占空比数码管显示当前占空比档位(0~10)按键扫描去抖,边界处理(0~10)数码管驱动:P0口数据,P2.6段选,P2.7位选核心逻辑:num值决定占空比,动态调节扩展——按键调节占空比

数码管驱动显示电路任务3——呼吸灯原理呼吸效果:LED亮度缓慢变化(由暗变亮,再由亮变暗)本质:PWM占空比动态渐变参数:

·PWM周期:10ms·每200ms调节一次占空比

·占空比范围:1~9标志位:Direct_fla

温馨提示

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

评论

0/150

提交评论