⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led4bits7seg.vhd

📁 基于CPLD的4X4键盘输入+液晶显示程序
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity led4bits7seg is
 port( clk: in std_logic;
		keypress: in std_logic;
		din: in std_logic_vector(3 downto 0);
		RST:IN STD_LOGIC;
		ENTER:IN STD_LOGIC;
		data:out std_logic_vector(8 downto 0);
		e:out std_logic);
 end led4bits7seg;

architecture rt1 of led4bits7seg is
	signal temp:std_logic_vector(3 downto 0);
	signal count:std_logic_vector(1 downto 0);
	signal islock:std_logic;
	signal num:integer range 0 to 500;
	signal QW,BW,SW,W,q,b,s,g:integer range 0 to 31;
	signal total:integer;
	signal change:std_logic;
	signal clr:std_logic;
	signal timecount:integer range 0 to 15;
	SIGNAL LCDSTATE,STATE:INTEGER RANGE 0 TO 15;
begin

 process(keypress,clr)
 begin
	IF ENTER='0' THEN
			TOTAL<=Q*1000+B*100+S*10+G;
			QW<=16;	BW<=16;	SW<=16;	W<=16;
			Q<=16;	B<=16;	S<=16;	G<=16;
	ELSE	if clr='1' then change<='0';
			ELSE if keypress'event and keypress='1' then
					--IF	(DIN="1010"OR DIN="1011" OR DIN="1100" 
					--		OR DIN="1101" 	OR DIN="1110" 	OR DIN="1111")
					--THEN NULL;
					--ELSE
 						QW<=BW;	BW<=SW;	SW<=W;	W<=Q;
						q<=b;	b<=s;	s<=g;
	 					g<=conv_integer(din);
						change<='1';
					--END IF;
				END IF;
			end if;
	END IF;		
 end process;	

 process(clk,change)
 begin
	if clk'event and clk = '1' then
		IF RST='0' THEN 
				STATE<=0;
				LCDSTATE<=0;
				TIMECOUNT<=0;
		ELSE 
			CASE LCDSTATE IS
			WHEN 0=>
				CASE STATE IS
					WHEN 0=> DATA<="000111000";    --38H,显示模示设置
					WHEN 1=> DATA<="000111000";    --08h,关闭显示
					WHEN 2=> DATA<="000111000";    --01h,显示清屏
					WHEN 3=> DATA<="000000001";    --06h,显示光标移动设置
					WHEN 4=> DATA<="000111000";		--0001 S/C R/L XX  
					WHEN 5=> DATA<="000000110";
					WHEN 6=> DATA<="000001111";
					WHEN OTHERS=> DATA<="000000000";
				END CASE;
				IF STATE=7 THEN STATE<=0;
								LCDSTATE<=1;
				ELSE 
					IF TIMECOUNT=5 THEN	E<='1';	END IF;
					IF TIMECOUNT=9 THEN E<='0';	END IF;
					IF TIMECOUNT=10 THEN
							TIMECOUNT<=0;
							STATE<=STATE+1;
					ELSE TIMECOUNT<=TIMECOUNT+1;
					END IF;
				END IF;
				
			WHEN 1=>	
				if change='1' then
				 	CASE STATE IS
						WHEN 0=> DATA<="01"&conv_std_logic_vector(16#48#,7);   --38H,显示模示设置
						WHEN 1=> IF QW=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(qW,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 2=> IF BW=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(BW,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 3=> IF SW=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(SW,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 4=> IF W=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(W,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 5=> IF Q=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(Q,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 6=> IF B=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(B,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 7=> IF S=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(S,8)+16#30#);    --08h,关闭显示
								END IF;
						WHEN 8=> IF G=16 THEN DATA<="100100000";
								ELSE DATA<="1"&(conv_std_logic_vector(G,8)+16#30#);    --08h,关闭显示
								END IF;
					
					
						when others=> data<=(others=>'0');
					END CASE;
					IF STATE=9 THEN CLR<='1';
									STATE<=0;								
					ELSE 
						IF TIMECOUNT=5 THEN	E<='1';	END IF;
						IF TIMECOUNT=9 THEN E<='0';	END IF;
						IF TIMECOUNT=10 THEN
							TIMECOUNT<=0;
							STATE<=STATE+1;
						ELSE TIMECOUNT<=TIMECOUNT+1;
						END IF;
					END IF;
				ELSE CLR<='0';
				end if;
				
			WHEN OTHERS=> LCDSTATE<=1;
			END CASE;
		END IF;
	END IF;
	end process;

end rt1;
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -