1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 3)对正点原子FPGA感兴趣的同学可以加群讨论:994244016 4)关注正点原子公众号,获取最新资料更新
我们在“RTC实时时钟数码管显示实验”中成功的在数码管上显示了日期和时间。本章我们在“RTC实时时钟数码管显示实验”的基础上稍作修改,在LCD屏上显示日期和时间。 本章包括以下几个部分:
3131.1简介 31.2实验任务 31.3硬件设计 31.4程序设计 31.5下载验证
32.1简介 我们在“RTC实时时钟数码管显示实验”中对PCF8563实时时钟芯片作了详细的介绍,如果大家对这部分内容不是很熟悉的话,请参考“RTC实时时钟数码管显示实验”中的简介部分。 32.2实验任务 本节的实验任务是通过新起点开发板上的PCF8563实时时钟芯片,在RGB-LCD液晶屏上显示日期和时间。 32.3硬件设计 PCF8563部分的硬件设计原理在“RTC实时时钟数码管实验”中已作了详细的介绍,请参考“RTC实时时钟数码管实验”中的硬件设计部分。 32.4程序设计 根据实验任务,我们可以大致规划出系统的控制流程:首先通过I2C总线向PCF8563写入初始日期值(年月日)和时间值(时分秒),然后不断地读取日期和时间数据,并将读到的时间数据显示到LCD上。由此画出系统的功能框图如下图所示:
图 32.4.1 系统框图 由系统框图可知,FPGA顶层模块例化了以下三个模块、分别是IIC驱动模块(i2c_dri)、PCF8563控制模块(pcf8563_ctrl)以及LCD字符显示模块(lcd_disp_char)。 各模块端口及信号连接如下图所示:
图 32.4.2 顶层模块原理图 PCF8563控制模块通过调用IIC驱动模块来实现对PCF8563实时时钟数据的配置和读取;并将读到的值(年、月、日、时、分和秒)输出给LCD字符显示模块来显示。 顶层模块主要完成对其余模块的例化,其中I2C驱动模块(i2c_dri)程序与“EEPROM读写实验”章节中的IIC驱动模块(i2c_dri)程序完全相同,有关IIC驱动模块的详细介绍请大家参考“EEPROM读写实验”。pcf8563控制模块(pcf8563_ctrl)与“RTC实时时钟数码管显示实验”章节中的pcf8563控制模块完全相同,此处不再赘述。 LCD字符显示模块(lcd_disp_char)的代码由“RGB-LCD字符和图片显示”实验的代码修改而来,除lcd_disp_char顶层模块外,唯一不同的地方在LCD显示模块。 LCD显示模块的代码如下所示:
1 module lcd_display(
2 input lcd_pclk ,
3 input rst_n ,
4
5 //日历数据
6 input [7:0] sec, //秒
7 input [7:0] min, //分
8 input [7:0] hour, //时
9 input [7:0] day, //日
10 input [7:0] mon, //月
11 input [7:0] year, //年
12
13 //LCD数据接口
14 input [10:0] pixel_xpos, //像素点横坐标
15 input [10:0] pixel_ypos, //像素点纵坐标
16 output reg [15:0] pixel_data //像素点数据
17 );
18
19 //parameter define
20 localparam CHAR_POS_X_1 = 11'd1; //第1行字符区域起始点横坐标
21 localparam CHAR_POS_Y_1 = 11'd1; //第1行字符区域起始点纵坐标
22 localparam CHAR_POS_X_2 = 11'd17; //第2行字符区域起始点横坐标
23 localparam CHAR_POS_Y_2 = 11'd17; //第2行字符区域起始点纵坐标
24 localparam CHAR_WIDTH_1 = 11'd80; //第1行字符区域的宽度,第1行共10个字符(加空格)
25 localparam CHAR_WIDTH_2 = 11'd64; //第2行字符区域的宽度,第2行共8个字符(加空格)
26 localparam CHAR_HEIGHT = 11'd16; //单个字符的高度
27 localparam WHITE = 16'hffff; //背景色,白色
28 localparam BLACK = 16'h0000; //字符颜色,黑色
29
30 //reg define
31 reg [127:0] char [9:0] ; //字符数组
32
33 //*****************************************************
34 //** main code
35 //*****************************************************
36
37 //字符数组初始值,用于存储字模数据(由取模软件生成,单个数字字体大小:16*8)
38 always @(posedge lcd_pclk ) begin
39 char[0]
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?