LCD 1602 Hello World
时间:02-18
来源:互联网
点击:
前面说过,在C,C++等语言学习中,“Hello World”将会是第一个学习的代码,但是在FPGA中由于电路驱动的复杂性,与单片机雷同,我们无法在电脑上实现“Hello World”的显示,而必须依靠相关硬件。因此我们不得不在一定的基础上,才能讲解关于LCD1602字符液晶的驱动,以及Hello World的显示。
雷同于前面MCU按键消抖动移植代码,此处也可以移植MCU LCD1602驱动代码。本例程不是Bingo原创,是按照网友“小时不识月”的代码,移植修改最后定型为Bingo版本(O(∩_∩)O哈哈~)。
电路图此处不解释,太简单了。
一、驱动说明
由于FPGA的高速并行操作,并非顺序执行,在代码上与MCU有所不同。此处先讲解驱动原理:
(1)分频以得到500KHz固定的频率,初始化LCD1602。如下图所示,LCD_EN的频率应该控制在2M以内(不同的LCD1602参数会有所不同)。
(2)通过三段式状态机,来初始化以及给数据。
(3)通过循环读取某一“数组”,循环给LCD1602数据,以接口形式方便改变。
二、FPGA LCD1602 FSM
1. 代码
/*************************************************
* Module Name : lcd1602_driver
* Engineer : Crazy Bingo
* Target Device : EP2C8Q208C8
* Tool versions : Quartus II 11.0
* Create Date : 2011-7-3
* Revision : v1.0
* Description :
**************************************************/
module lcd1602_driver
(
input clk,
input rst_n,
output lcd_en, // lcd enable
output reg lcd_rs, // record,statement
output lcd_rw,
output reg [7:0] lcd_data
);
parameter [127:0] line_rom1 = "I am CrazyBingo!";
parameter [127:0] line_rom2 = "Hello World*^_^*";
//--------------------------------------
reg [15:0] cnt;
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt
(2)模块可分为一下几个状态
3. “Hello World”实物显示
parameter [127:0] line_rom1 = "I am CrazyBingo!";
parameter [127:0] line_rom2 = "Hello World*^_^*";
雷同于前面MCU按键消抖动移植代码,此处也可以移植MCU LCD1602驱动代码。本例程不是Bingo原创,是按照网友“小时不识月”的代码,移植修改最后定型为Bingo版本(O(∩_∩)O哈哈~)。
电路图此处不解释,太简单了。
一、驱动说明
由于FPGA的高速并行操作,并非顺序执行,在代码上与MCU有所不同。此处先讲解驱动原理:
(1)分频以得到500KHz固定的频率,初始化LCD1602。如下图所示,LCD_EN的频率应该控制在2M以内(不同的LCD1602参数会有所不同)。
(2)通过三段式状态机,来初始化以及给数据。
(3)通过循环读取某一“数组”,循环给LCD1602数据,以接口形式方便改变。
二、FPGA LCD1602 FSM
1. 代码
/*************************************************
* Module Name : lcd1602_driver
* Engineer : Crazy Bingo
* Target Device : EP2C8Q208C8
* Tool versions : Quartus II 11.0
* Create Date : 2011-7-3
* Revision : v1.0
* Description :
**************************************************/
module lcd1602_driver
(
input clk,
input rst_n,
output lcd_en, // lcd enable
output reg lcd_rs, // record,statement
output lcd_rw,
output reg [7:0] lcd_data
);
parameter [127:0] line_rom1 = "I am CrazyBingo!";
parameter [127:0] line_rom2 = "Hello World*^_^*";
//--------------------------------------
reg [15:0] cnt;
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt
(2)模块可分为一下几个状态
3. “Hello World”实物显示
parameter [127:0] line_rom1 = "I am CrazyBingo!";
parameter [127:0] line_rom2 = "Hello World*^_^*";
FPGA 电路 单片机 LCD MCU 电路图 Quartus 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)