用移位操作,首先把P1口赋值,然后向右移位,判断是否移到最后移位,如果不是,一直移位,如果是,则反向移位,判断是否移位到第一位,如果是则循环到右移,具体代码就自己写了。代码不难,我只是记不清楚具体定义了。

4、定义LED类 在本文默认大家掌握了用C语言开发STM32流水灯的知识,直接描述C++代码内容。本文讲述一个很基础的例子"LED灯",比如创建一个main.cpp源代码文件。首先,定义一个LED类:class LED_Class{ 然后定义私有成员(当

LJMP MAIN MAIN:ORG 0100H MOV A ,#80H ; 高电平亮灯。如低电平亮灯,改成#7FH ;;正向循环 ZXH :MOV P0 , A RR A LCALL S50MS ; 延时50MS JB P1.0 , FXH LJMP

定时器中点亮程序:if(aaa<10){把1号灯点亮};else if(aaa<20){把2号灯点亮};else if(aaa<30){把3号灯点亮};else if(aaa<40){把4号灯点亮};else if(aaa<50){把5号灯点亮};else if(aaa<60){

假设P1接8个LED,高电平时LED点亮,主程序如下:voidmain(void){uchari;while(1){for(i=0;i<7;i++){P1=1<>i;delay_ms(500);}}}

stm32控制8个流水灯倒序亮灯

首先要知道你控制led灯的芯片是,然后要知道你的led灯是接在哪些io口上的,这样你就可以,还要查看电路图,是低电位有效还是高电位有效,知道这些,你就可以对某一个io口进行置零或置1,进行对led灯进行控制

delay(30000);//延时以便能观察到灯亮移动,自己可以调整时间,由晶振和实参决定 tmp = _crol_(tmp,2);p1 = tmp;if(tmp == 0x7f)//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环 { break;} }

1){ if( key==0)//按键按下 { cnt++; if( cnt>300) { cnt=0;//到3秒,退出本循环进入下一段程序 break;} dely(10);//延时10毫秒}} while(1){ //此为

主程序中delay太长了

While(1){ if(key==0){delayms(20);if(key==0)flag++;}//按键检测 if(flag==3)flag=0;if(flag==0){正向流水} else if(flag==1){反向流水} else {间隔流水} }存在问题,由于流水灯执行时间较长,因此对

p1.2=0;//进入按键操作 while(1){ if(p2.2==0){ i++;if(i==1){ p1.0=0;p1.1=1;p1.2=0;delay();//延时,由于不知道你用的单片机型号,这个需要你自己设定了。} if(i==2){ p1.2=1;p1.0

DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 RET END

利用一个按键控制流水灯三种形态的程序,求大神帮忙找错修改

假设P1接8个LED,高电平时LED点亮,主程序如下:voidmain(void){uchari;while(1){for(i=0;i<7;i++){P1=1<>i;delay_ms(500);}}}

等到执行到 while(!ReadValue);//等待按键被放开 这条指令时 数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新

include "sys.h"#include "usart.h"#include "delay.h"#include "led.h" #include "key.h" //°´¼ü´¦Àíº¯Êý//·µ»Ø°´&

先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;

如何编写STM32控制LED反转C程序

定时器中熄灭程序:if(aaa>73){把7号灯熄灭};else if(aaa>63){把6号灯熄灭};else if(aaa>53){把5号灯熄灭};else if(aaa>43){把4号灯熄灭};else if(aaa>33){把3号灯熄灭};else if(aaa>23){

w<<=1; //点亮灯的位置移动,最低位补0 w=w|0x01; //将最低位置1 delay(500); //延时 } } } 或:include "reg51.h"//程序中使用_crol_函数,所以要包含头文件"intrins.h"include "intrins.h"v

include define uchar unsigned char uchar led[]={0xfe,0xfa,0xea,0xaa,0xfd,0xf5,0xd5,0x55};void delay(unsigned char a){ while(a--);} main(){ uchar i;while(1){ for(i=0;i<8;i++)

//判断是否已经点亮到第8灯。是,则退出进入1、3、5、7循环 { break;} }

在工程中添加C++源代码(比如:main.cpp)使用V5和V6,工程配置的选项有些差异:4、定义LED类 在本文默认大家掌握了用C语言开发STM32流水灯的知识,直接描述C++代码内容。本文讲述一个很基础的例子"LED灯",比如创建一个mai

基于Keil、STM32,用C++编写流水灯程序

4、定义LED类 在本文默认大家掌握了用C语言开发STM32流水灯的知识,直接描述C++代码内容。本文讲述一个很基础的例子"LED灯",比如创建一个main.cpp源代码文件。首先,定义一个LED类:class LED_Class{ 然后定义私有成员(

把PC5-PC8都设置为输入,把PB0,1,14,15设置为输出。在程序while中检测pc5-8的输入管脚电平,来使能输出PB管脚的高低电平来点亮LED。逻辑很简单,希望你成功。

要通过单片机来控制LED灯的亮灭,您可以按照以下步骤进行操作:1.准备材料:您需要准备以下材料:单片机(如Arduino、STM32等)LED灯 电阻(用于限流,防止LED过电流损坏)连接线 2.连接电路:将LED灯与单片机连接起来。一般

1、首先确认按键是否正常工作,可以尝试轻轻敲打按键。2、然后确认跑马灯连接方式是否正确,如LED灯应接在GPIO输出端口上。3、其次确认代码是否有误,如按键扫描程序是否有误。4、最后确认STM32型号和开发板型号,如是否为相同

先定义对应LED 的控制端口#define LED PAout(0)然后LED=~LED;

我不知道为什么中文复制之后这里变乱码了,所以截图作为参照,代码附在后面:include "sys.h"#include "usart.h"#include "delay.h"#include "led.h" #include "key.h" //°´¼ü´¦À

等到执行到 while(!ReadValue);//等待按键被放开 这条指令时 数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新

请教一个stm32程序:我写了一个按键控制LED灯翻转,调试成功的程序如下:

可以用一个按键改变流水灯的流动方向,用一个位变量做方向标志位,流水灯在每次输出时,根据标志位的状态决定流动方向。而每一次按键,对标志位取反一次,也就改变一次流水灯的方向。仿真图如下,P1口接8个LED灯为流水灯。

现在一般不用2051了,呵呵,不过仿真也没事。这程序可以这样写:设一个变量作为按键的键值,按下为1,再次按下为0;首先写一个流水灯的子程序,然后再主函数里去识别之前设置的键值,=1--->去执行流水灯;=0--->直接

主要应用到的外设有定时器,GPIO就能够实现流水灯的效果。用定时器做1s的定时中断,在中断程序中进行GPIO 输出高低电平的切换就可以了。

通常的代码如下 uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin){ /*检测是否有按键按下 */ if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin)==KEY_ON){ /*等待按键释放 */ while(GPIO_ReadInputDataBit(

简单点的,用表格,事先计算好,放到ROM中,用的时候逐行编译输出就可以。 复杂点的,开一个缓冲区,用循环程序,根据花样的不同,每次填充一行,并输出,然后再计算一下行。除非表格太大,不建议这样用。当单片机接收到按

首先要看下《STM32F10xxx参考手册CD00171190.pdf》里关于IO端口的介绍,第8章 通用和复用功能I/O(GPIO和AFIO)百为STM3210E-EVAL开发板上的CPU是STM32F103ZET6,有GPIOA~GPIOG七组IO,每组IO有16个引脚GPIO_Pin_0~

讲思路,就是我们的程序是会反复进行whlie里面的循环的,然后我们就可以进行延时,逐一点亮LED实现流水灯的效果,这在我之前文章中介绍过,然后我们现在是想每次按键它的方向改变,我们可以定义一个参数,然后按一次按键,这个参

stm32开发板怎么用按键控制流水灯

主要应用到的外设有定时器,GPIO就能够实现流水灯的效果。用定时器做1s的定时中断,在中断程序中进行GPIO 输出高低电平的切换就可以了。
主要应用到的外设有定时器,GPIO就能够实现流水灯的效果。用定时器做1s的定时中断,在中断程序中进行GPIO 输出高低电平的切换就可以了。
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;
int onoff = 1; //点亮 int count = 5000; while(true) { LED = onoff; //先点亮 count = 5000; while(count) ; //空跑CPU,为了占用时间,留出反转时间 onoff = !onoff; //LED反转 }
有问题的那个程序 u8 ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10); 只在上面那条指令采集了一次按键数据。 等到执行到 while(!ReadValue);//等待按键被放开 这条指令时 数据仍然是上次采集到的那个值代表按键按下,(!ReadValue)这个值永远成立,所以无法代表按键断开。所以程序一直卡死在这条指令上。如果要通过就必须在判据里重新读取按键状态,像正确的程序那样用这样的指令 while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10));//等待按键被放开 另外因为你只读取了一次按键状态,所以下面那么多一堆软件消除抖动的程序白写了。 综上,正确的程序在每个判断的时刻都要重新读取下按键状态。
#include#include#define uchar unsigned charsbit key=P1^0;uchar led,time;void t0isr() interrupt 1{TH0=(65536-60000)/256;TL0=(65536-60000)%256;switch(time) { case 0:P0=led;led=_crol_(led,1);break; case 1:P0=led;led=_cror_(led,1);brea; case 2:P0=led;led=~led;break; }}main(){TMOD=0x01;TH0=(65536-60000)/256;TL0=(65536-60000)%256;TR0=1;ET0=1;EA=1;led=0xfe;while(1) { if(key==0) { while(key==0); time++; time%=3; if(time==0)led=0xfe; else if(time==1)led=0x7f; else led=0x55; } }}
#include typedef unsigned char uint8; typedef unsigned int uint16; sbit anjian = P1^0; //按键位 void delay(uint16 h) //延时程序 { while(h--); } main() { uint8 k = 0 , i = 0; P0 = 0xff; anjian = 1; while(1) { P0 = ~(1<<k++); if(anjian == 0) { delay(200); if(anjina == 0) i++; if(i == 3) i = 0; } switch(i) { case 0: delay(10000);break; case 1: delay(20000);break; case 2: delay(20000); break; } if(k==8) k=0; } } //头一次回答问题,多多支持,全部知识都是自学的,但是我试验过可以符合你的要求运行,谢谢