附加代码:
#include "stm32f10x.h"
#include "stm32f10x_tim.h"
#include "misc.h"
#include "eight_segment_display.h"
unsigned char tab[3]={0,0,0};
unsigned char tab1[8]={6,4,1,7,3,6,0,8};
unsigned char tab2[8]={6,4,1,7,3,6,0,4};
u16 overcount=0;
unsigned char flag;
//设置中断优先级
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructer;
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructer.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructer.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructer.NVIC_IRQChannel =TIM1_UP_IRQn;
NVIC_InitStructer.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructer);
}
void StartModule(void)
{
int delay=0xFf;
GPIO_ResetBits(GPIOA,GPIO_Pin_0); //开启发送脚
while(delay--);
GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
unsigned int Conut(void)
{
float length=0;
u16 tim;
tim = TIM_GetCounter(TIM1);
length=(tim+overcount*1000)/58.0;
TIM1->CNT=0;
overcount = 0; //中断溢出次数清零
return (unsigned int)length;
}
/*
@brief 初始化八段数码管,并在8个数码管上显示数值0~7
@param None
@retval 返回0表示正常结束
*/
int main(void){
unsigned char i;
int tmp;
int delay1=0xfFf;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructer;
NVIC_Config();
seg_display_init(); //初始化数码管
i=0;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
//定时器TIM2初始化
TIM_DeInit(TIM1);
TIM_TimeBaseInitStructer.TIM_Period = 10000-1; //定时周期为1000
TIM_TimeBaseInitStructer.TIM_Prescaler = 8-1; //分频系数8
TIM_TimeBaseInitStructer.TIM_ClockDivision = TIM_CKD_DIV1; //不分频
TIM_TimeBaseInitStructer.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructer);
//开启更新中断
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
//中断参数设置
NVIC_Config();
//关闭定时器使能
TIM_Cmd(TIM1,DISABLE);
int delay=0xFFf;
while(delay--);
while(1){
StartModule();
while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));
TIM_Cmd(TIM1,ENABLE);
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9));
TIM_Cmd(TIM1,DISABLE);
tmp=Conut();
tab[0]=tmp/100;
tab[1]=(tmp%100)/10;
tab[2]=tmp%10;
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12))
{
i=0;
delay=0x4f;
while(delay--)
{
set_com_digit(i,tab[i++]);
if(i==3){
i=0;
}
delay1=0x4Ff;
while(delay1--);
close_coms(); //关闭所有的com口
};
}
else
{
i=0;
delay=0x4f;
while(delay--)
{
set_com_digit(i,tab2[i++]);
if(i==8){
i=0;
}
delay1=0x4Ff;
while(delay1--);
close_coms(); //关闭所有的com口
};
}
}
//return 0;
}
|