51hei.png (135.41 KB, 下載次數: 32)
下載附件
2020-3-4 12:34 上傳
附加代碼:
#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;
}
|