標(biāo)題: STIM32F10x單片機(jī)按鍵button控制流水燈代碼 [打印本頁]

作者: shine513731    時(shí)間: 2022-6-25 10:46
標(biāo)題: STIM32F10x單片機(jī)按鍵button控制流水燈代碼
通過TIM2定時(shí)器中斷控制LED流水燈的閃爍時(shí)間,并且增加兩個(gè)按鍵PA1、PA2,其中PA1控制LED流水燈的啟動(dòng),8個(gè)燈先依次閃爍,時(shí)間間隔1s,然后8個(gè)燈同時(shí)閃爍且時(shí)間間隔1s,PA2控制停止,使定時(shí)器不工作,將燈保持現(xiàn)在狀態(tài),過程非常簡單,只需幾分鐘搞懂。
電路原理圖如下:

單片機(jī)源程序如下:
  1. #include "stm32f10x.h"

  2. GPIO_InitTypeDef   GPIO_InitStructure;
  3. EXTI_InitTypeDef   EXTI_InitStructure;
  4. NVIC_InitTypeDef   NVIC_InitStructure;
  5. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  6. void TIM2_Config(void);//定時(shí)器TIM2配置函數(shù)
  7. void EXTI1_EXTI2_Config(void);//按鍵PA1、PA2中斷配置函數(shù)

  8. int main(void)
  9. {       
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_2|        GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  14.         GPIO_Init(GPIOC, &GPIO_InitStructure);

  15.         TIM2_Config();
  16.         EXTI1_EXTI2_Config();
  17.         GPIOC->ODR=0x00ff;
  18.         while (1)
  19.         {
  20.         }
  21. }
  22. void TIM2_Config(void)
  23. {
  24.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//proteus中的bug,用其他定時(shí)器,必須先使能TIM1。
  25.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  26.        
  27.         TIM_TimeBaseStructure.TIM_Period = 1000;//基準(zhǔn)為0.1ms,所以設(shè)置10000,剛好0.1ms乘以10000為1s。
  28.         TIM_TimeBaseStructure.TIM_Prescaler = 799;//我們設(shè)置的proteus中系統(tǒng)時(shí)鐘為8M,所以這里設(shè)置799,我們時(shí)間間隔為1s。
  29.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  30.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  31.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  32.         // TIM_Cmd(TIM2, ENABLE);不是使能TIM2,因?yàn)橛弥袛,所以在PA1、PA2中斷函數(shù)中分別使能和不使能。
  33.        
  34.         TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//定時(shí)器中斷使能。
  35.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  36.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  37.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  38.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  39.         NVIC_Init(&NVIC_InitStructure);
  40. }
  41. void EXTI1_EXTI2_Config(void)
  42. {       
  43.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  44.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
  45.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  46.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  47.        
  48.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  49.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
  50.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource2);
  51.        
  52.         EXTI_InitStructure.EXTI_Line = EXTI_Line1|EXTI_Line2;
  53.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  54.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
  55.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  56.         EXTI_Init(&EXTI_InitStructure);
  57.        
  58.         NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
  59.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  60.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  61.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  62.         NVIC_Init(&NVIC_InitStructure);       
  63.        
  64.         NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;
  65.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  66.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  67.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  68.         NVIC_Init(&NVIC_InitStructure);
  69. }
復(fù)制代碼

所有資料51hei附件下載:
Keil代碼工程.7z (3.64 MB, 下載次數(shù): 20)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1