首页 > 精品范文库 > 15号文库
LED闪烁试验5个例程专题
编辑:夜幕降临 识别码:24-896057 15号文库 发布时间: 2024-02-02 13:16:17 来源:网络

第一篇:LED闪烁试验5个例程专题

1-----------------------------/************************************************************************************* * LED闪烁的简单试验

*

*

*

* *

延时实现p2口LED流水灯效果(用循环移位指令)

* * 连接方法: JP11(P2)和JP1(LED灯)用8PIN排线连接起来

*************************************************************************************/ #include

//此文件中定义了51的一些特殊功能寄存器 #include

voiddelayms(unsigned char ms)// 延时子程序 {

}

main(){ unsigned char LED;

unsigned char i;while(ms--){ } for(i = 0;i < 120;i++);

LED = 0xfe;while(1){ P2 = LED;

//0xfe = 1111 1110 delayms(250);LED = LED << 1;

//循环右移1位,点亮下一个LED “<<”为左移位

if(LED == 0x00)

} }

{LED = 0xfe;} // 0xfe = 1111 1110

---2----------------------------

/************************************************************************************ *

LED闪烁的简单试验

*

连接方法: JP11(P2)和JP1用8PIN排线连接起来

* *

*************************************************************************************/

#include

//此文件中定义了51的一些特殊功能寄存器

void delay(unsigned int i);//声明延时函数

main(){

P2 = 0x00;//置P0口为低电平

delay(600);// 调用延时程序

P2 = 0xff;//置P0口为高电平

delay(600);// 调用延时程序

*

* }

/*******延时函数*************/ void delay(unsigned int i){ unsigned char j;

for(i;i > 0;i--)

//循环 600*255 次

for(j = 255;j > 0;j--);}

-3------------------------------/*******************************************************************************;

二进制加法试验

*;p2口八个灯作二进制加法。理解二进值的计算

*;硬件连接:p2口8路指示灯

;

;* 描述:

;

p2口八个灯作二进制加法。理解二进值的计算

;* 连接方法: JP11(P2)和JP1(LED灯)用8PIN排线连接起来

************************************************************************************/ #include void delay(unsigned int i);//声明延时函数

main(){

unsigned char Num = 0xff;while(1)

{P2 =Num;

delay(1000);

//延时函数

Num--;

}

*

*

*

*

*

}

/*******延时函数*************/ void delay(unsigned int i){ unsigned char j;for(i;i > 0;i--)for(j = 255;j > 0;j--);}

-4-----------------------------

/******************************************************************************* * 描述:

跑马灯程序

* 连接方法: JP11(P2)和JP1(LED灯)用8PIN排线连接起来 *

*******************************************************************************/

#include #include

/***************************************************************************** * 延时子程序

*

******************************************************************************/ voiddelayms(unsigned char ms){ unsigned char i;while(ms--){ for(i = 0;i < 120;i++);

*

*

*

* *

} } /***************************************************************************** * 主程序

*

*

* ******************************************************************************/ main(){

}

unsigned char LED;LED = 0xfe;P2 = LED;while(1){ delayms(250);LED = _crol_(LED,1);P2 = LED;}

//循环右移1位,点亮下一个LED 此函数位库函数

--5----------------------------/********************************************************************************;

跑马灯实验

;

延时实现LED流水灯效果

p2口八个灯作跑马灯。采用了寄存器存中间数;

连接方法: JP11(P2)和JP1(LED灯)用8PIN排线连接起来

;********************************************************************************/

#include void delay(unsigned int i);//声明延时函数 char LED;main(){

unsigned char i;

while(1)

{ LED = 0xfe;

for(i = 0;i < 8;i++)

{

*

*

*

P2 = LED;delay(500);

LED = LED << 1;

// 左移

LED = LED | 0x01;// 移位后,后面的位为高电平

if(LED == 0x7f)break;//提前退出 FOR 循环

}

for(i = 0;i < 8;i++)

{

P2 = LED;delay(500);

LED = LED >> 1;// 右移

LED = LED | 0x80;// 移位后,后面的位为高电平

}

}

}

/*******延时函数*************/ void delay(unsigned int i){ unsigned char j;for(i;i > 0;i--)for(j = 255;j > 0;j--);

第二篇:LED灯闪烁原因分析

LED灯闪烁原因分析(转)

闪烁有很多原因,但最终表现就是电子变压器没有真正的进入连续工作状态.从电子变压器的原理可以分析的出大部分常见的电子变压器是电流正反馈驱动的形式.也就是说,当负载小到一定值的时候,ET将得不到足够的反馈能量而停振.这也是很多电子变压器出厂时在外壳上印上额定负载“xxW~xxW”的原因.当然LED要恒流驱动,又要节能.恒流驱动一般表现为容性和感性.当驱动电路的滤波电容电压为0V时,接通电子变压器的瞬间,将会对电容大电流充电,此时ET工作.随着电容电压升高,充电电流减小.此时ET得到的反馈电流不足维持其工作而停止.这时电容开始放电,当电容电压够底,又刚好在电子变压器触发脉冲到来时,电子变压器才又重新工作.然而电子变压器前端一般没有滤波电容,所以在AC输入的正弦波过零点时电子变压器一定会关断^由于不同的电子变压器的参数及触发时间和反馈能量不相同.导致目前的驱动不能适应多款电子变压器的原因.要想适应多款的变压器需要处理变压器的过流保护问题,如何让小的负载连续工作问题,如何大电流持续吸取变压器能量(维持变压器在触发后连续工作),如何在电子变压器过“0”点关断到重新启动过程中维持负载连续工作?

目前几种做法:

BUCK架构 特点:低压大电流典型BUCK=>1*3W LED发热大,光效底 闪烁几率降低.BUCK架构 特点:高电压小电流 典型BUCK=>3*1W LED 发热小,电压利用率底 闪烁几率很高

BUCK-BOOST架构高压小电流 典型BUCK-BOOST=>3*1W~9*1W 热量稍大,电压利用率高.闪烁机率很底.由此几种架构来看,站在推广和应用层面考虑,最有优势的还是BUCK-BOOST的架构.(转自klsen)

第三篇:STM32定时器中断使LED灯闪烁

STM32定时器中断使LED灯闪烁 知识点:

Stm32共有11个定时器:

1.两个高级定时器:TIM1、TIM8-------------------------APB2 2.四个通用定时器:TIM2~TIM5-------------------------APB1 3.两个基本定时器:TIM6、TIM7-------------------------APB1 4.两个看门狗

5.一个系统嘀嗒定时器(SysTick)主程序main.c: #include “stm32f10x.h” #include “stm32f10x_rcc.h” #include “stm32f10x_gpio.h” #include “stm32f10x_tim.h” #include “stm32f10x_exti.h” #include “system_stm32f10x.h” #include “misc.h”

void RCC_Configuration(void);void GPIO_Configuration(void);void TIM3_Configuration(void);void NVIC_Configuration(void);

int main(){ SystemInit();

RCC_Configuration();GPIO_Configuration();TIM3_Configuration();NVIC_Configuration();while(1);}

void RCC_Configuration(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);}

void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);}

void TIM3_Configuration(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

TIM_TimeBaseStructure.TIM_Period = 202_;//频率:72MHz 72000000/36000=202_ TIM_TimeBaseStructure.TIM_Prescaler = 35999;//36000-1=35999 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);TIM_Cmd(TIM3,ENABLE);}

void NVIC_Configuration(void)//配置中断优先级 { NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);} 中断函数stm32f10x_it.c #include “..includestm32f10x.h” #include “..includestm32f10x_it.h” #include “..includestm32f10x_gpio.h” #include “..includestm32f10x_tim.h”

void TIM3_IRQHandler(void){ TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==Bit_RESET){ GPIO_SetBits(GPIOA,GPIO_Pin_2);}else{ GPIO_ResetBits(GPIOA,GPIO_Pin_2);} } 中断函数声明头文件stm32f10x_it.h: #ifndef __STM32F10x_IT_H #define __STM32F10x_IT_H void NMIException(void);void HardFaultException(void);void MemManageException(void);void BusFaultException(void);void UsageFaultException(void);void DebugMonitor(void);void SVCHandler(void);void PendSVC(void);void SysTickHandler(void);void WWDG_IRQHandler(void);void PVD_IRQHandler(void);void TAMPER_IRQHandler(void);void RTC_IRQHandler(void);void FLASH_IRQHandler(void);void RCC_IRQHandler(void);void EXTI0_IRQHandler(void);void EXTI1_IRQHandler(void);void EXTI2_IRQHandler(void);void EXTI3_IRQHandler(void);void EXTI4_IRQHandler(void);void DMA1_Channel1_IRQHandler(void);void DMA1_Channel2_IRQHandler(void);void DMA1_Channel3_IRQHandler(void);void DMA1_Channel4_IRQHandler(void);void DMA1_Channel5_IRQHandler(void);void DMA1_Channel6_IRQHandler(void);void DMA1_Channel7_IRQHandler(void);void ADC1_2_IRQHandler(void);void USB_HP_CAN_TX_IRQHandler(void);void USB_LP_CAN_RX0_IRQHandler(void);void CAN_RX1_IRQHandler(void);void CAN_SCE_IRQHandler(void);void EXTI9_5_IRQHandler(void);void TIM1_BRK_IRQHandler(void);void TIM1_UP_IRQHandler(void);void TIM1_TRG_COM_IRQHandler(void);void TIM1_CC_IRQHandler(void);void TIM2_IRQHandler(void);void TIM3_IRQHandler(void);void TIM4_IRQHandler(void);void I2C1_EV_IRQHandler(void);void I2C1_ER_IRQHandler(void);void I2C2_EV_IRQHandler(void);void I2C2_ER_IRQHandler(void);void SPI1_IRQHandler(void);void SPI2_IRQHandler(void);void USART1_IRQHandler(void);void USART2_IRQHandler(void);void USART3_IRQHandler(void);void EXTI15_10_IRQHandler(void);void RTCAlarm_IRQHandler(void);void USBWakeUp_IRQHandler(void);void TIM8_BRK_IRQHandler(void);void TIM8_UP_IRQHandler(void);void TIM8_TRG_COM_IRQHandler(void);void TIM8_CC_IRQHandler(void);void ADC3_IRQHandler(void);void FSMC_IRQHandler(void);void SDIO_IRQHandler(void);void TIM5_IRQHandler(void);void SPI3_IRQHandler(void);void UART4_IRQHandler(void);void UART5_IRQHandler(void);void TIM6_IRQHandler(void);void TIM7_IRQHandler(void);void DMA2_Channel1_IRQHandler(void);void DMA2_Channel2_IRQHandler(void);void DMA2_Channel3_IRQHandler(void);void DMA2_Channel4_5_IRQHandler(void);

#endif /* __STM32F10x_IT_H */

第四篇:项目2:用8253控制LED闪烁

项目2:用8253控制LED闪烁

一、项目要求与目的1、项目要求:编程将8253定时器0设定为方式3,定时器1设定在方式2,定时器0输出作为定时器1的输入,定时器1的输出接在一个LED上,运行后可观察到该LED不停闪烁。

2、项目目的:

(1)

学习8253可编程定时器/计数器定时方法。

(2)学习8253多级串联实现大时间常数的定时方法。

(3)学习8086控制8253可编程定时器的方法。

二、项目电路连接与说明

1、项目电路连接:8253的片选孔用导线接至译码处CS0插孔,CLK0接至OUT1插孔上,CLK1接至1MHz插孔上,GATE0和GATE1接至+5V电源插孔上,OUT0接至发光二极管LED0的阴极上。

2、项目说明:用8253对标准脉冲信号进行计数,就可以实现定时功能,8253的工作频率为0~2MHZ,所以输入的CLK频率必须在2MHZ以下。用实验板上的1MHz做为标准信号,将8253可编程计数器/定时器的时间常数设在1000000次,就可以在定时器的管脚上输出1秒钟。由于8253每个计数器只有十六位,因此要用两个计数器才能实现一百万次的计数,实现每一秒钟输出状态发生一次反转

由于定时常数过大,就要用多级串联方式。本实验采用两级计数器。定时常数分别为100和10000。将计数器1的输出OUT1接到计数器0输入CLK0上,计数器0的输出接到LED0。

三、项目电路原理框图

用8253控制LED闪烁的电路原理框图如图6所示。电路由8086CPU芯片、8253芯片、频率1MHz和发光二极管LED等组成。

四、项目程序设计

1、程序流程图

用8253控制LED闪烁程序流程图

2、程序清单

请写出用8253控制LED闪烁程序清单。

CODE

SEGMENT

ASSUME

CS:CODE

ORG

100H

START

:

MOV

AL,36H

(0011

0110)

;

计数器0初始化,16位,方式3,二进制

MOV

DX,04A6H

;8253控制地址端口

OUT

DX,AL

MOV

AX,2710H

;计数值

MOV

DX,04A0H

OUT

DX,AL

;

计数器低八位

MOV

AL,AH

OUT

DX,AL

;

计数器高八位

MOV

AL,74H(0111

0100)

;

计数器1初始化,16位,方式2,二进制

MOV

DX,04A6H

OUT

DX,AL

MOV

AX,64H

;计数值

MOV

DX,04A2H

OUT

DX,AL

;

计数器低八位

MOV

AL,AH

OUT

DX,AL

;

计数器高八位

BG:

JMP

BG

CODE

ENDS

END

START

第五篇:用LED手电筒做物理试验

用LED手电筒做物理实验

作者:薛长华 阜宁高等师范学校 选自《物理教学》202_年5月

LED可充电手电筒已很普及,学生对其非常熟悉,用它进行简单改装做物理演示实验,具有原理简单,现象清楚,学生喜欢的特点。现介绍如下:

改装方法

图1是市售LED手电筒的电路原理图(充电电路部分省略)。改装时只需拆开LED手电筒,将两根长约半米的软导线焊接在LED手电筒开关的两端,在LED手电筒开关位置的外壳上钻两个小孔,再从两个小孔位置处引出两导线。再取一只万用表用电压档测量一下两根软导线间的电压,并根据测量结果在LED手电筒上标出两根软导线所接电筒内部电池的正负极即可,如图2所示。这时你如果短接两导线就相当于LED手电筒开关接通,LED手电筒便能正常发光。

实验时,将实验装置接在这两根引出导线之间,这时实验装置与LED手电筒内部的电池及发光管构成闭合电路。实验过程中,通过观察LED手电筒是否发光,以及通过观察LED手电筒发光强弱的变化即可显示实验结果。

实验演示

一、用LED手电筒做光通信实验

器材准备

LED手电筒一只、J2423可拆变压器一台、MP3一只、光电池一只、J2354滑动变阻器(50Ω)一只、100μF电解电容一只,带卡拉OK功能录音机一台。

/ 3

实验1 用变压器耦合输入音频调制信号

实验一 用变压器耦合输入音频调制信号做光通信演示

实验的实验装置如图3所示。图中T为J2423可拆变压器,变压器原线圈(1400T)0~200T端用导线和耳机插头接MP3耳机插口,变压器的副线圈(400T)通过开关S与LED手电筒两根引线导线相连。当S闭合时,LED手电筒电源被接通,LED手电筒射出一定强度的亮光。这时打开MP3,MP3输出的音频信号由可拆变压器耦合到LED手电筒和可拆变压器副线圈构成的闭合电路中,使LED手电筒发射的光强度随音频信号改变,这样就完成了音频信号对LED手电筒光强的调制及发射。

图4是光信号接收装置,图中光电池接带卡拉OK功能录音机的话筒输入端,将录音机置于卡拉OK功能状态,这时录音机起放大器作用。当被音频信号调制的光信号照射到光电池上时,就可获得按音频信号规律同步变化的电信号(实现这种光电转换用的光电池片可用一般的太阳能光电池,例如各类计算器用的硅光电池片)。然后将光电池产生的电信号送进录音机的话筒插孔,经录音机放大后即可推动扬声器还原出MP3播放的声音。

实验时,若拆去可拆变压器铁芯,而直接将可拆变压器原线圈和副线圈相互靠近,利用互感现象也能将音频信号从一个线圈传递到另一个线圈,实现音频信号对LED手电筒光强的调制。

实验时,若用半导体收音机中的小变压器代替可拆变压器,可使实验装置小型化。学生就能模仿制作。

实验2 用电容耦合输入音频调制信号

图5是用电容耦合输入音频调制信号做光通信演示实验的实验装置原理图,图中J2354滑动变阻器R(50Ω)通过开关S与LED手电筒两根引出导线相连,一只100μF电解电容C用导线和耳机插头接MP3耳机插口。当S闭合时,LED手电筒电源被接通,LED手电筒射出

/ 3

一定强度的亮光,调节滑动变阻器的阻值使LED手电筒亮度适中。这时打开MP3,MP3输出的音频信号通过电容器耦合到LED手电筒和滑动变阻器构成的闭合电路中,实现音频信号对LED手电筒光强的调制。当被音频信号调制的光信号照射到光电池上时,即可通过带卡拉OK功能的录音机放大还原出MP3播放的声音。

显然,上述二则演示不但可以帮助学生了解现代激光通信的基础知识。还可以使学生对变压器耦合和电容耦合的概念和现象加深现象。还特别适合学生进行课外模仿和探究。

二、用LED手电筒做遥控电视机实验

实验装置如图6所示,取一台电视机和与之配套的遥控器,拆开遥控器,先用电烙铁焊下遥控器中的红外发光二极管,再用二根细导线从原红外发光二极管位置处引出,其中接原红外发光二极管正极的导线接三极管的基极,负极的导线接三极管的发射极。实验时,按下遥控器上的按键,学生可观察到LED手电筒发光并闪烁。将遥控器对准光电池,学生从录音机喇叭中可听到响亮的“嘟嘟”声。将LED手电筒靠近(10cm以内)对准电视机遥控接收窗口,学生可看到用LED手电筒发出的光一样能实现电视机的各种摇控功能。实验表明;按下遥控发射器上的按键,LED手电筒发出的是带有编码信号的可见光。显示利用LED手电筒能实现摇控信息的传递。

为什么LED手电筒遥控距离很短,而遥控器遥控距离很远呢?这是一个可以启发学生思考并用实验继续研究探讨的问题。这是因为遥控器遥控发射的是红外光,电视机遥控接收头光敏器件只接收红外信号,所以遥控距离远。LED手电筒发射的主要是可见光和少量红外光,可见光不能被电视机遥控接收头接收,所以遥控距离短。

实验时,若将LED手电筒上的多只发光管中的一只换成红外发光二极管(此时需将红外发光二极管和一只100Ω的电阻串联接在原发光管位置,注意二极管的正负极要连接正确),你会发现这时的LED手电筒也能实现远距离遥控电视机了。

/ 3

LED闪烁试验5个例程专题
TOP