找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1108|回复: 0
打印 上一主题 下一主题
收起左侧

STIM32F10x单片机按键button控制流水灯代码

[复制链接]
跳转到指定楼层
楼主
通过TIM2定时器中断控制LED流水灯的闪烁时间,并且增加两个按键PA1、PA2,其中PA1控制LED流水灯的启动,8个灯先依次闪烁,时间间隔1s,然后8个灯同时闪烁且时间间隔1s,PA2控制停止,使定时器不工作,将灯保持现在状态,过程非常简单,只需几分钟搞懂。
电路原理图如下:

单片机源程序如下:
  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);//定时器TIM2配置函数
  7. void EXTI1_EXTI2_Config(void);//按键PA1、PA2中断配置函数

  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,用其他定时器,必须先使能TIM1。
  25.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  26.        
  27.         TIM_TimeBaseStructure.TIM_Period = 1000;//基准为0.1ms,所以设置10000,刚好0.1ms乘以10000为1s。
  28.         TIM_TimeBaseStructure.TIM_Prescaler = 799;//我们设置的proteus中系统时钟为8M,所以这里设置799,我们时间间隔为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,因为用中断,所以在PA1、PA2中断函数中分别使能和不使能。
  33.        
  34.         TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);//定时器中断使能。
  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. }
复制代码

所有资料51hei附件下载:
Keil代码工程.7z (3.64 MB, 下载次数: 20)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表