一个利用12864来显示时间,可以自己设定时间日期星期
YY_STM32---万年历--程序说明
这个程序只是我花了七多个小时写一个万年历,所以难以避免其中BUG很多。所以我也非常希望各位多提意见。让我得已进步。。。下面我把程序运行的实现以及一些处理简易的叙述一下。方便大家理解程序。
定时单元:使用TIM3定时器,向上技术模式。计数5000次即500MS.通过一个全局变量作为分频后得到一秒的定时中断。
显示单元:采用LCD12864点阵显示,这种屏幕刷新速度慢,拖影严重,唯一的好处就是操作简单,成本低廉。这个实例采用了串口的方式实现显示,接口定义为:PB7—RST///PSB—PA4(其实这个可以不接)//EN—PA2//RW—PA6,其他的电源线大家就自己找地方了。这个接口也可以通过程序中的KEY.C文件中修改,但是大家更改接口后记得打开时钟。
运行载体:YY_STM32,就是本次大家一起焊接的板。这个程序也是相当于一个测试开发板的吧。
调节时间方法:本身是想用三个外部中断来控制的,但是PA0的外部接法让我迷惑了下,,所以见采用隔时采集SET(K2)按键的输入电平来检测是否按键。时间调节的方式:首先按下K2(确认键),然后开始调节年份,左边的K1是上调功能,右边的K3是下调功能,年份调节的范围是1000~9000年,年份调节好了之后然后再按下确认键,进入月份调节,然后在调节日期,这个程序有自动识别闰年和平年的功能,调节月份之后,日期会根据月份确定天数。然后调节星期,这里我没有写成中文的显示,原因就是。。。。懒的写。其实有兴趣的在外面加一个开关语句就可以实现了。星期调节之后就是调节小时和分钟。在调节分钟时,秒钟会自动清零。方便调节。分钟调节完后再按下确认键(K2),就退出了调节模式。进入自动走时的功能。
倒计时:大家会注意到在第三排左边,有一个倒计,这是根据一天剩余的时间计算出来的剩余秒数。就是吓唬吓唬浪费时间的哥们,我是看着这个倒计时心痛时间了。。。当然,这个调节时间会在调节时间后自动计算。而不是单纯性的i—的单目操作。
LED灯:这个程序在运行时,LED1和LED2会交替闪烁,这样可以我们观察程序是否在运行。这个灯交替的频率是1HZ。但这是理论频率。我这公司的示波器之烂,测量频率没有一次准确过。。
建议:我在写这个的时候,12864的字符位置有点小麻烦,我这里也建议大家多多使用仿真器(我没打广告),这样在程序卡住的时候可以硬件仿真实时调整,非常方便。相比串口下载,,,Jlink可算非常有能耐了。。
然后,,,然后其实这个程序非常简单的了。我也花了半个小时写了相比而言比较明白的注释。因为这是第二次写STM32的程序,所以如果有谁看不懂的,我想应该是我没有写的浅显易懂了。。所以可以找我给你解释一下。我也想多多给我找问题然后,,,然后大家自己看程序说话吧。。同时由于看视频容易睡觉,,,关于第一课的要求有些不是太清楚,周末找时间看。这里先把万年历交出来,然后再看其他的作业。。。
-------这个论坛允许上传的图片只有20M,我只能选几张相比这下清楚的照片给大家看一看。。
@易文_工_四川
单片机源程序如下:
- /********************************************************************
- * 文件名 : 通过YY_STM32在12864上显示万年历
- * 描述 : 年份范围1000~9999年,可以判断闰年。
- * 创建人 : @易文_工_四川
- zhouyibin0718@163.com
- * 版本号 : 2015-01-28
- ***********************************************************************/
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "12864.h"
- #include "timer.h"
- u8 seconds=00;//秒钟
- u8 minute=45;//分钟
- u8 hours=16;//小时
- u8 day=28;//日
- u8 month=1;//月
- u32 years=2015;//年
- u8 week=3;//星期
- u8 num;//用于定时器分频处理
- u8 set;//确定键
- u8 up;//上调键
- u8 down;//下调键
- u32 count;//倒计时,倒计起来。。。吓死人。
- int main(void)
- {
- delay_init();
- NVIC_Configuration();
- KEY_Init();
- GPIO_ResetBits(GPIOA,GPIO_Pin_4); //用于确定12864工作方式
- delay_ms(10);
- lcdinit(); //LCD初始化
- delay_ms(1);
- TIM3_Int_Init(4999,7199); //10Khz的计数频率,计数到5000为500ms
- L12864_string(1,0," YY_STM32 万年历");
- L12864_string(2,0," 年 月 日 ");
- L12864_string(3,0,"星期 倒计 ");
- L12864_string(4,0," 时 分 秒 ");
- while(1)
- {
- timerinit();//单天内时间计算程序
- dayinit();//年月日计算程序
- delay_ms(20);
- disp();//显示刷新时间
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
YY_STM32.rar
(2.85 MB, 下载次数: 185)
YY-STM32 V1.3原理图.pdf
(848.46 KB, 下载次数: 99)
|