• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于STM32F103C8T6的OLED万年历设计(二)

17分钟前
100
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

STM32单片机实物设计合集资料获取.pdf

共1个文件

资料清单:源程序+PDF原理图+PCB图+实物演示视频+软件安装包

PDF原理图&PCB图:Altium Designer

芯片型号:STM32F103C8T6

程序编译:Keil5 MDK

编程语言:C语言

设计编号:【STM003】

1、简介

本文提出了一种基于STM32单片机的OLED万年历设计。该设计在硬件方面主要采用STM32F103C8T6作为主控核心,结合DS3231时钟模块、DS18B20温度传感器、蜂鸣器,OLED液晶显示屏显示,同时电子万年历还具有时间校准、闹钟提醒等功能。

2、主要功能

a.通过OLED显示年月日、时分秒、温度、星期、闹钟等信息。

b.通过独立按键设置年月日、时分秒、闹钟。

c.通过DS3231时钟芯片提供系统时钟。

d.通过DS18B20芯片提供实时温度。

e.通过蜂鸣器提示闹钟状态。

3、源程序

int main()
 {
		  SystemInit();
	delay_init(72);	     //延时初始化
	NVIC_Configuration();
	uart_init(9600);   //串口初始化
	//Timerx_Init(5000,7199);//10Khz的计数频率,计数到5000为500ms 
	  Timerx_Init(99,719);//10Khz的计数频率,计数到50为1ms
	  OLED_Init();
	Init_DS1302(); 
	LED_Init();
   DS18B20_Init();
	
	 KEY_Init();
	delay_ms(50);
	 
		RefreshTime();	//刷新时间
	RefreshDate(1);	//立即刷新日期
	RefreshTemp(1); //立即刷新温度显示
	RefreshLunarn();

	 while(1) 
	 {   	 
			KeyScan();//按键扫描
	    KeyDriver();	//按键检测
		if(flag200ms)	//200ms时间到
		{
			flag200ms = 0;	//清零标志位
			AlarmMonitor(); //监控闹钟
			if (staSystem == E_NORMAL)//如果系统正常运行
			{
				RefreshTime(); //刷新时间
				RefreshDate(0);//刷新日期
		   	RefreshLunarn();//刷新主界面农历
			}
			if (staSystem == Dis_Alarm)
			{
				RefreshLunar(); //刷新阴历
			}
		}	
		if(flag1s && (staSystem == E_NORMAL))//1s时间到并且系统为正常运行
		{
			flag1s = 0;//清零标志位
		RefreshTemp(0);//刷新温度	
		}
	} 
}
void RefreshTemp(uint8_t ops)
{
    short temp; 
    static int16_t backup = 0;   
   temp=DS18B20_Get_Temp(); //获取当前温度值
    if ((backup!=temp) || (ops!=0)) //按需要刷新液晶显示
    {
     		if(temp/10 > 0)
			OLED_P8x16Str(80,6,temp/100);  //显示温度十位
		else
			OLED_P8x16Str(80,6,12);  	   //否则温度十位为0不显示
		OLED_P8x16Str(88,6,temp % 100/10);  //显示温度个位
		OLED_P8x16Str(96,6,14);		   //显示小数点
		OLED_P8x16Str(104,6,temp % 10); //显示温度小数第1位
		OLED_ShowCHinese(112,6,14);		   //显示℃符号
		OLED_ShowCHinese(96, 0, 43); 	//显示星期
    OLED_ShowCHinese(64,6,21);		   //显示温度图标  大
	 //RefreshLunarn();//刷新主界面农历
		temp= 0;
		backup = temp;             //刷新上次温度值
    }
}

void TIM3_IRQHandler(void)   //TIM3中断
{
		static uint8_t tmr1s = 0;
    static uint8_t tmr200ms = 0;
	
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
		{
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
	tmr200ms++;  //定时200ms
    if (tmr200ms >= 1)
    {
        tmr200ms = 0;
        flag200ms = 1;
        tmr1s++;  //定时1s
        if (tmr1s >= 5)
        {
            tmr1s = 0;
            flag1s = 1;
        }
    }		
		}
}

4、PDF原理图和PCB图

该原理图和PCB是通过Altium Designer软件设计的,仅提供PDF原理图和PCB顶层/底层图片!!!

PDF原理图:

PCB顶层和底层图:

5、实物效果图

6、资料清单

7、资料获取链接

百度网盘下载链接:https://docs.qq.com/doc/DRXdKb1hOTGRMZVdR

更多单片机实物设计合集:https://docs.qq.com/sheet/DRURGZmFVZ1BoQ2ZU

  • STM32单片机实物设计合集资料获取.pdf
    下载

相关推荐