在单片机解密|NV32F100的内部也配有RTC功能,但它不同与常规的RTC 它在例程中并没有通过RTC初试值的设置与读取方法,为了实现RTC的计时功能,我们可以模拟其计时的进制关系来实现。此外,通过一个I2C接口的双色OLED屏可以将计时器显示出来,其效果如图所示。[size=13.3333px]
单片机解密|OLED屏与NV32F100的连接关系为: VCC -- 5V/3.3V GND -- GND SCL -- PE1 SDA -- PE0
相应引脚输出高低电平的语句定义为: #define OLED_SCLK_Clr() GPIO_PinClear(GPIO_PTE1); #define OLED_SCLK_Set() GPIO_PinSet(GPIO_PTE1);
#define OLED_SDIN_Clr() GPIO_PinClear(GPIO_PTE0); #defineOLED_SDIN_Set() GPIO_PinSet(GPIO_PTE0); 实现RTC时钟的程序代码如下:
- #include "common.h"
- #include "ics.h"
- #include "rtc.h"
- #include "uart.h"
- #include "gpio.h"
- #include "sysinit.h"
- #include "start.h"
- #include "oledfont.h"
- #include "oled.h"
- void cd11()
- {
- OLED_Clear();
- OLED_ShowString(24,0,"RTC CLOCK",16);
- OLED_ShowString(24,4,"jinglixixi",16);
- }
- void RTC_Task(void);
- int main (void)
- {
- sysinit();
- cpu_identify();
- RTC_ConfigType sRTCConfig;
- RTC_ConfigType *pRTCConfig = &sRTCConfig;
- pRTCConfig->u16ModuloValue = 9;
- pRTCConfig->bInterruptEn = RTC_INTERRUPT_ENABLE;
- pRTCConfig->bClockSource = RTC_CLKSRC_1KHZ;
- pRTCConfig->bClockPresaler = RTC_CLK_PRESCALER_100;
-
- RTC_SetCallback(RTC_Task);
- RTC_Init(pRTCConfig);
- GPIO_Init(GPIOB, GPIO_PTE7_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTE7_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTE0_MASK, GPIO_PinOutput);
- GPIO_Init(GPIOB, GPIO_PTE1_MASK, GPIO_PinOutput);
- OLED_Init();
- OLED_Clear();
- cd11();
- OLED_ShowString(24,6,"2018.6.30",16);
-
- while (1)
- {
- OLED_ShowNum(24,2,hh,2,16);
- OLED_ShowChar(40,2,':',16);
- OLED_ShowNum(48,2,mm,2,16);
- OLED_ShowChar(64,2,':',16);
- OLED_ShowNum(72,2,ss,2,16);
- if(ss==60)
- {
- ss=0;
- mm=mm+1;
- }
- if(mm==60)
- {
- mm=0;
- hh=hh+1;
- }
- if(hh==24)
- {
- hh=0;
- }
- }
- }
|