热搜关键词: 机器人电路基础模拟电子技术matlablinux内核

rar

Xilinx Spartan3E Starter Kit平台控制1602液晶程序

  • 1星
  • 2013-07-01
  • 6.89MB
  • 需要2积分
  • 2次下载
标签: Xilinx Spartan 3E

Xilinx Spartan 3E

1602

1602

液晶

液晶

PS:Xilinx  Spartan  3E  Starter  Kit平台上LCD1602与板载Intel  Flash  Memory公用四根数据线,读写命令和数据时分别写高四位和低四位,具体请查阅三楼的数据手册

源码:

library  IEEE;

use  IEEE.STD_LOGIC_1164.ALL;

use  IEEE.STD_LOGIC_ARITH.ALL;

use  IEEE.STD_LOGIC_UNSIGNED.ALL;

entity  LCD1602  is

    Port  ( 

                    CLK  :  in  std_logic;

                Reset  :  in  std_logic;     

              LCD_RS  :  out  std_logic;

            LCD_RW  :  out  std_logic;

              LCD_EN  :  out  std_logic;

                    data  :  out  std_logic_vector(3  downto  0));

end  LCD1602;

architecture  Behavioral  of  LCD1602  is

    type  iState  is  (   

                                    Write_instr,        --写命令字

                      Write_DataUP4_1,        --写LCD一线高4位

                Write_DataDown4_1,        --写LCD一线低4位

                    Set_DDRamAddUp,        --设置DDRam地址高4位     

              Set_DDRamAddDown,        --设置DDRam地址低4位

                      Write_DataUP4_2,        --写LCD二线高4位

                Write_DataDown4_2        --写LCD二线低4位

            );

     

    signal  State:iState;   

    type  Ram  is  array(0  to  15)  of  std_logic_vector(7  downto  0);

    constant    MyRamUp:Ram:=(x\"46\",x\"68\",x\"69\",x\"73\",x\"20\",x\"49\",x\"73\",x\"20\",x\"4d\",x\"79\",x\"20\",x\"46\",x\"69\",x\"72\",x\"73\",x\"74\"); 

                                    --This    Is  My  First

    constant  MyRamDown:Ram:=(x\"20\",x\"20\",x\"46\",x\"50\",x\"47\",x\"41\",x\"20\",x\"50\",x\"72\",x\"6f\",x\"67\",x\"72\",x\"61\",x\"6d\",x\"20\",x\"20\"); 

                                    --FPGA  Program

    signal    LCD_Clk  :  std_logic  :=\'0\';

    signal    datacnt  :  integer  range  0  to  15:=0; 

begin

    LCD_RW  <=  \'0\';

    LCD_EN  <=  LCD_Clk; 

process(CLK)                                                      --20000分频,满足时序要求

    variable  n1:integer  range  0  to  19999;

begin 

    if  rising_edge(CLK)  then

      if  n1<19999  then

        n1:=n1+1;

      else 

        n1:=0;

        LCD_Clk<=not  LCD_Clk;

      end  if;

    end  if;

end  process;

process(LCD_Clk,state,reset)

begin

    if  Reset=\'0\'  then

        state<=Write_instr;

        LCD_RS  <=  \'0\';

    elsif  rising_edge(LCD_Clk)  then

        case  state  is

    when  Write_instr=>                    --写命令字到LCD控制器   

        LCD_RS<=\'0\';                               

        if(datacnt=0)then

            data<=\"0011\";                      --0011

            datacnt<=datacnt+1;

        elsif(datacnt=1)then

            data<=\"0011\";                      --0011

            datacnt<=datacnt+1;

        elsif(datacnt=2)then

            data<=\"0011\";                      --0011

            datacnt<=datacnt+1;

        elsif(datacnt=3)then

            data<=\"0010\";                      --0010

            datacnt<=datacnt+1;   

        elsif(datacnt=4)then              --0x28    :    0010  1000  =>功能设置

            data<=\"0010\";

            datacnt<=datacnt+1;

        elsif(datacnt=5)then

            data<=\"1000\";

            datacnt<=datacnt+1; 

        elsif(datacnt=6)then              --0x06    :    0000  0110  =>模式设定

            data<=\"0000\";

            datacnt<=datacnt+1;

        elsif(datacnt=7)then

            data<=\"0110\";

            datacnt<=datacnt+1;

        elsif(datacnt=8)then              --0x0c    :      0000  1100  =>显示设定

            data<=\"0000\";

            datacnt<=datacnt+1;

        elsif(datacnt=9)then

            data<=\"1100\";

            datacnt<=datacnt+1;   

        elsif(datacnt=10)then        --0x10    :  1000  0000  =>00H  设定读写地址位

            data<=\"1000\";

            datacnt<=datacnt+1;

        else

            data<=\"0000\";

            datacnt<=0;

        state<=Write_DataUP4_1;

        end  if;

    when  Write_DataUP4_1=>

        LCD_RS<=\'1\';     

        data  <=  MyRamUp(datacnt)(7  downto  4);

        state  <=  Write_DataDown4_1; 

       

    when  Write_DataDown4_1=>

        if  datacnt=15  then

            data  <=  MyRamUp(datacnt)(3  downto  0);

            datacnt<=0;

            state  <=Set_DDRamAddUp;

        else

            data  <=  MyRamUp(datacnt)(3  downto  0);

            datacnt<=datacnt+1;

            state  <=Write_DataUP4_1;

        end  if;

       

    when  Set_DDRamAddUp=>  --0xc0    :    1100  0000=>40H    设定读写地址位

            LCD_RS<=\'0\';

            data<=\"1100\";

            state<=Set_DDRamAddDown;

       

    when  Set_DDRamAddDown=>

            data<=\"0000\";

            state<=Write_DataUP4_2;

       

    when  Write_DataUP4_2=>

            LCD_RS<=\'1\';     

            data  <=  MyRamDown(datacnt)(7  downto  4);

            state  <=  Write_DataDown4_2; 

       

    when  Write_DataDown4_2=>

            if  datacnt=15  then

              data  <=  MyRamDown(datacnt)(3  downto  0);

              datacnt<=0;

              state  <=Write_DataUP4_1;

            else

              data  <=  MyRamDown(datacnt)(3  downto  0);

              datacnt<=datacnt+1;

              state  <=Write_DataUP4_2;

            end  if;

       

    when  others=>

            state<=Write_instr;

       

    end  case;

    end  if;

end  process;

end  Behavioral;

展开预览

评论

登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

  • 不明白现在51学习板为什么配彩屏
    不明白现在51学习板为什么都配彩屏,就因为学生不懂,忽悠学生们的钱?还真不如做点实用的,把价格降下来,给广大学生们省点钱来搞学习。看看实际做产品的,哪个产品是用51来驱动彩屏做显示的?简直赚钱不要命。
  • 高精度电流源在陀螺测试中的应用
    随着惯性导航系统的快速发展,陀螺仪作为惯性导航系统的核心,其性能决定了惯性导航系统的性能。随着现代物理的快速发展,尤其是量子调控等领域的飞速进步,有着高精度、小体积、低功耗和低成本等优点的核磁共振陀螺成为重要的研究方向。核磁共振陀螺(NMRG)是利用激光与核磁共振气室中的碱金属原子和惰性气体原子的相互作用使核子以拉莫尔频率进动,并通过磁场驱动技术对气室磁场实现闭环控制和对剩磁进行补偿来维持核子的共
  • TI DSP C54X使用经验
    C54X使用经验DAVIDLIN 发表于 2002-11-20 22:47 DSP 技术 ←返回版面发信人: xunger (迅哥儿 不断战斗中), 信区: Circuit标 题: C54X使用经验发信站: BBS 水木清华站 (Fri Dec 29 10:19:58 2000)一点个人所得,拿来和大家交流交流,抛砖引玉而已。1.电源:用TPS73HD318,外部接法有参考电路,我没有接电感,工作
  • 年轻人不讲武德,过孔阻抗设计不考虑生产能力
    作者:一博科技高速先生自媒体成员 王辉东如果电路板是个人,那钻孔就是它的魂,特别是过孔,它是板子的魂魄。在高速PCB的设计中,过孔设计是一个重要因素,并且过孔设计已成为制约高速PCB设计的关键因素之一,如处理不当可能会导致整个设计的失败。过孔是连接多层PCB中不同层走线的导体,低频的时候,过孔不会对信号传输产生影响,但随频率增加和信号上升时间的减小,过孔不能简单的被看成是电气连接,而必须考虑其对信
  • 电子钟设计详解
    [i=s] 本帖最后由 paulhyde 于 2014-9-15 09:34 编辑 [/i]电子钟设计
  • 急,请教高手,WinCE中CF卡的hive注册表保存问题
  • 器件虽小创意无限
  • 单车改装系列:按钮
  • 全志 V85开发板 RTOS平台cache操作接口介绍
  • 如何使用Type C进行电力共享?给你三种方法

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×