【从零开始走进FPGA】 LCD 1602 Hello World

发布时间:2016-2-18 14:15    发布者:designapp
关键词: FPGA , 1602
  前面说过,在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*^_^*";
  

                               
               
本文地址:https://www.eechina.com/thread-160876-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表