应用在51单片机控制的数字时钟上,在设计上采用硬件计数与软件计数相结合的方式,并且定时器T0采用了中断方式,优先级最高。
上传时间: 2017-08-03
上传用户:1583060504
实现单片机定时器中断,分别用位选段和段选断来实现LED灯和数码管的控制,本程序要在KEIL中执行方可完成。
上传时间: 2017-08-24
上传用户:woshiayin
实现LED的控制,不受具体功能限制,利用中断实现,可以用于各种目的的程序,方便实用,可重用性强
上传时间: 2013-12-04
上传用户:叶山豪
在本课中,我们要用一个按键来实现跑马灯的 10 级调速。这又会涉及到键的去抖的问 题。 本课的试验结果是,每按一次按键,跑马速度就降低一级,共 10 级。 这里我们又增加了一个变量 speedlever,来保存当前的速度档次。 在按键里的处理中,多了当前档次的延时值的设置。 请看程序: ―――――――――――――――― #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个 52 标准内核的头文件 sbit P10 = P1^0; //头文件中没有定义的 IO 就要自己来定义了 sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit K1= P3^2; bit ldelay=0; //长定时溢出标记,预置是 0 uchar speed=10; //设置一个变量保存默认的跑马灯的移动速度 uchar speedlever=0; //保存当前的速度档次 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的 //一个按键控制的 10 级变速跑马灯试验 void main(void) // 主程序 { uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入 P1 的值 uchar ledi; //用来指示显示顺序 uint n; RCAP2H =0x10; //赋 T2 的预置值 0x1000,溢出 30 次就是 1 秒钟 RCAP2L =0x00; TR2=1; //启动定时器 ET2=1; //打开定时器 2 中断 EA=1; //打开总中断 while(1) //主程序循环 { if(ldelay) //发现有时间溢出标记,进入处理 { ldelay=0; //清除标记 P1=ledp[ledi]; //读出一个值送到 P1 口 ledi++; //指向下一个 if(ledi==4) { ledi=0; //到了最后一个灯就换到第一个 } } if(!K1) //如果读到 K1 为 0 { for(n=0;n<1000;n++); //等待按键稳定 while(!K1); //等待按键松开 for(n=0;n<1000;n++); //等待按键稳定松开 speedlever++; if(speedlever==10)speedlever=0; speed=speedlever*3; //档次和延时之间的预算法则,也可以用查表方法,做出 不规则的法则 } } } //定时器 2 中断 timer2() interrupt 5 { static uchar t; TF2=0; t++; if((t==speed)||(t>30)) //比较一个变化的数值,以实现变化的时间溢出,同时限制了最慢速 度为 1 秒 { t=0; ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理 } } ―――――――――――――――――――――― 请打开 lesson11 目录的工程,编译,运行,看结果: 按 K1,速度则降低一次,总共 10 个档次。
上传时间: 2017-11-06
上传用户:szcyclone
LED 一般是恒流操作的,如何改变 LED 的亮度呢?答案就是 PWM 控制。在一定的 频率的方波中,调整高电平和低电平的占空比,即可实现。比如我们用低电平点亮一个 LED 灯,我们假设把一个频率周期分为 10 个时间等份,如果方波中的高低电平占空比是 9:1, 这是就是一个比较暗的亮度,如果方波中高低电平占空比是 10:0,这时,全部是高电平, 灯是灭的。如果占空比是 5:5,就是一个中间亮度,如果高低比是 1:9,是一个比较亮的 亮度,如果高低是 0:10,这时全部是低电平,就是最亮的。 实际上应用中,电视屏幕墙中的几十百万 LED 象素都是这样控制的,而且每一个象素 都有红绿蓝 3 个 LED,每个 LED 可以变化的亮度是几百到几万或者更多的级别,以实现真 彩色的显示。还有在您的手机中,背光灯的亮度如果是可以变化的,也应该是这种工作方式。 目前的城市彩灯也有很多都使用了 LED,需要控制亮度是也是 PWM 控制。 下面来分析我们的例程,在这个例程中,我们将定时器 2 溢出定为 1/1200 秒。每 10 次脉冲输出一个 120HZ 频率。这每 10 次脉冲再用来控制高低电平的 10 个比值。这样,在 每个 1/120 秒的方波周期中,我们都可以改变方波的输出占空比,从而控制 LED 灯的 10 个 级别的亮度。 为什么输出方波的频率要 120HZ 这么高?因为如果频率太低,人眼就会看到闪烁感 觉。一般起码要在 60HZ 以上才感觉好点,120HZ 就基本上看不到闪烁,只能看到亮度的变 化了。 下面请看程序,程序中有比较多的注释: ――――――――――――――――――――――― #define uchar unsigned char //定义一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个 52 标准内核的头文件 sbit P10 = P1^0; //要控制的 LED 灯 sbit K1= P3^2; //按键 K1 uchar scale;//用于保存占空比的输出 0 的时间份额,总共 10 份 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的 //模拟 PWM 输出控制灯的 10 个亮度级别 void main(void) // 主程序 { uint n; RCAP2H =0xF3; //赋 T2 的预置值,溢出 1 次是 1/1200 秒钟 RCAP2L =0x98; TR2=1; //启动定时器 ET2=1; //打开定时器 2 中断 EA=1; //打开总中断 while(1) //程序循环 { ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作 for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度 scale++; if(scale==10)scale=0; } } //1/1200 秒定时器 2 中断 timer2() interrupt 5 { static uchar tt; //tt 用来保存当前时间在一秒中的比例位置 TF2=0; tt++; if(tt==10) //每 1/120 秒整开始输出低电平 { tt=0; if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影 P10=0; } if(scale==tt) //按照当前占空比切换输出高电平 P10=1; } ―――――――――――――――――― 在主程序中,每延时一段时间,就自动换一个占空比,以使亮度自动变化,方便观察。 编译,运行,看结果。 可以看到,LED 的亮度以每种亮度 1 秒左右不断变化,共有 10 个级别。
上传时间: 2017-11-06
上传用户:szcyclone
STM32F407VGT6精确脉冲控制步进电机源码,采用STM32F407VGT6芯片,抛弃单脉冲输出方式,直接使用普通PWM输出方式精确输出脉冲个数,每个脉冲都可以改变频率和占空比。PWM+中断,简单粗暴。#include "sys.h"#include "delay.h"#include "pwm1.h"#include "pwm2.h"#include "pwm3.h"//注释见pwm1.c文件extern int count2;int main(void){ delay_init(168); //初始化延时函数 TIM2_Init(1,167); TIM3_Init(1,167); TIM5_Init(1,167); // delay_ms(1000); TIM2_OUTPUT(); TIM3_OUTPUT(); TIM5_OUTPUT(); while(1) { //TIM2每次输出完10个脉冲后间隔100ms再次输出 if(count2 >= 10){ delay_ms(100); TIM2_OUTPUT(); } }
标签: stm32f407vgt6 脉冲控制 步进电机
上传时间: 2021-10-26
上传用户:xsr1983
51里,从中断开始,很多初学者就会感到很迷茫,不知道自己在学什么,特上传此资料。单片机在执行程序的过程中,暂时中断执行当前的程序,转而去执行其他的应急处理程序,称为中断。例如。你正在餐厅吃饭,有朋友喊你去接电话,于是你就收到了来自朋友的一个中断(可以叫做外部中断),当你准备去接电话时,突然肚子疼,需要上厕所(内部中断),这又是一个中断,我们把引起中断的事件叫中断源(例如接电话、上厕所等,外部引起的叫外部中断,内部引起的叫内部中断),产生中断就要去处理它,这称为中断的响应。在接电话、上厕所这些中断源中,显然上厕所更需要立刻处理,这就是中断的优先级。 51单片机的中断系统十分重要,分为外部中断和定时器中断。中断发生CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理中断响应和中断服务CPU暂时中断当前的工作,转去处理事件B中断返回待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A这一过程称为中断单片机有10个寄存器主要与中断程序的书写控制有关中断允许控制寄存器IE定时器控制寄存器TCON串口控制寄存器SCON中断优先控制寄存器IP定时器工作方式控制寄存器TMOD定时器初值赋予寄存器(TH0/TH1,TL0/TL1)
上传时间: 2022-02-16
上传用户:qdxqdxqdxqdx
基于STC89C51单片机的智能电热水器的控制器的设计,要达到的控制要求有:(1)用LCD1602液晶显示水温、设置上下限和定时时间,(2)水温检测显示范围为00~99℃,精度为±1℃。(3)温度预设范围为0~99℃,当检测温度低于预设温度时,开始加热;检测温度高于预设温度时,停止加热。(4)设置4个程序按键。分别问设置按键、加键、减键、确定。(5)可以红外遥控,通过红外一体接收探头接收遥控器信号,执行与主板按键同等功能。(6)有水位检测功能,无水自动上水,无水不加热。//外部中断解码程序_外部中断0void intersvr1(void) interrupt 2 using 1{ TR0=1; Tc=TH0*256+TL0;//提取中断时间间隔时长 TH0=0; TL0=0; //定时中断重新置零 if((Tc>Imin)&&(Tc<Imax)) { m=0; f=1; return; } //找到启始码 if(f==1) { if(Tc>Inum1&&Tc<Inum3) { Im[m/8]=Im[m/8]>>1|0x80; m++; } if(Tc>Inum2&&Tc<Inum1) { Im[m/8]=Im[m/8]>>1; m++; //取码 } if(m==32) { m=0; f=0; if(Im[2]==~Im[3]) { IrOK=1; TR0=0; } else IrOK=0; //取码完成后判断读码是否正确 } //准备读下一码 }}
上传时间: 2022-05-14
上传用户:
在当今能源短缺的情况下,电动车的发展变的尤为重要。车用电机控制器是电动汽车的最关键的部分之一,受到了国内外学者的高度重视,近些年来发展也非常迅速。永磁同步电动机因有高效率、高功率密度、调速性能好等优点,被用作电动汽车驱动电机,对其控制方法的研究很有意义.IGBT是永磁同步电机控制器的核心部件,然而IGBT驱动效果的好坏对电机驱动的安全性和可靠性有非常大影响,所以对IGBT驱动技术的研究很意义。本文首先对永磁同步电机建立了数学模型,并介绍了矢量控制方法和空间矢景脉宽调制(SVPWM)技术,并在MATLAB/Simulink环境下对SVPWM进行仿真。本论文以TMS320F2812为主控芯片,在该控制器中还包括了电源电路、信号检测电路和保护电路等,在论文中对每一硬件部分做了详细的介绍,分析了每个电路的功能和作用。同时介绍了软件流程,重点介绍了中断部分的软件流程,并对位置信号处理和校正做了详细说明,在硬件电路中着重分析了驱动电路部分。对IGBT的选型做了详细的介绍,并对驱动电路的要求做了进一步的说明。在本论文中驱动芯片选用的是HCPL-316J,it IGBT开通和关断所需的+15V和-5V电压,由所设计的开关电源电路提供。同时对IGBT的通态损耗和开关损耗做了分析,并对引起损耗的参数做了分析说明。最后为了验证控制器的特性,在实验台架上做了大量的实验,验证了控制器的整体方案的设计。通过实验证明该控制器能够在电动车中可靠运行。
上传时间: 2022-06-21
上传用户:zhaiyawei
本课题采用了基于高频电压信号注入法的永磁同步电动机的无传感器矢量控制方法,此种方法利用内置式电机的凸极性的特性,适合于电机在低速运行状态下对转子位置和转速进行估算,对运行中的电机参数变化不敏感,系统具有较强的鲁棒性。本文采用了以内置式电动机为研究对象,首先分析了永磁同步电动机的结构和数学模型,并介绍了矢量控制坐标变换方法、空间矢量脉宽调制技术(SVPWM)。进而阐述高频电压信号注入法的原理,建立数学模型。然后提出高频电压信号注入的方式,通过对载有转子位置信息的高频信号进行处理,对转子的磁极位置和转速等信息进行估计计算。本文还通过使用Matlab/Simulink仿真平台,建立了基于高频信号注入法原理的永磁同步电动机的无传感器控制仿真模型,实验结果验证了此种算法的可行性。最后通过使用德州仪器公司生产的TMS320F28335为核心芯片,搭建了控制系统电路,并同时介绍了系统的电源电路、控制电路、电流检测电路、电流保护电路等硬件电路。另外对控制算法中的主要部分,包括PWM中断程序、矢量控制程序、数字滤波器的算法都进行了介绍。最后的实验结果表明,这种无传感器的矢量控制方法适用于电机在低速时的控制要求,动态性能较好,能够准确跟踪转子的实际位置,估算转子转速,控制系统的鲁棒性较好,实现了无传感器控制的实验目的。
上传时间: 2022-06-30
上传用户: