基于至简设计法实现的万年历功能
来源:互联网 发布:徒步旅行组织推荐知乎 编辑:程序博客网 时间:2024/06/15 08:20
一、
1、上板复位后从元年1月1号开始计数,为方便上板调试,将一天的时间压缩为1秒;
2、按键用于设置日历,按下按键0进入设置状态,再次按下按键0退出设置状态;3、按键1来选择想要设置的年月日的各个位;
4、 按键2在设置状态进行计数设置,每按下一次数码管显示数字加1;
5、 平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
6、 闰年:每400年整一闰,或每4年且不为百年的一闰。即能被400整除,或不能被100整除但能被4整除的年份为闰年。
二、
3.仿真结果:选取3个日期检查
(1)1900年2月28日:该年不是闰年,故2月份只有28天
(2)2000年2月29日:该年是闰年,故2月份有29天
(3)2016年12月27日:
经验证,日期显示正确。
三、 实现过程
首先根据所需要的功能,列出工程顶层的输入输出信号列表。
信号名
I/O
位宽
说明
clk
I
1
系统工作时钟50M
rst_n
I
1
系统复位信号,低电平有效
key_col
I
4
矩阵键盘列信号
key_row
O
4
矩阵键盘行信号
segment
O
8
数码管段选信号
seg_sel
O
8
数码管位选信号
我们可以把工程划分成三个模块,分别是万年历计数模块、按键模块和数码管显示模块。
1.万年历计数模块
万年历计数模块实现的是万年历计数功能,为方便观看,将一天时间设置为一秒,日计数器dat_cnt、月份计数器mon_cnt_h、mon_cnt_1、mon_2_h、mon_2_1分别为大月小月以及平年闰年的2月计数器、年份计数器yea_one、yea_ten、yea_hun、yea_tho分别为年份的个十百千位,由yea_cnt_tol <=yea_cnt1000 + yea_cnt100 + yea_cnt10 + yea_one得到年份。本模块还自动计算当年是否是平闰年。
本模块信号列表如下:
信号名
I/O
位宽
说明
clk
I
1
系统工作时钟50M
rst_n
I
1
系统复位信号,低电平有效
key_num
I
4
矩阵键盘列信号
key_vld
I
4
矩阵键盘行信号
dout
O
32
输出给8个数码管数据
2.按键模块
本次案例万年历使用的是4x4矩阵键盘,本模块就是实现了矩阵键盘的扫描并使用以及按键消抖功能。通过行扫描法得到按下的键的位置信息。
本模块的信号列表如下:
信号名
I/O
位宽
说明
clk
I
1
系统工作时钟50M
rst_n
I
1
系统复位信号,低电平有效
key_col
I
4
矩阵键盘列信号
key_row
O
4
矩阵键盘行信号
key_num
O
4
按键位置信号
key_vld
O
1
按键有效信号
3.数码管模块
数码管模块实现了将年月日的信息显示在数码管上。
本模块的信号列表如下:
信号名
I/O
位宽
说明
clk
I
1
系统工作时钟50M
rst_n
I
1
系统复位信号,低电平有效
din
I
32
数码管显示值输入
din_vld
O
8
数码管显示输入指示
segment
O
8
数码管段选信号
seg_sel
O
8
数码管位选信号
- 基于至简设计法实现的万年历功能
- 基于DS1302的万年历设计
- 万年历软件各个接口功能的实现
- 万年历的部分功能
- 基于JAVA的万年历
- 基于Win32控制台的万年历的实现(上)
- 基于Win32控制台的万年历的实现(下)
- 简单万年历的实现
- 【C++】万年历的实现
- 实现简单的万年历
- 万年历的实现代码
- Java实现的万年历
- 基于C语言的万年历
- 实现C++的万年历类
- 实现C++的万年历类
- 万年历的8086汇编实现
- js实现的简易万年历
- js实现的万年历显示
- Linux常用命令整理
- 算术编码
- ES6---string新增方法
- Caffe配置:使用CMake-gui轻松配置Caffe(vs2015+windows+cpuonly)
- bzoj2820 YY的GCD
- 基于至简设计法实现的万年历功能
- 笔试经验
- Java设计模式之策略模式简单介绍
- Recycleview上拉刷新_下拉加载_侧滑删除加强篇
- Button控制图片显示隐藏
- 请教各位如下格式的XML 如何解析
- 算法导论 练习题 4.4-9
- servlet 页面转发连带数据库
- 和老白一起玩转JavaScript -- 创造一个会做买卖的小伙伴(1)