标题:
stm32单片机流水灯代码 外部中断切换三流水灯种模式,八个led
[打印本页]
作者:
7i7i
时间:
2023-2-9 16:25
标题:
stm32单片机流水灯代码 外部中断切换三流水灯种模式,八个led
外部中断切换三流水灯种模式,八个led,stm32程序设计
#include "stm32f10x.h"
#include "LED.h"
#include "sys.h"
char flag=1;//按键累计按下次数,当>3又返回1
void LED_Config(void);
void KEY_Init(void);
void RCC_Config(void);
void delay_ms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=5000;j>0;j--);
}
void led_mode1()
{
LED7=LED6=LED5=LED4=LED3=LED2=LED1=1;
LED0=0;//亮第一个
delay_ms(200);
LED0=1;
LED1=0;
delay_ms(200);
LED1=1;
LED2=0;
delay_ms(200);
LED2=1;
LED3=0;
delay_ms(200);
LED3=1;
LED4=0;
delay_ms(200);
LED4=1;
LED5=0;
delay_ms(200);
LED5=1;
LED6=0;
delay_ms(200);
LED6=1;
LED7=0;
delay_ms(200);
}
void led_mode2()
{
LED7=LED6=LED5=LED2=LED1=LED0=1;
LED3=LED4=0;//中间两个
delay_ms(200);
LED3=LED4=1;
LED2=LED5=0;
delay_ms(200);
LED2=LED5=1;
LED1=LED6=0;
delay_ms(200);
LED1=LED6=1;
LED0=LED7=0;
delay_ms(200);
}
void led_mode3()
{
LED6=LED5=LED3=LED4=LED2=LED1=1;
LED0=LED7=0;//旁边两个
delay_ms(200);
LED0=LED7=1;
LED1=LED6=0;
delay_ms(200);
LED1=LED6=1;
LED2=LED5=0;
delay_ms(200);
LED2=LED5=1;
LED3=LED4=0;
delay_ms(200);
}
int main()
{
RCC_Config();
KEY_Init();
LED_Init();
while(1)
{
switch(flag)
{
case 1:led_mode1();break;
case 2:led_mode2();break;
case 3:led_mode3();break;
}
}
}
void RCC_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //PA
}
void KEY_Init(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/*config for NVIC中断优先级*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//通道:外部中断线2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* key for exti */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//下拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource8);//
/*EXIT line(PC2)工作模式配置 */
EXTI_InitStructure.EXTI_Line = EXTI_Line8;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;//上降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
void EXTI9_5_IRQHandler()
{
if (EXTI_GetITStatus(EXTI_Line8) != RESET)
{
if(flag<3)flag++;
else flag=1;
EXTI_ClearITPendingBit(EXTI_Line8); //清除 EXTI8 的行挂起位。
}
}
复制代码
Keil代码下载:
按键中断.7z
(180.66 KB, 下载次数: 24)
2023-2-9 23:57 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1