ain.c:
/************file:main.c****************/
#include "stm32f10x.h"
#include "Nixietube.h"
#include "initial.h"
#include "LED.h"
//#include "stm32f10x_it.h"
u8 LED_NUM = 0x08;
u16 TIMES = 0;
u8 data_bit = 4;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TIM2_TIM3_Init();
LED_Init();
NixieTube_Init();
GPIOD->ODR = LED_NUM;
TIM_Cmd(TIM2, ENABLE);
TIM_Cmd(TIM3, ENABLE);
while(1);
}
initial.c:
/****************file:initial.c************/
#include "initial.h"
//Init TIM2&TIM3&NVIC
void TIM2_TIM3_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3, ENABLE); //時鐘使能
//定時器TIM2初始化 周期1s
TIM_TimeBaseStructure.TIM_Period = 9999;
TIM_TimeBaseStructure.TIM_Prescaler =7199;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據指定的參數初始化TIMx的時間基數單位
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //使能指定的TIM2中斷,允許更新中斷
//定時器TIM3初始化 周期1ms
TIM_TimeBaseStructure.TIM_Period = 9;
TIM_TimeBaseStructure.TIM_Prescaler =7199;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //設置時鐘分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據指定的參數初始化TIMx的時間基數單位
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM2中斷,允許更新中斷
//中斷優先級NVIC設置 TIM2先占優先級設置為0級,TIM3設置為1級
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM2中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占優先級0級
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //從優先級3級
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占優先級1級
NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
TIM_Cmd(TIM2, DISABLE); //使能TIMx
TIM_Cmd(TIM3, DISABLE);
}
// Init LED
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);
//LED1——LED4 對應的引腳為PD3——PD6
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_ResetBits(GPIOD, GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
}
//Init Nixie Tubes
void NixieTube_Init(void)
{
GPIO_InitTypeDef Nixietube_GPIO;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //使能PG,PC端口時鐘
Nixietube_GPIO.GPIO_Pin = 0x3fff; //PE0 - PE15
Nixietube_GPIO.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
Nixietube_GPIO.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOE, &Nixietube_GPIO); //根據設定參數初始化
}
NixieTube.c:
/************file:NixieTube.c****************/
#include "NixieTube.h"
//--- 數碼管段碼編碼 ----------------------
u8 Nixie_x[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9