LED点阵显示的VHDL程序代码.docx
LED点阵显示的VHDL程序代码附录 带有注释的VHDL程序代码: - - Design unit: dot_led(display) (Entity and Architectures) - File name : dot_led.vhd - Description: Matrix dot leds display - Limitations: None - System : VHDL'93 - Author : Fan Bishuang - Email : fbshfj - Revision : Version 1.0 16/5/05 - library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; entity dot_led_fanye is port(clk :in std_logic; -system clk(250kHz) set:in bit; R:out std_logic_vector(3 downto 0); -Matrix dot leds row input,for R="0000", the first line is enabled. L:out std_logic_vector(15 downto 0); -Matrix dot leds line input end dot_led_fanye; architecture display of dot_led_fanye is signal clk1:std_logic; signal R_val:std_logic_vector(3 downto 0); signal cnt:integer range 0 to 250000; signal d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15:std_logic_vector(15 downto 0); signal sel:integer range 0 to 8; begin d0<= X"0200"when sel=0 else -“电”字第1行 X"0000"when sel=1 else -“子”字第1行 X"0000"when sel=2 else -“一”字第1行 X"0100"when sel=3 else -“班”字第1行 X"0000"when sel=4 else -“05”字第1行 X"0010"when sel=5 else -“号”字第1行 X"0100"when sel=6 else -“韦”字第1行 X"0200"when sel=7 else -“文”字第1行 X"0000"when sel=8 else -“写”字第1行 X"0000" -否则熄灭第1行所有LED d1<= X"0200"when sel=0 else -“电”字第2行 X"3FF0"when sel=1 else -“子”字第2行 X"0000"when sel=2 else -“一”字第2行 X"0904"when sel=3 else -“班”字第2行 X"0000"when sel=4 else -“05”字第2行 X"1FF8"when sel=5 else -“号”字第2行 X"0100"when sel=6 else -“韦”字第2行 X"0100"when sel=7 else -“文”字第2行 X"7FFE"when sel=8 else -“写”字第2行 X"0000" -否则熄灭第2行所有LED d2<= X"0210"when sel=0 else -“电”字第3行 X"0010"when sel=1 else -“子”字第3行 X"0000"when sel=2 else -“一”字第3行 X"7DFE"when sel=3 else -“班”字第3行 X"3CFE"when sel=4 else -“05”字第3行 X"1010"when sel=5 else -“号”字第3行 X"0104"when sel=6 else -“韦”字第3行 X"0104"when sel=7 else -“文”字第3行 X"4002"when sel=8 else -“写”字第3行 X"0000" -否则熄灭第3行所有LED d3<= X"7FF8"when sel=0 else -“电”字第4行 X"0020"when sel=1 else -“子”字第4行 X"0000"when sel=2 else -“一”字第4行 X"2110"when sel=3 else -“班”字第4行 X"4240"when sel=4 else -“05”字第4行 X"1010"when sel=5 else -“号”字第4行 X"FFFE"when sel=6 else -“韦”字第4行 X"FFFE"when sel=7 else -“文”字第4行 X"8804"when sel=8 else -“写”字第4行 X"0000" -否则熄灭第4行所有LED d4<= X"4210"when sel=0 else -“电”字第5行 X"0040"when sel=1 else -“子”字第5行 X"0000"when sel=2 else -“一”字第5行 X"2510"when sel=3 else -“班”字第5行 X"4240"when sel=4 else -“05”字第5行 X"1010"when sel=5 else -“号”字第5行 X"0100"when sel=6 else -“韦”字第5行 X"1010"when sel=7 else -“文”字第5行 X"0820"when sel=8 else -“写”字第5行 X"0000" -否则熄灭第5行所有LED d5<= X"4210"when sel=0 else -“电”字第6行 X"0180"when sel=1 else -“子”字第6行 X"0000"when sel=2 else -“一”字第6行 X"2510"when sel=3 else -“班”字第6行 X"4240"when sel=4 else -“05”字第6行 X"1FF0"when sel=5 else -“号”字第6行 X"0110"when sel=6 else -“韦”字第6行 X"0810"when sel=7 else -“文”字第6行 X"0FF0"when sel=8 else -“写”字第6行 X"0000" -否则熄灭第6行所有LED d6<= X"7FF0"when sel=0 else -“电”字第7行 X"0104"when sel=1 else -“子”字第7行 X"0004"when sel=2 else -“一”字第7行 X"2510"when sel=3 else -“班”字第7行 X"427C"when sel=4 else -“05”字第7行 X"0004"when sel=5 else -“号”字第7行 X"3FF8"when sel=6 else -“韦”字第7行 X"0820"when sel=7 else -“文”字第7行 X"0800"when sel=8 else -“写”字第7行 X"0000" -否则熄灭第7行所有LED d7<= X"4210"when sel=0 else -“电”字第8行 X"FFFE"when sel=1 else -“子”字第8行 X"FFFE"when sel=2 else -“一”字第8行 X"F57C"when sel=3 else -“班”字第8行 X"4202"when sel=4 else -“05”字第8行 X"FFFE"when sel=5 else -“号”字第8行 X"0100"when sel=6 else -“韦”字第8行 X"0420"when sel=7 else -“文”字第8行 X"0808"when sel=8 else -“写”字第8行 X"0000" -否则熄灭第8行所有LED d8<= X"4210"when sel=0 else -“电”字第9行 X"0100"when sel=1 else -“子”字第9行 X"0000"when sel=2 else -“一”字第9行 X"2510"when sel=3 else -“班”字第9行 X"4202"when sel=4 else -“05”字第9行 X"0400"when sel=5 else -“号”字第9行 X"0104"when sel=6 else -“韦”字第9行 X"0440"when sel=7 else -“文”字第9行 X"0FFC"when sel=8 else -“写”字第9行 X"0000" -否则熄灭第9行所有LED d9<= X"7FF0"when sel=0 else -“电”字第10行 X"0100"when sel=1 else -“子”字第10行 X"0000"when sel=2 else -“一”字第10行 X"2910"when sel=3 else -“班”字第10行 X"4202"when sel=4 else -“05”字第10行 X"0810"when sel=5 else -“号”字第10行 X"7FFE"when sel=6 else -“韦”字第10行 X"0280"when sel=7 else -“文”字第10行 X"0008"when sel=8 else -“写”字第10行 X"0000" -否则熄灭第10行所有LED d10<= X"4210"when sel=0 else -“电”字第11行 X"0100"when sel=1 else -“子”字第11行 X"0000"when sel=2 else -“一”字第11行 X"2110"when sel=3 else -“班”字第11行 X"4202"when sel=4 else -“05”字第11行 X"1FF8"when sel=5 else -“号”字第11行 X"0104"when sel=6 else -“韦”字第11行 X"0100"when sel=7 else -“文”字第11行 X"0048"when sel=8 else -“写”字第11行 X"0000" -否则熄灭第11行所有LED d11<= X"0200"when sel=0 else -“电”字第12行 X"0100"when sel=1 else -“子”字第12行 X"0000"when sel=2 else -“一”字第12行 X"2210"when sel=3 else -“班”字第12行 X"4202"when sel=4 else -“05”字第12行 X"0010"when sel=5 else -“号”字第12行 X"0104"when sel=6 else -“韦”字第12行 X"0280"when sel=7 else -“文”字第12行 X"7FE8"when sel=8 else -“写”字第12行 X"0000" -否则熄灭第12行所有LED d12<= X"0204"when sel=0 else -“电”字第13行 X"0100"when sel=1 else -“子”字第13行 X"0000"when sel=2 else -“一”字第13行 X"3A10"when sel=3 else -“班”字第13行 X"4242"when sel=4 else -“05”字第13行 X"0010"when sel=5 else -“号”字第13行 X"0104"when sel=6 else -“韦”字第13行 X"0460"when sel=7 else -“文”字第13行 X"0008"when sel=8 else -“写”字第13行 X"0000" -否则熄灭第13行所有LED d13<= X"0204"when sel=0 else -“电”字第14行 X"0100"when sel=1 else -“子”字第14行 X"0000"when sel=2 else -“一”字第14行 X"E214"when sel=3 else -“班”字第14行 X"3C3C"when sel=4 else -“05”字第14行 X"0010"when sel=5 else -“号”字第14行 X"0128"when sel=6 else -“韦”字第14行 X"0810"when sel=7 else -“文”字第14行 X"0008"when sel=8 else -“写”字第14行 X"0000" -否则熄灭第14行所有LED d14<= X"01FC"when sel=0 else -“电”字第15行 X"0500"when sel=1 else -“子”字第15行 X"0000"when sel=2 else -“一”字第15行 X"44FE"when sel=3 else -“班”字第15行 X"0000"when sel=4 else -“05”字第15行 X"00A0"when sel=5 else -“号”字第15行 X"0110"when sel=6 else -“韦”字第15行 X"300E"when sel=7 else -“文”字第15行 X"0050"when sel=8 else -“写”字第15行 X"0000" -否则熄灭第15行所有LED d15<= X"0000"when sel=0 else -“电”字第16行 X"0200"when sel=1 else -“子”字第16行 X"0000"when sel=2 else -“一”字第16行 X"0800"when sel=3 else -“班”字第16行 X"0000"when sel=4 else -“05”字第16行 X"0040"when sel=5 else -“号”字第16行 X"0100"when sel=6 else -“韦”字第16行 X"C004"when sel=7 else -“文”字第16行 X"0020"when sel=8 else -“写”字第16行 X"0000" -否则熄灭第16行所有LED process(clk,set) begin if(set='0')then -如果功能键没按下,则所有LED全灭 L<=X"0000" R_val<="0000" elsif(clk'event and clk='1')then -每0.004ms扫描一次 if( R_val="1111")then R_val<="0000" -当扫描完一遍,再从头扫描 else R_val<=R_val+'1' -扫完一行,再扫下一行 end if; if(cnt=250000)then -1s的时间到时,计数器清零 cnt<=0; if(sel=8)then -当显示完9个字,再从第一个字开始显示 sel<=0; else sel<=sel+1; -显示完一个字,再显示下一个字 end if; else cnt<=cnt+1; -还没到达1s时,继续计数 end if; case R_val is when "0000"=>L<=d0; -当扫描第1列时,送字模的第1行像素信息 when "0001"=>L<=d1; -当扫描第2列时,送字模的第2行像素信息 when "0010"=>L<=d2; -当扫描第3列时,送字模的第3行像素信息 when "0011"=>L<=d3; -当扫描第4列时,送字模的第4行像素信息 when "0100"=>L<=d4; -当扫描第5列时,送字模的第5行像素信息 when "0101"=>L<=d5; -当扫描第6列时,送字模的第6行像素信息 when "0110"=>L<=d6; -当扫描第7列时,送字模的第7行像素信息 when "0111"=>L<=d7; -当扫描第8列时,送字模的第8行像素信息 when "1000"=>L<=d8; -当扫描第9列时,送字模的第9行像素信息 when "1001"=>L<=d9; -当扫描第10列时,送字模的第10行像素信息 when "1010"=>L<=d10; -当扫描第11列时,送字模的第11行像素信息 when "1011"=>L<=d11; -当扫描第12列时,送字模的第12行像素信息 when "1100"=>L<=d12; -当扫描第13列时,送字模的第13行像素信息 when "1101"=>L<=d13; -当扫描第14列时,送字模的第14行像素信息 when "1110"=>L<=d14; -当扫描第15列时,送字模的第15行像素信息 when "1111"=>L<=d15; -当扫描第16列时,送字模的第16行像素信息 when others=>null; end case; R<=R_val; end if; end process; end display;