找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18136|回复: 4
收起左侧

VHDL-LCD1602显示程序 包括英文数字简单汉字

[复制链接]
ID:77367 发表于 2015-4-19 03:10 | 显示全部楼层 |阅读模式








Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity LCD1602 is
Port(clk,CR:in std_logic;
     RW,EN,RS:out std_logic;
       Qdata:out std_logic_vector(7 downto 0));
end;
Architecture LCD of LCD1602 is
signal Qfp:integer range 0 to 4999999;
signal cp:std_logic;
begin
  process(clk,CR)
     begin
          if CR='0' then
                Qfp<=0;
                    cp<='0';
               elsif clk'event and clk='1' then
                     Qfp<=Qfp+1;
                         if Qfp=0 then
                            cp<=not cp;
                         end if;
               end if;
     end process;
     RW<='0';
     EN<=cp;
     process(cp)
        variable cnt:integer range 0 to 37;
        begin
          if CR='0' then
             cnt:=0;
               Qdata<="00000001";
          elsif cp'event and cp='1' then
              cnt:=cnt+1;
          end if;
          case cnt is
          -------Init LCD1602-----------
          when 0 =>RS<='0';Qdata<="00111000";  --0x38,
          when 1 =>RS<='0';Qdata<="00001100";  --0x0C
          when 2 =>RS<='0';Qdata<="00000001";  --0x01
          when 3 =>RS<='0';Qdata<="00000110";  --0x60
          ----------------------------------
          when 4 =>RS<='0';Qdata<="10000000";  --display,0x00+0x80,1h1w
          -------data display-------------
          when 5=>RS<='1';Qdata<="10100000";--空格   
      when 6=>RS<='1';Qdata<="10100000";--空格   
      when 7=>RS<='1';Qdata<="10100000";--空格
      when 8=>RS<='1';Qdata<="01011001"; --Y   
      when 9=>RS<='1';Qdata<="01110101";--u   
      when 10=>RS<='1';Qdata<="01101010";--j   
      when 11=>RS<='1';Qdata<="01101001";--i   
      when 12=>RS<='1';Qdata<="01100001";--a   
      when 13=>RS<='1';Qdata<="01101110";--n   
      when 14=>RS<='1';Qdata<="01110001";--q      
      when 15=>RS<='1';Qdata<="01110101";--u   
      when 16=>RS<='1';Qdata<="01100001";--a   
      when 17=>RS<='1';Qdata<="01101110";--n   
      when 18=>RS<='1';Qdata<="10100000";---空格   
      when 19=>RS<='1';Qdata<="10100000";---空格   
      when 20=>RS<='1';Qdata<="10100000";---空格
     ---------------------------
        when 21=>RS<='0';Qdata<="11000000";--设定显示的位置在10H+80H,
       ----------------------------
       when 22=>RS<='1';Qdata<="01000100";---D diangong xueyuan   
     when 23=>RS<='1';Qdata<="01101001";---i   
     when 24=>RS<='1';Qdata<="01100001";---a
     when 25=>RS<='1';Qdata<="01101110";---n   
     when 26=>RS<='1';Qdata<="01100111";---g   
     when 27=>RS<='1';Qdata<="01101111";---o
     when 28=>RS<='1';Qdata<="01101110";--n   
     when 29=>RS<='1';Qdata<="01100111";---g   
     when 30=>RS<='1';Qdata<="10100000";--- 空格   
     when 31=>RS<='1';Qdata<="01011000";---X
     when 32=>RS<='1';Qdata<="01110101";---u   
     when 33=>RS<='1';Qdata<="01100101";---e   
     when 34=>RS<='1';Qdata<="01111001";---y
     when 35=>RS<='1';Qdata<="01110101";---u   
     when 36=>RS<='1';Qdata<="01100001";---a   
     when 37=>RS<='1';Qdata<="01101110";---n      
     end case;
      end process;
     end;
LCD1602显示自定义字符或汉字
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity LCD1602 is
Port(clk,CR:in std_logic;
     RW,EN,RS:out std_logic;
   Qdata:out std_logic_vector(7 downto 0));
end;
Architecture LCD of LCD1602 is
signal Qfp:integer range 0 to 499999;
signal cp:std_logic;
Type GCROM is array(0 to 63)of std_logic_vector(7 downto 0);
constant xx:GCROM:=(
X"00",X"00",X"00",X"1F",X"00",X"00",X"00",X"00",--一
X"00",X"00",X"0E",X"00",X"1F",X"00",X"00",X"00",--二
X"00",X"1F",X"00",X"0E",X"00",X"1F",X"00",X"00",--//三
X"02",X"04",X"0F",X"12",X"0F",X"0A",X"1F",X"02",--//年
X"0F",X"09",X"0F",X"09",X"0F",X"09",X"09",X"11",--//月
X"1F",X"11",X"11",X"1F",X"11",X"11",X"1F",X"00",--//日
X"00",X"00",X"00",X"0A",X"15",X"0A",X"04",X"00",--//心型
X"00",X"04",X"15",X"0E",X"1F",X"0E",X"11",X"00"      
                  );
constant yy:GCROM:=(
"01000000","01000001","01000010","01000011", "01000100","01000101","01000110","01000111",
"01001000","01001001","01001010","01001011", "01001100","01001101","01001110","01001111",
"01010000","01010001","01010010","01010011", "01010100","01010101","01010110","01010111",
"01011000","01011001","01011010","01011011", "01011100","01011101","01011110","01011111",
"01100000","01100001","01100010","01100011", "01100100","01100101","01100110","01100111",
"01101000","01101001","01101010","01101011", "01101100","01101101","01101110","01101111",
"01110000","01110001","01110010","01110011", "01110100","01110101","01110110","01110111",
"01111000","01111001","01111010","01111011", "01111100","01111101","01111110","01111111"  
                   );
begin
  process(clk,CR)
     begin
      if CR='0' then
        Qfp<=0;
    cp<='0';
     elsif clk'event and clk='1' then
         Qfp<=Qfp+1;
     if Qfp=0 then
        cp<=not cp;      
     end if;     
   end if;
end process;
RW<='0';
EN<=cp;
process(cp)
    variable cnt:integer range 0 to 195;
  begin
  if CR='0' then
     cnt:=0;
   Qdata<="00000001";
  elsif cp'event and cp='1' then            
       cnt:=cnt+1;      
  end if;
  case cnt is  
  when 0=>RS<='0';Qdata<="01000000";  
      when 1=>RS<='1';Qdata<=xx(cnt-1);
  when 2=>RS<='0';Qdata<="01000001";  
      when 3=>RS<='1';Qdata<=xx(cnt-2);
      when 4=>RS<='0';Qdata<="01000010";  
      when 5=>RS<='1';Qdata<=xx(cnt-3);
  when 6=>RS<='0';Qdata<="01000011";  
      when 7=>RS<='1';Qdata<=xx(cnt-4);
      when 8=>RS<='0';Qdata<="01000100";  
      when 9=>RS<='1';Qdata<=xx(cnt-5);
  when 10=>RS<='0';Qdata<="01000101";  
      when 11=>RS<='1';Qdata<=xx(cnt-6);
      when 12=>RS<='0';Qdata<="01000110";  
      when 13=>RS<='1';Qdata<=xx(cnt-7);
  when 14=>RS<='0';Qdata<="01000111";  
      when 15=>RS<='1';Qdata<=xx(cnt-8);
      when 16=>RS<='0';Qdata<="01001000";  
      when 17=>RS<='1';Qdata<=xx(cnt-9);
  when 18=>RS<='0';Qdata<="01001001";  
      when 19=>RS<='1';Qdata<=xx(cnt-10);
      when 20=>RS<='0';Qdata<="01001010";  
      when 21=>RS<='1';Qdata<=xx(cnt-11);
  when 22=>RS<='0';Qdata<="01001011";  
      when 23=>RS<='1';Qdata<=xx(cnt-12);
      when 24=>RS<='0';Qdata<="01001100";  
      when 25=>RS<='1';Qdata<=xx(cnt-13);
  when 26=>RS<='0';Qdata<="01001101";  
      when 27=>RS<='1';Qdata<=xx(cnt-14);
      when 28=>RS<='0';Qdata<="01001110";  
      when 29=>RS<='1';Qdata<=xx(cnt-15);
  when 30=>RS<='0';Qdata<="01001111";  
      when 31=>RS<='1';Qdata<=xx(cnt-16);   
  --------------
      when 32=>RS<='0';Qdata<="01010000";  
      when 33=>RS<='1';Qdata<=xx(cnt-17);
  when 34=>RS<='0';Qdata<="01010001";  
      when 35=>RS<='1';Qdata<=xx(cnt-18);
      when 36=>RS<='0';Qdata<="01010010";  
      when 37=>RS<='1';Qdata<=xx(cnt-19);
  when 38=>RS<='0';Qdata<="01010011";  
      when 39=>RS<='1';Qdata<=xx(cnt-20);
      when 40=>RS<='0';Qdata<="01010100";  
      when 41=>RS<='1';Qdata<=xx(cnt-21);
  when 42=>RS<='0';Qdata<="01010101";  
      when 43=>RS<='1';Qdata<=xx(cnt-22);
      when 44=>RS<='0';Qdata<="01010110";  
      when 45=>RS<='1';Qdata<=xx(cnt-23);
  when 46=>RS<='0';Qdata<="01010111";  
      when 47=>RS<='1';Qdata<=xx(cnt-24);
      when 48=>RS<='0';Qdata<="01011000";  
      when 49=>RS<='1';Qdata<=xx(cnt-25);
  when 50=>RS<='0';Qdata<="01011001";  
      when 51=>RS<='1';Qdata<=xx(cnt-26);
      when 52=>RS<='0';Qdata<="01011010";  
      when 53=>RS<='1';Qdata<=xx(cnt-27);
  when 54=>RS<='0';Qdata<="01011011";  
      when 55=>RS<='1';Qdata<=xx(cnt-28);
      when 56=>RS<='0';Qdata<="01011100";  
      when 57=>RS<='1';Qdata<=xx(cnt-29);
  when 58=>RS<='0';Qdata<="01011101";  
      when 59=>RS<='1';Qdata<=xx(cnt-30);
      when 60=>RS<='0';Qdata<="01011110";  
      when 61=>RS<='1';Qdata<=xx(cnt-31);
  when 62=>RS<='0';Qdata<="01011111";  
      when 63=>RS<='1';Qdata<=xx(cnt-32);
  ---------------------------------
  when 64=>RS<='0';Qdata<="01100000";  
      when 65=>RS<='1';Qdata<=xx(cnt-33);
  when 66=>RS<='0';Qdata<="01100001";  
      when 67=>RS<='1';Qdata<=xx(cnt-34);
      when 68=>RS<='0';Qdata<="01100010";  
      when 69=>RS<='1';Qdata<=xx(cnt-35);
  when 70=>RS<='0';Qdata<="01100011";  
      when 71=>RS<='1';Qdata<=xx(cnt-36);
      when 72=>RS<='0';Qdata<="01100100";  
      when 73=>RS<='1';Qdata<=xx(cnt-37);
  when 74=>RS<='0';Qdata<="01100101";  
      when 75=>RS<='1';Qdata<=xx(cnt-38);
      when 76=>RS<='0';Qdata<="01100110";  
      when 77=>RS<='1';Qdata<=xx(cnt-39);
  when 78=>RS<='0';Qdata<="01100111";  
      when 79=>RS<='1';Qdata<=xx(cnt-40);
      when 80=>RS<='0';Qdata<="01101000";  
      when 81=>RS<='1';Qdata<=xx(cnt-41);
  when 82=>RS<='0';Qdata<="01101001";  
      when 83=>RS<='1';Qdata<=xx(cnt-42);
      when 84=>RS<='0';Qdata<="01101010";  
      when 85=>RS<='1';Qdata<=xx(cnt-43);
  when 86=>RS<='0';Qdata<="01101011";  
      when 87=>RS<='1';Qdata<=xx(cnt-44);
      when 88=>RS<='0';Qdata<="01101100";  
      when 89=>RS<='1';Qdata<=xx(cnt-45);
  when 90=>RS<='0';Qdata<="01001101";  
      when 91=>RS<='1';Qdata<=xx(cnt-46);
      when 92=>RS<='0';Qdata<="01101110";  
      when 93=>RS<='1';Qdata<=xx(cnt-47);
  when 94=>RS<='0';Qdata<="01101111";  
      when 95=>RS<='1';Qdata<=xx(cnt-48);   
  --------------
      when 96=>RS<='0';Qdata<="01110000";  
      when 97=>RS<='1';Qdata<=xx(cnt-49);
  when 98=>RS<='0';Qdata<="01110001";  
      when 99=>RS<='1';Qdata<=xx(cnt-50);
      when 100=>RS<='0';Qdata<="01110010";  
      when 101=>RS<='1';Qdata<=xx(cnt-51);
  when 102=>RS<='0';Qdata<="01110011";  
      when 103=>RS<='1';Qdata<=xx(cnt-52);
      when 104=>RS<='0';Qdata<="01010100";  
      when 105=>RS<='1';Qdata<=xx(cnt-53);
  when 106=>RS<='0';Qdata<="01110101";  
      when 107=>RS<='1';Qdata<=xx(cnt-54);
      when 108=>RS<='0';Qdata<="01110110";  
      when 109=>RS<='1';Qdata<=xx(cnt-55);
  when 110=>RS<='0';Qdata<="01110111";  
      when 111=>RS<='1';Qdata<=xx(cnt-56);
      when 112=>RS<='0';Qdata<="01111000";  
      when 113=>RS<='1';Qdata<=xx(cnt-57);
  when 114=>RS<='0';Qdata<="01111001";  
      when 115=>RS<='1';Qdata<=xx(cnt-58);
      when 116=>RS<='0';Qdata<="01111010";  
      when 117=>RS<='1';Qdata<=xx(cnt-59);
  when 118=>RS<='0';Qdata<="01111011";  
      when 119=>RS<='1';Qdata<=xx(cnt-60);
      when 120=>RS<='0';Qdata<="01111100";  
      when 121=>RS<='1';Qdata<=xx(cnt-61);
  when 122=>RS<='0';Qdata<="01111101";  
      when 123=>RS<='1';Qdata<=xx(cnt-62);
      when 124=>RS<='0';Qdata<="01111110";  
      when 125=>RS<='1';Qdata<=xx(cnt-63);
  when 126=>RS<='0';Qdata<="01111111";  
      when 127=>RS<='1';Qdata<=xx(cnt-64);
  -------Init LCD1602-----------
  when 128 =>RS<='0';Qdata<="00111000";  --0x38,
  when 129 =>RS<='0';Qdata<="00001100";  --0x0C
  when 130=>RS<='0';Qdata<="00000001";  --0x01
  when 131 =>RS<='0';Qdata<="00000110";  --0x60
  -------------------------------
  
  ----------------------------------
  when 132 =>RS<='0';Qdata<="10000000";  --display,0x00+0x80,1h1w
  -------data display-------------
  when 133=>RS<='1';Qdata<="00000000";--空格   
      when 134=>RS<='1';Qdata<="00000001";--空格   
      when 135=>RS<='1';Qdata<="00000010";--空格
      when 136=>RS<='1';Qdata<="00000011"; --Y   
      when 137=>RS<='1';Qdata<="00000100";--u   
      when 138=>RS<='1';Qdata<="00000101";--j   
      when 139=>RS<='1';Qdata<="00000110";--i   
      when 140=>RS<='1';Qdata<="00000111";--a   
      when 141=>RS<='1';Qdata<="00000000";--n   
      when 142=>RS<='1';Qdata<="00000001";--q      
      when 143=>RS<='1';Qdata<="00000010";--u   
      when 144=>RS<='1';Qdata<="00000100";--a   
      when 145=>RS<='1';Qdata<="00000110";--n   
      when 146=>RS<='1';Qdata<="00000111";---空格   
      when 147=>RS<='1';Qdata<="10100100";---空格   
      when 148=>RS<='1';Qdata<="10100110";---空格
     ---------------------------
    when 149=>RS<='0';Qdata<="11000000";--设定显示的位置在10H+80H,
   ----------------------------
   when 150=>RS<='1';Qdata<="00000111";---D diangong xueyuan   
     when 151=>RS<='1';Qdata<="00000110";---i   
     when 152=>RS<='1';Qdata<="00000101";---a
     when 153=>RS<='1';Qdata<="00000100";---n   
     when 154=>RS<='1';Qdata<="00000011";---g   
     when 155=>RS<='1';Qdata<="00000010";---o
     when 156=>RS<='1';Qdata<="00000001";--n   
     when 157=>RS<='1';Qdata<="00000000";---g   
     when 158=>RS<='1';Qdata<="00000000";--- 空格   
     when 159=>RS<='1';Qdata<="00000001";---X
     when 160=>RS<='1';Qdata<="00000010";---u   
     when 161=>RS<='1';Qdata<="00000011";---e   
     when 162=>RS<='1';Qdata<="00000100";---y
     when 163=>RS<='1';Qdata<="00000101";---u   
     when 164=>RS<='1';Qdata<="00000110";---a   
     when 165=>RS<='1';Qdata<="00000111";---n
--------------------------------------------
      when 166 =>RS<='0';Qdata<="10000000";  --display,0x00+0x80,1h1w
  -------data display-------------
  when 167=>RS<='1';Qdata<="00000000";--空格   
      when 168=>RS<='1';Qdata<="00000001";--空格   
      when 169=>RS<='1';Qdata<="00000010";--空格
      when 170=>RS<='1';Qdata<="00000011"; --Y   
      when 171=>RS<='1';Qdata<="00000100";--u   
      when 172=>RS<='1';Qdata<="00000101";--j   
      when 173=>RS<='1';Qdata<="00000110";--i   
      when 174=>RS<='1';Qdata<="00000111";--a   
      when 175=>RS<='1';Qdata<="00000000";--n   
      when 176=>RS<='1';Qdata<="00000001";--q      
      when 177=>RS<='1';Qdata<="00000010";--u   
      when 178=>RS<='1';Qdata<="00000011";--a   
      when 179=>RS<='1';Qdata<="00000100";--n   
      when 180=>RS<='1';Qdata<="00000101";---空格
     
  when 181 =>RS<='1';Qdata<="00000110";  --display,0x00+0x80,1h1w
  -------data display-------------
  when 182=>RS<='1';Qdata<="00000000";--空格   
      when 183=>RS<='1';Qdata<="00000001";--空格   
      when 184=>RS<='1';Qdata<="00000010";--空格
      when 185=>RS<='1';Qdata<="00000011"; --Y   
      when 186=>RS<='1';Qdata<="00000100";--u   
      when 187=>RS<='1';Qdata<="00000101";--j   
      when 188=>RS<='1';Qdata<="00000110";--i   
      when 189=>RS<='1';Qdata<="00000111";--a   
      when 190=>RS<='1';Qdata<="00000000";--n   
      when 191=>RS<='1';Qdata<="00000001";--q      
      when 192=>RS<='1';Qdata<="00000010";--u   
      when 193=>RS<='1';Qdata<="00000100";--a   
      when 194=>RS<='1';Qdata<="00000110";--n   
      when 195=>RS<='1';Qdata<="00000111";---空格
     when others=>null;   
     end case;
  end process;
end;

LCD1602相比大家都比较了解,但是我们一般只用来显示字符,数字。

最近在网上看许多人用LCD1602来显示汉字,觉得有趣
于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!!
接下我谈谈我得做法,保证你10分钟之内一样可以在LCD1602上显示你想显示的各种符号,汉字!!!

首先:我们要弄清楚一个概念,其实我们使用1602显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602内部有一个64字节的自定义CGRAM,那么好,我们就是要利用自定义字节来达到显示汉字的效果.
我们知道一个字符占8个字节,所以在CGRAM能够存放8个字符。
也就是说,这个64字节的CGRAM是给我们提供写入数据的,
那么我们怎么把我们要的汉字写入CGRAM呢?
不要急,大家查看LCD1602的用户手册,里面提到当我们需要想CGRAM写入数据时,我们需要先写入CGRAM的地址,从手册上可知,CGRAM的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令 write_com(0x040);
然后把你要写入的数据通过写数据命令写入  write_date( 你要写得数据);

做完以上步骤了,是不是LCD1602就会显示你输入的汉字呢?
不要急,以上你只是把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,如果你不把它读出来,LCD是不会显示的。。

当你把上面的步骤做完后,接下来要做的与你平常怎么使用LCD1602是一样的,只不过是LCD1602里面增加了一些你自定义的字符,汉字。

可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那么我该怎么编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。。

相信有的朋友应该都用过这个软件。那么我们怎么来使用这个软件来获取代码呢?大家有没有注意到,我们的LCD1602是5*8点阵(可以数一数)。但是5*8不能提取代码,最少只能8*8,所以我们这里只用后前5列,前3列不用。。
新建图像 8*8.然后再图像里面点你要显示的字符,汉字,注意是在后5列中点,黑点表示显示,白点不显示,用鼠标左键可以切换,下面是我点得一个坦克~~

点好后,就可以产生代码了,这软件里面可以选择C51或汇编,这里选择C51。
下面的8个代码就是要产生这个字符的数据。。也就是要输入到自定义字符CGRAM里面的

好的,怎么把获取汉字代码,怎么把代码输入到CGRAM里面都知道了,
下面就是要把我们的自定义汉字、字符显示在LCD1602屏幕上了。。
我们知道常用字符是从0x20开始显示,而0x00—0x0f都是没有用的,其实这个正式为我们自定义显示字符准备的。当你把上面的代码输入到CGRAM中,LCD1602机会把汉字或字符赋予地址,这个地址是从0x00开始,因为最多只能8个字符,所以当在CGRAM里面输入8个字符代码时,这8个字符的代码的数据地址就是0x00开始到0x07。
所以当你要在LCD1602上显示自定义字符时,只需要把这个地址用数据输入就OK。
  Write_date(0x00—0x07);
也就是说现在你要显示自定义字符和你显示常用字符一样的做法了,先写地址,然后写数据
自定义字符的数据就是0x00—0x07。也就是你自定义的8个字符。
这里用 Proteus 仿真软件演示


附程序

编写时间:2011-11-25
功能:LCD显示自定义字符、汉字
  1. #include"reg52.h"



  2. #define uchar unsigned char

  3. #define uint unsigned int



  4. sbit lcdrs=P2^4;

  5. sbit lcdrw=P2^5;

  6. sbit lcden=P2^6;



  7. uchar code table[]={

  8. 0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00,//一

  9. 0x00,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,//二

  10. 0x00,0x1F,0x00,0x0E,0x00,0x1F,0x00,0x00,//三

  11. 0x02,0x04,0x0F,0x12,0x0F,0x0A,0x1F,0x02,//年

  12. 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x09,0x11,//月

  13. 0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,//日

  14. 0x00,0x00,0x00,0x0A,0x15,0x0A,0x04,0x00,//心型

  15. 0x00,0x04,0x15,0x0E,0x1F,0x0E,0x11,0x00//坦克

  16. };

  17. uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};  //自定义字符数据地址

  18. uchar code table2[]="QQ:598852247";

  19. /******************************

  20.               ms延时函数

  21. ******************************/

  22. void delay(uchar z)

  23. {

  24.        uint x,y;

  25.        for(x=z;x>0;x--)

  26.               for(y=122;y>0;y--);      

  27. }

  28. /******************************

  29.               lcd1602写命令函数

  30. ******************************/

  31. void write_cmd(uchar cmd)

  32. {

  33.        lcdrs=0;

  34.        lcdrw=0;    //选择指令寄存器

  35.        lcden=1;

  36.        P0=cmd;     //写了命令

  37.        delay(5);

  38.        lcden=0;    //使能拉低

  39.        lcden=1;

  40. }

  41. /******************************

  42.               lcd1602写数据函数

  43. ******************************/

  44. void write_date(uchar date)

  45. {

  46.        lcdrs=1;

  47.        lcdrw=0;    //选择数据寄存器

  48.        lcden=1;

  49.        P0=date;     //写了命令

  50.        delay(5);

  51.        lcden=0;    //使能拉低

  52.        lcden=1;

  53. }

  54. /******************************

  55.               lcd1602初始化

  56. ******************************/

  57. void init_lcd1602()

  58. {

  59.        write_cmd(0x01);  //清屏

  60.        write_cmd(0x38);  //功能设置

  61.        write_cmd(0x0c);  //显示设置

  62.        write_cmd(0x06);  //输入方式从左到右

  63.        delay(1);

  64. }

  65. /******************************

  66.                      主函数

  67. ******************************/

  68. void main()

  69. {

  70.        uchar i;

  71.        init_lcd1602();

  72.        delay(1);

  73.       

  74.        while(1)

  75.        {

  76.               write_cmd(0x40);    //开始写入你要显示的自定义字符、汉字代码

  77.               for(i=0;i<64;i++)

  78.               {

  79.                      write_date(table[i]);

  80.                      delay(5);

  81.               }

  82.               write_cmd(0x80);    //从第一行第一列开始显示

  83.               for(i=0;i<8;i++)       //显示自定义字符

  84.               {

  85.                      write_date(table1[i]);  

  86.                      delay(5);

  87.               }

  88.               write_cmd(0xc0);   //显示QQ:598852247

  89.               for(i=0;i<12;i++)

  90.               {

  91.                      write_date(table2[i]);

  92.                      delay(5);

  93.               }

  94.        }

  95. }
复制代码


回复

使用道具 举报

ID:109610 发表于 2016-3-18 22:23 | 显示全部楼层
帖子很有用,很好
回复

使用道具 举报

ID:197648 发表于 2017-5-19 15:28 | 显示全部楼层
好 正好需要 谢谢分享
回复

使用道具 举报

ID:258682 发表于 2017-12-7 15:55 | 显示全部楼层
跪求大神解决,烧写上去之后,只能闪亮一下该怎么解决
回复

使用道具 举报

ID:730662 发表于 2020-4-16 16:11 | 显示全部楼层
请问  大神 这个程序  可以从ise实现吗 我用的basys2开发板  引脚约束 不会写
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表