单片机(microcontroller)可以通过控制其硬件输出接口来控制LED灯的亮灭。在使用单片机控制LED之前,需要对单片机的硬件进行接线和配置。首先,将LED的正极接入单片机的硬件输出口,将LED的负极接入单片机的地。然后,使用单片机编程
方法1:用8050的三极管做开关电路,三极管的基极接P2.0,然后用集电极通过LED接5v电源,发射极通过220欧姆电阻接地。执行SETB P2.0 指令可以点亮led。方法2:用P1.0直接驱动led,应该让led另一端通过220欧姆电阻接5v
即原来led灯亮的话 执行该条语句后就变成灭;原来灭的话 执行该条语句后 就变成亮。按键按下就打控制灯的io取反就可以了。如:if(key1==1){while(key1==1); // 等待按键放开led1=~led1;}
如何用单片机控制LED灯的亮度,不要PWM波的程序 程序名称:一只按键控制两只LED灯十种亮度显示 编程人:xx 备注:此程序简单 #include
LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片机的IO口输出一个0或1来是LED二极管电路正向导通形成发光。
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
如何通过单片机来控制LED灯的亮灭?
用D触发器+一个反向器,按钮1按下后输入上升沿到触发器的触发端,触发器D端接高电平。触发器的/Q端接LED负极,LED正极接电源。
set_led_to(unsigned char value){ LED_PIN = value;}void main(void){ while(1) { if( is_key1_press() && is_key2_press()) { set_led_to(LED_
;led1 = ~led1;//KEY1按一下LED1亮 再按一下LED1灭 } } if(!key2) { Delay(10);if(!key2) { while(!key2) led1 = 1; //按下KEY2时LED1灭 led2 = ~led2;//KEY2也是这样 } } } }
define K p0^7 define LED_BLUE p0^0 define LED_RED p0^4 void scan_key(void);//用来控制LED_RED void DelayMS(unsigned int x);void main(){ while(1){ if(K==0)LED_BLUE=1;scan_key();else LED_BLUE
等到执行到 while(!ReadValue);//等待按键被放开 这条指令时 数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新
2:led2=!led2;delay_ms(200);break;default:break;} void 在这里按键获取函数(void){ key=获取到的值;//没有按键按下的话是进入不到这里 } } }
我不知道为什么中文复制之后这里变乱码了,所以截图作为参照,代码附在后面:include "sys.h"#include "usart.h"#include "delay.h"#include "led.h" #include "key.h" //°´¼ü´¦À
基于STM32的嵌入式系统:编程实现2个按钮控制LED灯,按下button1,LED1翻转;按下button2,LED2翻转。
①配置所需的GPIO管脚,也就是PA2和PA3。②从程序来看,高电平点亮,低电平熄灭。
基于正点原子mini板的程序设计在STM32F103实验一:点亮LED灯的基础下(已经建立好led.h和led.c文件),添加头文件key.h和源文件key.c到HARDWARE文件夹下。STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM
3.编写程序:使用单片机的编程软件(如Arduino IDE、Keil等),编写控制LED灯的程序。以下是一个简单的示例程序(以Arduino为例):// 定义LED灯连接的引脚 const int ledPin = 13;void setup() { // 将LED引脚设置为
我不知道为什么中文复制之后这里变乱码了,所以截图作为参照,代码附在后面:include "sys.h"#include "usart.h"#include "delay.h"#include "led.h" #include "key.h" //°´¼ü´¦À
先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;
等到执行到 while(!ReadValue);//等待按键被放开 这条指令时 数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新
请教一个stm32程序:我写了一个按键控制LED灯翻转,调试成功的程序如下:
IO默认高阻态,导致蜂鸣器使能了,把在程序里把蜂鸣器使能脚拉低就可以了
这是stm32开发板的一部分原理图,请问其中的LED和蜂鸣器都接在PD41、按键检测的话可以连接到任意的GPIO上面,只要初始化配置为输入,程序中采集该GPIO的电平状态来判断按键的状态即可。另外也可以使用GPIO的外部中断功能来
1、按键检测的话可以连接到任意的GPIO上面,只要初始化配置为输入,程序中采集该GPIO的电平状态来判断按键的状态即可。另外也可以使用GPIO的外部中断功能来判断按键状态。蜂鸣器把GPIO配置为输出就能控制了。2、led是灯,蜂鸣器
1、按键检测的话可以连接到任意的GPIO上面,只要初始化配置为输入,程序中采集该GPIO的电平状态来判断按键的状态即可。另外也可以使用GPIO的外部中断功能来判断按键状态。蜂鸣器把GPIO配置为输出就能控制了。2、led是灯,蜂鸣器
这是stm32开发板的一部分原理图,请问其中的LED和蜂鸣器都接在PD4...
Stm32共有11个定时器: 1.两个高级定时器:TIM1、TIM8-------------------------APB2 2.四个通用定时器:TIM2~TIM5-------------------------APB1 3.两个基本定时器:TIM6、TIM7-------------------------APB1 4.两个看门狗 5.一个系统嘀嗒定时器(SysTick) 主程序main.c /* *说明: *PA0:KEY1;PA1:KEY2; *PA2:LED1;PA3:LED2; *PA9:USART1_TX;PA10:USART1_RX */ #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) { ////USART2和USART3都在在APB1上而USART1是在APB2上的 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 = 2000;//频率:72MHz 72000000/36000=2000 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 "..\include\stm32f10x.h" #include "..\include\stm32f10x_it.h" #include "..\include\stm32f10x_gpio.h" #include "..\include\stm32f10x_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 /* Includes ------------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/ /* Exported functions ------------------------------------------------------- */ 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 */ /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;
有问题的那个程序 u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10); 只在上面那条指令采集了一次按键数据。 等到执行到 while(!ReadValue);//等待按键被放开 这条指令时 数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令 while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10));//等待按键被放开 另外因为你只读取了一次按键状态,所以下面那么多一堆软件消除抖动的程序白写了。 综上,正确的程序在每个判断的时刻都要重新读取下按键状态。
#include sbit KEY = P3^3; sbit LED = P3^6; void delay20ms(void) { unsigned char a,b; for(b=146;b>0;b--) for(a=67;a>0;a--); } main() { KEY = 1; while(1) { if(KEY==0) { delay20ms(); //消除按键抖动 if(KEY==0) { while(KEY==0); //等待按键放开 LED = ~LED; } } } }