OLED显示秒表

    xiaoxiao2022-07-07  151

    OLED显示秒表 #include “stm32f10x.h” #include “sys.h” #include “delay.h” #include “relay.h” #include “oled0561.h” #include “led.h” #include “key.h”

    #include “tim.h”

    extern u16 cnt; u16 s=0; u16 m=0; u16 n=0; u16 z=0; int main (void){ delay_ms(500); RCC_Configuration(); RELAY_Init(); LED_Init(); KEY_Init();

    I2C_Configuration(); OLED0561_Init(); OLED_DISPLAY_8x16_BUFFER(0," TIM TEST "); TIM3_Init(99,7199); while(1){

    s=cnt; if(s>=10) { m++;cnt=0;s=0; if (m>=10){ n++;m=0; } if (n>=60){ n=0; z++; }

    } OLED_DISPLAY_8x16(6,48,z+0x30);   OLED_DISPLAY_8x16(6,58,’:’); OLED_DISPLAY_8x16(6,68,n/10+0x30);// OLED_DISPLAY_8x16(6,78,n+0x30);//  OLED_DISPLAY_8x16(6,88,’:’);  OLED_DISPLAY_8x16(6,98,m+0x30); OLED_DISPLAY_8x16(6,10*8,s+0x30);//

    }

    } 以上是主函数,前面的函数初始化直接调用就行,为杜洋产品F1系列的已编写好的函数,在这不再赘述。主要是函数for,以及OLED的显示,也很简单。 下面附上定时器的中断函数 #include “led.h” #include “tim.h” u16 cnt=0; void TIM3_Init(u16 arr,u16 psc){ TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM3_NVIC_Init (); TIM_TimeBaseInitStrue.TIM_Period=arr; //ÉèÖÃ×Ô¶¯ÖØ×°ÔØÖµ TIM_TimeBaseInitStrue.TIM_Prescaler=psc; //Ô¤·ÖƵϵÊý TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //¼ÆÊýÆ÷ÏòÉÏÒç³ö TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //ʱÖӵķ֯µÒò×Ó£¬Æðµ½ÁËÒ»µãµãµÄÑÓʱ×÷Óã¬Ò»°ãÉèΪTIM_CKD_DIV1 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); //TIM3³õʼ»¯ÉèÖà TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);//ʹÄÜTIM3ÖÐ¶Ï TIM_Cmd(TIM3,ENABLE); //ʹÄÜTIM3

    }

    void TIM3_NVIC_Init (void){ NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel= TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void TIM3_IRQHandler(void){ if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){ TIM_ClearITPendingBit(TIM3, TIM_IT_Update); cnt=cnt+1;

    }

    } 注释有点乱码不好意思,就不一个个删了,主要就是定时器中断中的cnt。 我这个秒表是精确到0.01s的,因此对定时器的初始化中TIM3_Init(99,7199); 关于这个的计算是(重装载值+1)*(预分频系数+1)/时钟频率,因为时钟频率是72MHz,所以就是100*7200等于720000,然后除以72000000等于0.01s。主要就是这样。第一次写,不好之处清多多包涵,谢谢。

    最新回复(0)