STM32制作万年历

这篇具有很好参考价值的文章主要介绍了STM32制作万年历。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    STM32万年历制作指南

一、概述

STM32是一种常用的微控制器,具有强大的处理能力和低功耗特性,非常适合用于制作各种电子设备。本文将介绍如何使用STM32制作一款简易的万年历,帮助您轻松查看日期、时间和农历等信息。

二、所需材料

1. STM32微控制器(建议使用STM32F103C8型号)
2. 液晶显示屏(LCD或OLED)
3. 按键或触摸屏
4. 农历数据(可通过网络下载或购买已编译好的数据文件)
5. 杜邦线、螺丝刀等必备工具

三、制作步骤

1. 连接硬件:将STM32微控制器与液晶显示屏通过杜邦线连接,按键或触摸屏接入STM32的GPIO口。
2. 编写程序:编写STM32程序,实现读取农历数据、显示日期、时间、星期几和节气等信息。程序应包括中断服务程序,用于处理按键或触摸屏输入。

1)代码

int main()
{			
	  delay_init();	    	 //延时函数初始化	  
	  NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 
	  LED_Init();			     //LED端口初始化
	  OLED_Init();			//初始化OLED  
	  OLED_Clear()  	; 
	  USART_Config();		
	
	  Key_GPIO_Config();

		/* 配置RTC秒中断优先级 */
	  RTC_NVIC_Config();
	  RTC_CheckAndConfig(&systmtime);
	
	  while (1)
	  {
	    /* 每过1s 更新一次时间*/
	    if (TimeDisplay == 1)
	    {
				/* 当前时间 */
	      Time_Display( RTC_GetCounter(),&systmtime); 		  
	      TimeDisplay = 0;
	    }
			
			//按下按键,通过串口修改时间
			if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON  )
			{
				struct rtc_time set_time;

				/*使用串口接收设置的时间,输入数字时注意末尾要加回车*/
				Time_Regulate_Get(&set_time);
				/*用接收到的时间设置RTC*/
				Time_Adjust(&set_time);
				
				//向备份寄存器写入标志
				BKP_WriteBackupRegister(RTC_BKP_DRX, RTC_BKP_DATA);

			} 			
	  }
}

主函数就这么多,比较简单,就是初始化了一下OLED,配置了一下RTC,这些代码都比较好找到,下面来看看Time_display的具体代码:

/*
 * 函数名:Time_Display
 * 描述  :显示当前时间值
 * 输入  :-TimeVar RTC计数值,单位为 s
 * 输出  :无
 * 调用  :内部调用
 */	
void Time_Display(uint32_t TimeVar,struct rtc_time *tm)
{
	   static uint32_t FirstDisplay = 1;
	   uint32_t BJ_TimeVar;
	   uint8_t str[200]; // 字符串暂存  	

	   /*  把标准时间转换为北京时间*/
	   BJ_TimeVar =TimeVar + TIME_ZOOM;

	   to_tm(BJ_TimeVar, tm);/*把定时器的值转换为北京时间*/	
	
	  if((!tm->tm_hour && !tm->tm_min && !tm->tm_sec)  || (FirstDisplay))
	  {
	      
	      GetChinaCalendar((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str);	
					printf("\r\n 今天新历:%0.2d%0.2d,%0.2d,%0.2d", str[0], str[1], str[2],  str[3]);
			    OLED_ShowString(1,0,"RTC",16);  
			  	OLED_ShowCHinese(28,0,0);//景
		      OLED_ShowCHinese(46,0,1);//园
	      	OLED_ShowCHinese(64,0,2);//电
		      OLED_ShowCHinese(82,0,3);//子
			    OLED_ShowString(1,2,"Design by ZF",16); 
		    //  OLED_ShowCHinese(88,0,5);//科
		    //  OLED_ShowCHinese(104,0,6);//技
			    
	
	      GetChinaCalendarStr((u16)tm->tm_year,(u8)tm->tm_mon,(u8)tm->tm_mday,str);
					printf("\r\n 今天农历:%s\r\n", str);
	
	     if(GetJieQiStr((u16)tm->tm_year, (u8)tm->tm_mon, (u8)tm->tm_mday, str))
					printf("\r\n 今天农历:%s\r\n", str);
			 
	
	      FirstDisplay = 0;
	  }	 	  	

	  /* 输出时间戳,公历时间 */
	  printf(" UNIX时间戳 = %d 当前时间为: %d年(%s年) %d月 %d日 (星期%s)  %0.2d:%0.2d:%0.2d\r",TimeVar,
	                    tm->tm_year, zodiac_sign[(tm->tm_year-3)%12], tm->tm_mon, tm->tm_mday, 
	                    WEEK_STR[tm->tm_wday], tm->tm_hour, 
	                    tm->tm_min, tm->tm_sec);
		   OLED_ShowNum(0,4,tm->tm_year,4,16); 
	   	 OLED_ShowCHinese(33,4,4);//电
			 OLED_ShowNum(51,4,tm->tm_mon,2,16); 
		   OLED_ShowCHinese(69,4,5);//电
		   OLED_ShowNum(87,4,tm->tm_mday,2,16); 
		   OLED_ShowCHinese(105,4,6);//电
		   OLED_ShowNum(0,6,tm->tm_hour,2,16); 
		   OLED_ShowString(18,6,":",16);
		   OLED_ShowNum(37,6,tm->tm_min,2,16); 
		   OLED_ShowString(55,6,":",16);
		   OLED_ShowNum(74,6,tm->tm_sec,2,16); 
}

3. 调试与优化:进行程序调试和优化,确保万年历能够正确显示信息。
4. 连接电源:为STM32和液晶显示屏等硬件连接电源。
5. 包装测试:完成以上步骤后,对万年历进行包装,并进行测试,确保其正常运行。

四、注意事项

1. 在下载农历数据时,请确保数据来源可靠,以免中毒或使用盗版数据。
2. 在连接液晶显示屏时,请务必使用绝缘胶带固定线缆,以防短路。
3. 在调试和优化程序时,请备份原始程序,以防意外丢失数据。

五、功能扩展

1. 添加时间提醒功能:可设置闹钟,在特定日期或节气前提醒用户。
2. 显示更多信息:如公历闰年、农历闰月、节气名称等。
3. 蓝牙或WiFi通信:可通过蓝牙或WiFi从互联网获取最新农历数据,实现实时更新。


 文章来源地址https://www.toymoban.com/news/detail-768972.html

到了这里,关于STM32制作万年历的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Java的万年历(课设)

    资源链接:基于Java的万年历(课设) 摘 要 Java编程语言自诞生十几年来,已经成功地运用在网络计算及移动等各个领域。对于开发者来说,它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。此次我们用JAVA来设计一个万年历程序,该程序以网页形

    2024年02月11日
    浏览(42)
  • C语言课设万年历

    1.该程序可以输出某年的全部月份,也可以输出某月的全天日历。 2.输入年月日输出距今天还有多少天,星期几,是否是公历节日。 注:分代码应以.h的形式分开才保证正常运行。         总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,若是,该年的

    2024年02月11日
    浏览(34)
  • 基于FPGA的电子万年历设计

    quartusii12.1 系统的整个结构框图:  然后,设置控制输入有5个脚,分析功能如下所示: i_Function_Controller=0 ;显示年月日 i_sel:选择需要调整的某位数字。 i_set:计数器,调整需要调整的位置的数字。 具体调整的时候,首先选择i_sel,按键按一下,需要调整的位置会移动一次,

    2024年02月03日
    浏览(84)
  • 万年历【小游戏】(Java课设)

    Java实现的小游戏 适合作为Java课设!!! jdk1.8+Idea或eclipse 本系统源码地址:https://download.csdn.net/download/qq_50954361/87801830 更多Java课设系统源码地址:更多Java课设系统源码地址 更多Java小游戏运行效果展示:更多Java小游戏运行效果展示 Java课设部署教程:Java课设部署教程 注意事

    2024年02月15日
    浏览(46)
  • 单片机万年历实现(报告+源码)

    摘要         近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,消费电子

    2024年02月07日
    浏览(43)
  • PTA6-6 万年历显示函数

    设计一个万年历,当用户输入年份和月份时,显示这个月的日历表。程序重点是这个月的第一天是星期几和这个月有几天,有了这两个值,只需通过排列,就可以显示这个日历。程序要求用户输入的年份是从1900年开始,已知1900年1月1日是星期一。 日历中每个具体的日期占5个

    2024年01月16日
    浏览(40)
  • 基于51单片机的万年历设计

    目  录 前言....................................................................... 1 1 绪论..................................................................... 3 1.1 课题研究的背景..................................................... 3 1.2课题的研究目的与意义................................................ 3 1.3课题解决的主要内

    2024年02月02日
    浏览(46)
  • FPGA项目(12)——基于FPGA的万年历设计

            首先称述一下所实现的功能:可以显示年、月、日、时、分、秒,有闹钟设置功能,闹钟时间到时,蜂鸣器响,报警。用6位数码管进行显示,分三个显示页面,第一个页面显示年月日,第二个界面显示时分秒,第三个页面显示闹钟时间。可以用按键进行翻页,按键进

    2024年02月07日
    浏览(42)
  • FPGA开发(基于Quartus II)万年历,简单代码

       设计一个基于FPGA的电子万年历。设计的主要任务是在Quartus II开发环境中完成电子万年历系统FPGA内部各电路模块的设计,包括各个模块的设计输入、编译、仿真、验证和硬件测试任务。具体要求如下: 能实现2 4 小时、6 0 分、6 0 秒的基本计时功能,格式为0 8 - 56 - 36 :时

    2024年02月04日
    浏览(38)
  • 用C语言实现万年历的代码及思路(详细教程)

    1.当选择1的时候,输入 年 ,打印输入的这一年12月的日历。 2.当选择2的时候,输入 年-月 ,打印输入这一年这一月的日历。 实现效果: 选择1时 选择2时 C语言根据日期判断星期几(使用基姆拉尔森计算公式) 算法如下: 基姆拉尔森计算公式 W= (d+2 m+3 (m+1)/5+y+y/4-y/100+y/400)%

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包