1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án môn học 2: Tìm hiểu về DE 2 – Lập trình giao tiếp bàn phím hiển thị lên màn hình LCD

40 87 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 1,09 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đồ án môn học 2 Tìm hiểu về DE 2 – Lập trình giao tiếp bàn phím hiển thị lên màn hình LCD được thuyết minh với các nội dung: Giới thiệu về Altera DE 2 Board, tìm hiểu module LCD, PS2 – KEYBOARD, thiết kế giao tiếp LCD và bàn phím. Mời các bạn tham khảo tài liệu.

Trang 2

Ph n 1 : Gi i thi u v  Altera DE 2 Board ớ ệ ề

Trang 3

 24­bit CD­quality audio CODEC with line­in, line­out, and microphone­in jacks. 

2.1. Gi i thi u s  lớ ệ ơ ược v  LCD

Module LCD c a DE 2 là m t màn hình LCD hai hàng, m i hàng 16 kí t ủ ộ ỗ ự

S  đ  k t n i ph n c ng LCDơ ồ ế ố ầ ứ

Trang 5

LCD core kh i t o LCD controller khi thi t l p và giao ti p v i nó. LCDở ạ ế ậ ế ớ  core s  cung c p giao di n s  đ  b  nh  cho ngẽ ấ ệ ơ ồ ộ ớ ườ ử ụi s  d ng đi u khi n và vi tề ể ế  lên màn hình LCD b ng các vi t lên đ a ch  b  nh  đã bi t.ằ ế ị ỉ ộ ớ ế

LCD core cung c p xung block t n s  50 MHz trên Board DE 1 và DE 2.ấ ầ ố

Trang 6

 Chân ch n thanh ghi RS (Register Select)ọ : chân RS được dùng đ  ch nể ọ  thanh ghi này nh  sau: ư

 N u RS = 0 thì thanh ghi mà l nh đế ệ ược ch n đ  cho phép ngọ ể ười dùng 

g i m t l nh ch ng h n nh  xóa màn hình, đ a con tr  v  đ u dòng.ử ộ ệ ẳ ạ ư ư ỏ ề ầ

 N u RS = 1 thì thanh ghi d  li u đế ữ ệ ược ch n cho phép ngọ ười dùng g i dử ữ 

li u c n hi n th  trên LCD.ệ ầ ể ị

  Chân đ c/ghi (R/W):ọ   cho phép người dùng ghi thông tin lên LCD khi R/W=0 ho c đ c thông tin t  nó khi R/W=1ặ ọ ừ

 Chân cho phép E (Enable): được s  d ng b i LCD đ  ch t thông tinử ụ ở ể ố  

hi n h u trên chân d  li u c a nó. Khi d  li u đệ ữ ữ ệ ủ ữ ệ ược cung c p đ n chân d  li uấ ế ữ ệ  thì m t xung m c cao xu ng th p ph i độ ứ ố ấ ả ược áp đ n chân này đ  LCD ch t dế ể ố ữ 

li u trên các chân d  li u. ệ ữ ệ

Trang 7

Các câu l nh c  b n đi u khi n LCD:ệ ơ ả ề ể

Các câu l nh c  b n c a LCD là kh i t o màn hình, xóa màn hình, đ t conệ ơ ả ủ ở ạ ặ  

tr , d ch con tr , d ch màn hình, v.v… Các l nh này l u trong m t th  vi n:ỏ ị ỏ ị ệ ư ộ ư ệ

  Vi t các ký t  trong b  đ m đế ự ộ ệ ược tr  đ n b i ptr cho LCD,b t đ u tỏ ế ở ắ ầ ừ 

ch  con tr    th i đi m hi n t i:ỗ ỏ ở ờ ể ệ ạ

int alt_up_character_lcd_write(alt_up_character_lcd_dev

*lcd, const char *ptr, unsigned int len)

  Đ t v  trí con tr :ặ ị ỏ

Trang 9

D  li u đữ ệ ược truy n n i ti p t ng bit theo khung truy n 11 bit g m:ề ố ế ừ ề ồ

Trang 10

B  đi u khi n bàn phím thộ ề ể ường là chip 8042, 8048, 8049, 8741, 8742, 

6868, 6805

Khi chip đi u khi n nh n đề ể ậ ược yêu c u t  bàn phím, chip này g i tín hi uầ ừ ử ệ  

ng t IRQ1 và truy n d  li u vào CPU.ắ ề ữ ệ

3.2. Mã quét bàn phím (Scan code)

  Khi nh n hay nh  1 phím, b  x  lý bàn phím g i đ n PC mã quét (scan­ấ ả ộ ử ử ếcode) c a phím đủ ược nh n.ấ

  Khi phím được nh n, mã này g i là ấ ọ make­code

 Khi phím được nh , mã này g i là ả ọ break­code

Break­code g m 2 byte: byte đ u là F0, byte k  là mã ồ ầ ế make­code

Ví d : ụ

nh n SHIFT: make­code = 12 ấ

Nh n A:ấ   make­code = 1C

Trang 11

  Bàn phím PS2 giao ti p b ng giao th c n i ti p b t đ ng b  2 chi uế ằ ứ ố ế ấ ồ ộ ề

  Xung clock được phát b i bàn phím, t n s  kho ng 10­16.7kHzở ầ ố ả

Các tr ng thái ho t đ ng:ạ ạ ộ

  Data=high, clock=high: tr ng thái r nh.ạ ả

  Data=high, clock=low: tr ng thái c m giao ti p.ạ ấ ế

  Data=low, clock=high: tr ng thái máy ch  đạ ủ ược yêu c u truy n d  li u.ầ ề ữ ệ

N u máy ch  mu n truy n d  li u, nó ph i c m giao ti p t  bàn phímế ủ ố ề ữ ệ ả ấ ế ừ  

b ng cách kéo clock xu ng th p, sau đó kéo Data xu ng m c th p và gi i phóngằ ố ấ ố ứ ấ ả  cho clock

Data được truy n theo khung d  li u g m 11­12bit nh  sau:ề ữ ệ ồ ư

Trang 12

  Ki m tra bus đang   tr ng thái r nh.ể ở ạ ả

  Clock   m c cao ít nh t 50us trở ứ ấ ước khi bàn phím g i data.ử

  Bàn phím g i data t ng khung d  li u 11bit.ử ừ ữ ệ

  D  li u đữ ệ ược đ c t i c nh xu ng c a clock.ọ ạ ạ ố ủ

  Máy ch  có th  c m giao ti p b ng cách kéo clock xu ng th p.ủ ể ấ ế ằ ố ấ

  Khi clock được gi i phóng, bàn phím l i truy n ti p d  li u ch a hoànả ạ ề ế ữ ệ ư  

ch nh.ỉ

3.2.2. Truy n d  li u t  máy ch  đ n bàn phím ề ữ ệ ừ ủ ế

Các bước th c hi n:ự ệ

 Máy ch  c m truy n t  bàn phím đ n b ng cách kéo clock xu ng th p.ủ ấ ề ừ ế ằ ố ấ

 Máy ch  kéo data xu ng th p và gi i phóng clock báo hi u bàn phím phátủ ố ấ ả ệ  xung clock b t đ u truy n d  li u.ắ ầ ề ữ ệ

 D  li u đữ ệ ược đ c t i c nh lên c a clock.ọ ạ ạ ủ

Trang 13

 Sau khi bàn phím nh n stop bit nó s  truy n tín hi u ACK đ n máy chậ ẽ ề ệ ế ủ 

 S  d ng gi i thu t phát hi n c nh xu ng c a xung clock keyboard.ử ụ ả ậ ệ ạ ố ủ

  C nh xu ng c a   ps2c cho bi t bit   ps2d   là h p l  và có th  đạ ố ủ ế ở ợ ệ ể ượ  c

nh n. ậ

Trang 14

L u đ  quá trình nh n d  li u t  bàn phímư ồ ậ ữ ệ ừ

Trang 15

 Dùng đ  chuy n d  li u t  bàn phím ra thành ể ể ữ ệ ừ make code và break code

 Cho ta bi t phím đang đế ược nh n hay nh ấ ả

  S  d ng gi i thu t l y 3 byte sau cùng khi nh  phím thông qua bi nử ụ ả ậ ấ ả ế  got_code_tick báo đã nh  phím.ả

Code:

 ps2_rx receiver

  (.clock(clock),.reset(reset),.ps2d(ps2d),.ps2c(ps2c),.rx_en(1'b1), .rx_done_tick(scan_done_tick), .dout(dout)); 

Trang 18

4.1. Các bước th c hi n trong Quartusự ệ

T o project doan.vhdl trong quartus.ạ

Trong SOPC gán các đ a ch  t  đ ng cho các IP:ị ỉ ự ộ

Cpu_0 (Ch n Nios II/e,memory ọ  :sdram_0)

Trang 19

Add các file v a t o ra t  SOPC vào module giaotiep.vhdl r i biên d chừ ạ ừ ồ ị  

Trang 21

      ­­ the_sdram_0

       zs_addr_from_the_sdram_0 : OUT STD_LOGIC_VECTOR (11   DOWNTO 0);

      zs_ba_from_the_sdram_0 : OUT STD_LOGIC_VECTOR (1 DOWNTO   0);

      zs_cas_n_from_the_sdram_0 : OUT STD_LOGIC;

      zs_cke_from_the_sdram_0 : OUT STD_LOGIC;

      zs_cs_n_from_the_sdram_0 : OUT STD_LOGIC;

      zs_dq_to_and_from_the_sdram_0 : INOUT STD_LOGIC_VECTOR (15   DOWNTO 0);

       zs_dqm_from_the_sdram_0 : OUT STD_LOGIC_VECTOR (1   DOWNTO 0);

      zs_ras_n_from_the_sdram_0 : OUT STD_LOGIC;

      zs_we_n_from_the_sdram_0 : OUT STD_LOGIC;

      ­­ the_up_avalon_character_lcd_0

      LCD_BLON_from_the_up_avalon_character_lcd_0   :   OUT   STD_LOGIC;

      LCD_DATA_to_and_from_the_up_avalon_character_lcd_0 : INOUT   STD_LOGIC_VECTOR (7 DOWNTO 0);

      LCD_EN_from_the_up_avalon_character_lcd_0 : OUT STD_LOGIC;       LCD_ON_from_the_up_avalon_character_lcd_0 : OUT STD_LOGIC;       LCD_RS_from_the_up_avalon_character_lcd_0 : OUT STD_LOGIC;       LCD_RW_from_the_up_avalon_character_lcd_0 : OUT STD_LOGIC;       ­­ the_up_avalon_ps2_0

Trang 22

      PS2_CLK_to_and_from_the_up_avalon_ps2_0 : INOUT STD_LOGIC;       PS2_DAT_to_and_from_the_up_avalon_ps2_0 : INOUT STD_LOGIC       );

Trang 24

4.2. Các bước th c hi n trong Nios IIự ệ

T o project <ten>.c và import các file h  tr  vào:ạ ỗ ợaltera_up_avalon_character_lcd.c

Trang 25

char_lcd_dev = alt_up_character_lcd_open_dev ("/dev/LCD_0"); alt_up_character_lcd_init (char_lcd_dev);

Trang 28

      

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row2);          break;

case 0x23:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row3);          break;

case 0x24:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row4);          break;

case 0x2B:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row5);          break;

case 0x34:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);

Trang 29

case 0x33:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row7);          break;

case 0x43:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row8);          break;

case 0x3b:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row9);          break;

case 0x42:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row10);          break;

Trang 30

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row11);          break;

case 0x3a:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row12);          break;

case 0x31:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row13);          break;

case 0x44:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row14);          break;

case 0x4d:

Trang 31

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row15);          break;

case 0x15:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row16);          break;

case 0x2d:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row17);          break;

case 0x1b:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row18);          break;

case 0x2c:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);

Trang 32

         alt_up_character_lcd_string(char_lcd_dev, second_row19);          break;

case 0x3c:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row20);          break;

case 0x2a:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row21);          break;

case 0x1d:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row22);          break;

case 0x22:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row23);          break;

Trang 33

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row24);          break;

case 0x1a:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row25);          break;

case 0x45:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row26);          break;

case 0x16:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row27);          break;

case 0x1e:

Trang 34

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row28);          break;

case 0x26:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row29);          break;

case 0x25:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row30);          break;

case 0x2e:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row31);          break;

case 0x36:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);

Trang 35

case 0x3d:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row33);          break;

case 0x3e:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row34);          break;

case 0x46:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row35);          break;

case 0x0e:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row36);          break;

Trang 36

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row37);          break;

case 0x55:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row38);          break;

case 0x54:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row39);          break;

case 0x5b:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row40);          break;

case 0x5d:

Trang 37

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row41);          break;

case 0x4c:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row42);          break;

case 0x52:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row43);          break;

case 0x41:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row44);          break;

case 0x49:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);

Trang 38

         alt_up_character_lcd_string(char_lcd_dev, second_row45);          break;

case 0x4a:

         

         alt_up_character_lcd_set_cursor_pos(char_lcd_dev, 0, 1);          alt_up_character_lcd_string(char_lcd_dev, second_row46);          break;

Trang 39

Tài li u tham kh o ệ ả

1) FPGA prototyping by Verilog examples­Pong P. Chu 

Cleveland State University

Trang 40

3) PS 2 Core for Altera DE 2 board

4) Character LCD Core for Altera DE 2/DE 1 Board

Ngày đăng: 13/01/2020, 17:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w