音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

關(guān)于鍵盤程序設(shè)計的一點問題~~

作者:sdsd0544 欄目:EDA技術(shù)
關(guān)于鍵盤程序設(shè)計的一點問題~~
我用Quartus2II的VHDL設(shè)計一個鍵盤功能程序,寫在UP2上用外接顯示器實現(xiàn),我按下什么鍵,顯示器就顯示我按的字母,但是我現(xiàn)在的程序只能到我按下什么鍵,屏幕上顯示的是鍵的代碼的最后2個字節(jié),并不是內(nèi)容,比如我按“A”,屏幕上顯示“1C”,并不是“A”。
我現(xiàn)在應(yīng)該怎么做呢?


2樓: >>參與討論
sdsd0544
關(guān)于鍵盤程序設(shè)計的一點問題~~
這個是字符得char_rom

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
LIBRARY lpm;
USE lpm.lpm_components.ALL;
ENTITY Char_ROM IS
PORT(character_address: INSTD_LOGIC_VECTOR(5 DOWNTO 0);
font_row, font_col: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
rom_mux_output: OUTSTD_LOGIC);
END Char_ROM;

ARCHITECTURE a OF Char_ROM IS
SIGNALrom_data: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNALrom_address: STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
-- Small 8 by 8 Character Generator ROM for VIDEO DISPLAY
-- Each character is 8 8-bits words of pixel data
char_gen_rom: lpm_rom
GENERIC MAP ( lpm_widthad => 9,
lpm_numwords => 512,
lpm_outdata => "UNREGISTERED",
lpm_address_control => "UNREGISTERED",
-- Reads in mif file for character generator font data
lpm_file => "tcgrom.mif",
lpm_width => 8 )
PORT MAP ( address => rom_address, q => rom_data);

rom_address <= character_address & font_row;
-- Mux to pick off correct rom data bit from 8-bit word
-- for on screen character generation
rom_mux_output <= rom_data ( (CONV_INTEGER(NOT font_col(2 downto 0))));

END a;

這個是鍵盤得
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY KEYBOARD IS
PORT(KEYBOARD_clk, KEYBOARD_data, clock_25Mhz ,
reset, read: INSTD_LOGIC;
scan_code: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);
scan_ready: OUTSTD_LOGIC);
END KEYBOARD;

ARCHITECTURE a OF KEYBOARD IS
SIGNAL INCNT: std_logic_vector(3 downto 0);
SIGNAL SHIFTIN : std_logic_vector(8 downto 0);
SIGNAL READ_CHAR : std_logic;
SIGNAL INFLAG, ready_set: std_logic;
SIGNAL KEYBOARD_clk_FILTERed : std_logic;
SIGNAL FILTER : std_logic_vector(7 downto 0);
BEGIN

PROCESS (read, ready_set)
BEGIN
IF read = '1' THEN scan_ready <= '0';
ELSIF ready_set'EVENT and ready_set = '1' THEN
scan_ready <= '1';
END IF;
END PROCESS;


--This PROCESS FILTERs the raw clock signal coming from the KEYBOARD using a shift register and two AND gates
Clock_FILTER: PROCESS
BEGIN
WAIT UNTIL clock_25Mhz'EVENT AND clock_25Mhz= '1';
FILTER (6 DOWNTO 0) <= FILTER(7 DOWNTO 1) ;
FILTER(7) <= KEYBOARD_clk;
IF FILTER = "11111111" THEN KEYBOARD_clk_FILTERed <= '1';
ELSIF FILTER= "00000000" THEN KEYBOARD_clk_FILTERed <= '0';
END IF;
END PROCESS Clock_FILTER;


--This PROCESS reads in serial data coming from the terminal
PROCESS
BEGIN
WAIT UNTIL (KEYBOARD_CLK_FILTERed'EVENT AND KEYBOARD_CLK_FILTERed='1');
IF RESET='1' THEN
INCNT <= "0000";
READ_CHAR <= '0';
ELSE
IF KEYBOARD_DATA='0' AND READ_CHAR='0' THEN
READ_CHAR<= '1';
ready_set<= '0';
ELSE
-- Shift in next 8 data bits to assemble a scan code
IF READ_CHAR = '1' THEN
IF INCNT < "1001" THEN
INCNT <= INCNT + 1;
SHIFTIN(7 DOWNTO 0) <= SHIFTIN(8 DOWNTO 1);
SHIFTIN(8) <= KEYBOARD_DATA;
ready_set <= '0';
-- End of scan code character, so set flags and exit loop
ELSE
scan_code <= SHIFTIN(7 DOWNTO 0);
READ_CHAR<='0';
ready_set <= '1';
INCNT <= "0000";
END IF;
END IF;
END IF;
END IF;
END PROCESS;
END a;
        

這個是VGA得
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY VGA_SYNC IS
PORT(clock_25Mhz, red, GREEN, BLUE: INSTD_LOGIC;
red_out, GREEN_out, BLUE_out, horiz_sync_out, vert_sync_out: OUTSTD_LOGIC;
pixel_row, pixel_column: OUT STD_LOGIC_VECTOR(10 DOWNTO 0));
END VGA_SYNC;
ARCHITECTURE a OF VGA_SYNC IS
SIGNAL horiz_sync, vert_sync : STD_LOGIC;
SIGNAL VIDEO_on, VIDEO_on_v, VIDEO_on_h : STD_LOGIC;
SIGNAL h_count, v_count :STD_LOGIC_VECTOR(10 DOWNTO 0);

BEGIN

-- VIDEO_on is high ONLY when RGB data is DISPLAYed
VIDEO_on <= VIDEO_on_H AND VIDEO_on_V;


PROCESS
BEGIN
WAIT UNTIL(clock_25Mhz'EVENT) AND (clock_25Mhz='1');

--Generate Horizontal and Vertical Timing Signals for VIDEO Signal
-- H_count counts pixels (640 + extra time for sync signals)
--
-- Horiz_sync ------------------------------------__________--------
-- H_count 0 640 659 755 799
--
IF (h_count = 799) THEN
h_count <= "00000000000";
ELSE
h_count <= h_count + 1;
END IF;

--Generate Horizontal Sync Signal using H_count
IF (h_count <= 755) AND (h_count >= 659) THEN
horiz_sync <= '0';
ELSE
horiz_sync <= '1';
END IF;

--V_count counts rows of pixels (480 + extra time for sync signals)
--
-- Vert_sync -----------------------------------------------_______------------
-- V_count 0 480 493-494 524
--
IF (v_count >= 524) AND (h_count >= 699) THEN
v_count <= "00000000000";
ELSIF (h_count = 699) THEN
v_count <= v_count + 1;
END IF;

-- Generate Vertical Sync Signal using V_count
IF (v_count <= 494) AND (v_count >= 493) THEN
vert_sync <= '0';
ELSE
vert_sync <= '1';
END IF;

-- Generate VIDEO on Screen Signals for Pixel Data
IF (h_count <= 639) THEN
VIDEO_on_h <= '1';
pixel_column <= h_count;
ELSE
VIDEO_on_h <= '0';
END IF;

IF (v_count <= 479) THEN
VIDEO_on_v <= '1';
pixel_row <= v_count;
ELSE
VIDEO_on_v <= '0';
END IF;

-- Put all VIDEO signals through DFFs to elminate any delays that cause a blurry image
red_out <= red AND VIDEO_on;
GREEN_out <= GREEN AND VIDEO_on;
BLUE_out <= BLUE AND VIDEO_on;
horiz_sync_out <= horiz_sync;
vert_sync_out <= vert_sync;

END PROCESS;
END a;

這個是上層得key_DISPLAY
-- KEYBOARD VIDEO DISPLAY
-- UP1PACK - UP1core PACKAGE.html">PACKAGE
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
USE IEEE.STD_LOGIC_UNSIGNED.all;
LIBRARY lpm;
USE lpm.lpm_components.ALL;
PACKAGE up1core IS
COMPONENT dec_7seg
PORT(hex_digit: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
segment_a, segment_b, segment_c, segment_d,
segment_e, segment_f, segment_g : OUT STD_LOGIC);
END COMPONENT;
COMPONENT debounce
PORT(pb, clock_100Hz : INSTD_LOGIC;
pb_debounced: OUTSTD_LOGIC);
END COMPONENT;
COMPONENT onepulse
PORT(pb_debounced, clock: INSTD_LOGIC;
pb_single_pulse: OUTSTD_LOGIC);
END COMPONENT;
COMPONENT clk_div
PORT(clock_25Mhz: INSTD_LOGIC;
clock_1MHz: OUTSTD_LOGIC;
clock_100KHz: OUTSTD_LOGIC;
clock_10KHz: OUTSTD_LOGIC;
clock_1KHz: OUTSTD_LOGIC;
clock_100Hz: OUTSTD_LOGIC;
clock_10Hz: OUTSTD_LOGIC;
clock_1Hz: OUTSTD_LOGIC);
END COMPONENT;
COMPONENT vga_sync
PORT(clock_25Mhz, red, GREEN, BLUE: INSTD_LOGIC;
red_out, GREEN_out, BLUE_out: OUT STD_LOGIC;
horiz_sync_out, vert_sync_out: OUT STD_LOGIC;
pixel_row, pixel_column: OUT STD_LOGIC_VECTOR(10 DOWNTO 0));
END COMPONENT;
COMPONENT char_rom
PORT(character_address: INSTD_LOGIC_VECTOR(5 DOWNTO 0);
font_row, font_col: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
rom_mux_output: OUTSTD_LOGIC);
END COMPONENT;
COMPONENT KEYBOARD
PORT(KEYBOARD_clk, KEYBOARD_data, clock_25Mhz ,
reset, read: INSTD_LOGIC;
scan_code: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);
scan_ready: OUTSTD_LOGIC);
END COMPONENT;
COMPONENT mouse
PORT( clock_25Mhz, reset : IN std_logic;
mouse_data: INOUT std_logic;
mouse_clk : INOUT std_logic;
left_button, right_button : OUT std_logic;
mouse_cursor_row, mouse_cursor_column : OUT std_logic_vector(9 DOWNTO 0));
END COMPONENT;
END up1core;


-- Bouncing BALL VIDEO
LIBRARY IEEE;
USE IEE
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
郁悶痛苦中求助,請各路好手給點意見。
CPLD實現(xiàn)AD功能?
JTAG電纜下載出錯
大家?guī)兔?eda開發(fā)板設(shè)計 謝謝。
請問cpld的時鐘信號需要從外部輸入嗎?選多大頻率?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號