软件:KEIL5
选用的是定时器3
main.c
#include "stm32f10x.h"
#include "led.h"
#include "time3.h"
#include "delay.h"
extern unsigned short beep_count;
int main()
{
LED_Init ();
TIME3_Init();
while(1)
{
led(1,beep_count);
}
}
time3.c
#include "time3.h"
#include "led.h"
void TIME3_Init(void){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructrue;
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3 ,ENABLE);
TIM_TimeBaseStructure .TIM_Period = 1000;
TIM_TimeBaseStructure .TIM_Prescaler = 43199;
TIM_TimeBaseInit (TIM3 ,&TIM_TimeBaseStructure );
TIM_ITConfig (TIM3 ,TIM_IT_Update,ENABLE );
NVIC_InitStructrue .NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructrue .NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructrue .NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructrue .NVIC_IRQChannelCmd = ENABLE ;
NVIC_Init(&NVIC_InitStructrue );
TIM_Cmd (TIM3 ,ENABLE );
}
unsigned short int GPIO_Value=0x0000;
unsigned short beep_count=0;
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update) !=RESET)
{
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
beep_count++;
if(beep_count>=10)
beep_count=0;
}
}
tmie3.h
#ifndef _TIME3_H
#define _TIME3_H
#include "stm32f10x.h"
void TIME3_Init(void);
#endif
delay.c
#include "delay.h"
void delay(unsigned int count)
{
unsigned int i;
for(;count!=0;count--)
{
i=5000;
while(i--);
}
}
delay.h
#ifndef _delay_H
#define _delay_H
#include "stm32f10x.h"
void delay_init(void);
void delay_ms(u16 nms);
void delay_us(u32 nus);
#endif
led.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
void LED_Init (void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE );
GPIO_InitStructure .GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure .GPIO_Mode = GPIO_Mode_Out_PP ;
GPIO_InitStructure .GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_Init (GPIOB,&GPIO_InitStructure );
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOB,GPIO_Pin_6);
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
GPIO_ResetBits(GPIOB,GPIO_Pin_9);
GPIO_ResetBits(GPIOB,GPIO_Pin_10);
GPIO_ResetBits(GPIOB,GPIO_Pin_11);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
GPIO_SetBits(GPIOB,GPIO_Pin_13);
GPIO_SetBits(GPIOB,GPIO_Pin_14);
GPIO_SetBits(GPIOB,GPIO_Pin_15);
}
unsigned char led0_9[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void led(unsigned char wei,unsigned char duan)
{
GPIO_Write(GPIOB,led0_9[duan]<<5);
//GPIO_Write(GPIOB,0x3f<<5);
switch(wei)
{
case 1:
LSA_H;LSB_H;LSC_H; break;
case 2:
LSA_L;LSB_H;LSC_H; break;
case 3:
LSA_H;LSB_L;LSC_H; break;
case 4:
LSA_L;LSB_L;LSC_H; break;
case 5:
LSA_H;LSB_H;LSC_L; break;
case 6:
LSA_L;LSB_H;LSC_L; break;
case 7:
LSA_H;LSB_L;LSC_L; break;
case 8:
LSA_L;LSB_L;LSC_L; break;
}
delay(1);
GPIO_Write(GPIOB,0x0000); //ÏûÓ°
}
led.h
#ifndef _LED_H
#define _LED_H
#include "stm32f10x.h"
void LED_Init(void);
void led(unsigned char wei,unsigned char duan);
#define LSA_H GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define LSB_H GPIO_SetBits(GPIOB,GPIO_Pin_14)
#define LSC_H GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define LSA_L GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define LSB_L GPIO_ResetBits(GPIOB,GPIO_Pin_14)
#define LSC_L GPIO_ResetBits(GPIOB,GPIO_Pin_15)
#endif