Você está na página 1de 26

UNIVERSIDADE FEDERAL DE SERGIPE CENTRO DE CINCIAS EXATAS E TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELTRICA

DAMI DRIA NARAYANA DUARTE JEFFERSON FRANA SANTOS LUIZ MIRANDA CAVALCANTE NETO

COMUNICAO TECLADO PS/2 - DISPLAY LCD VIA FPGA

So Cristvo SE 1 de julho de 2011

DAMI DRIA NARAYANA DUARTE JEFFERSON FRANA SANTOS LUIZ MIRANDA CAVALCANTE NETO

COMUNICAO TECLADO PS/2 - DISPLAY LCD VIA FPGA

Relatrio apresentado como requisito obrigatrio para compor a terceira nota da disciplina Sistemas Digitais do curso de graduao em Engenharia Eltrica, ministrada pelo Prof. Dr. Antnio Ramirez Hidalgo.

Prof. Dr. Antnio Ramirez Hidalgo Universidade Federal de Sergipe

RESUMO

Neste relatrio mostrado como utilizando o FPGA Xilinx Spartan 3E 1200 foi possvel criar um editor de texto rudimentar no display de LCD, com entrada de dados via teclado de desktop com sada PS/2. Os dados so fornecidos na forma serial pelo teclado e so convertidos pelo FPGA para a forma paralela onde so dados como entradas do display de LCD. Tambm foram adicionadas teclas especiais como deslocar a mensagem no display infinitamente, reconhecimento de strings e opes de um editor comum de texto como backspace, space, esc (limpa a tela do display), mover mensagem e/ou cursor para esquerda ou para direita.

Palavras chave: Teclado PS/2, display de 7 segmentos, display de LCD.

Lista de figuras

Pgina

Figura 1: Conector PS/2 com a sua pinagem .....................................................7 Figura 2: Teclado adotado nos dias de hoje, com os respectivos cdigos das teclas em hexadecimal .......................................................................................7 Figura 3: Display de LCD 16 x 2 ........................................................................8 Figura 4: Display de 7 segmentos com o ponto decimal ..................................10 Figura 5: Diagrama de blocos do projeto do sistema completo.........................12 Figura 6: Diagrama esquemtico do sistema teclado lcd FPGA ................13

Sumrio

Pgina

1.INTRODUO ................................................................................................ 6 2.OBJETIVOS .................................................................................................... 6 2.1 Objetivos Gerais ................................................................................ 6 2.2 Objetivos Especficos ......................................................................... 6 3. REFERNCIAS BIBLIOGRFICAS ............................................................... 7 3.1 Teclado PS/2 .................................................................................... 7 3.2 Display de LCD ................................................................................. 8 3.3 Display de 7 segmentos .................................................................... 9 4. METODOLOGIA ........................................................................................... 10 4.1 Materiais ......................................................................................... 10 4.2 Mtodos .......................................................................................... 11 5. DESENVOLVIMENTO DO PROJETO .................................................................... 11 5.1 Comunicao Teclado FPGA ........................................................ 13 5.1.1 O display de LCD ......................................................................... 14 5.2- O Processamento ........................................................................... 14 5.2.1 O Bsico ................................................................................... 15 5.2.2 Edio do texto ......................................................................... 15 5.2.3- Deslocamento automtico da mensagem (Letreiro) ................... 16 5.2.4- Reconhecimento de String .......................................................... 16 6.RESULTADOS .............................................................................................. 17 7. CONCLUSES ........................................................................................... 17 8. BIBLIOGRAFIA ........................................................................................... 17 APNDICE ...................................................................................................... 18

1. INTRODUO
Os displays de LCD so dispositivos eletrnicos teis para diversos sistemas integrados, e encontrados facilmente em eletrnicas por todo o pas em diversos formatos. J so fabricados sobre uma placa de circuito impresso com memria pr-progamada proporcionando uma comunicao num nvel um pouco mais elevado, visto que o host no precisa se preocupar com fatores como a multiplexao do display, os tipos de caracteres e vrias outras funes, embutidas agora em diversos cdigos de comando de 8 bits. Pode ser usado como letreiro, interface para troca de informao, interface de comandos gerais associado a qualquer outro sistema digital. Uma vez ajustado o protocolo de comunicao, o display poder ser acoplado a todos esses sistemas e justamente esse o objetivo do projeto, conseguir ajustar o protocolo de comunicao do display com um teclado PS/2, que tambm facilmente encontrado.

2. OBJETIVOS 2.1 Objetivos Gerais

Aplicar os conceitos aprendidos em sala de aula sobre a utilizao da linguagem Verilog HDL (do ingls - Hardware Description Language) na implementao de sistemas digitais utilizando o kit Nexys2 da Digilent.

2.2 Objetivos especficos

Entender e utilizar os protocolos tanto da entrada PS/2 quanto do display LCD.

Permitir uma comunicao coesa do teclado PS/2 com o display LCD 16x2.

Ser criativo e inovador.

3. REFERNCIAS BIBLIOGRFICAS

3.1 Teclado PS/2

O primeiro teclado foi introduzido pela IBM e utilizava uma comunicao serial sncrona unidirecional e possua 83 teclas. Em 1987 junto com o lanamento da srie PS/2, foi introduzido o teclado que at os dias de hoje adotado como padro, com 101 teclas e comunicao sncrona serial e bidirecional e com 17 comandos (fig.2). O teclado PS/2 envia dados serialmente atravs do pino 1 do seu barramento. Esses dados so coordenados por um clock gerado pelo prprio teclado, e que enviado para a o seu destino atravs do pino 5 (fig. 1). As outras configuraes do barramento PS/2 podem ser vistas na figura abaixo.

Figura 1: Conector PS/2 com a sua pinagem.

Figura 2: Teclado adotado nos dias de hoje, com os respectivos cdigos das teclas em hexadecimal.

Cada tecla do teclado tem um cdigo prprio de 8 ou 16 bits dependendo da tecla (fig. 2).

3.2 Display de LCD

Os displays de LCD so interfaces de sada grficas muito utilizadas em sistemas eletrnicos e podem servir para mostrar resultados preliminares ou informaes para manuseio de instrumentos. A forma como so exibidos os sinais de sada so atravs de caracteres ou grficos. Os mdulos LCD (fig. 3) grficos so encontrados com resolues de 122x32, 128x64, 240x64 e 240x128, e geralmente esto disponveis com 20 pinos para conexo. Os displays de LCD podem ter LEDs backligth (com uma iluminao de fundo) para facilitar a visualizao em ambientes escuros. Atravs de pinos especficos possvel alterar a intensidade de luz ou o contraste. No caso do display utilizado havia 16 pinos disponveis: 2 de alimentao (Vcc e Ground), 2 de alimentao de backlight, 3 de instruo (rs, r/w, e) , 8 de dados e um pino para ajuste de contraste.

Figura 3: Display de LCD 16 x 2.

Os caracteres do display seguem a seguinte tabela:

Tabela 1: Tabela de caracteres da biblioteca do display de LCD.

3.3 Display de 7 segmentos

O display de 7 segmentos composto por oito leds na forma de oito (fig.4), e alguns possuem um led a mais, o ponto decimal. Estes displays so utilizados em vrias aplicaes como em automao para exibir uma informao numrica sobre operaes, em rdios-relgio, aparelhos de DVD, etc.

Figura 4: Display de 7 segmentos com o ponto decimal.

4 METODOLOGIA

4.1 Materiais

A tabela 2 contm os materiais utilizados na execuo do projeto de comunicao teclado PS/2 Display de LCD via FPGA.

Item 1. 2. 3. 4. 5. 6. 7. 8. 9.

Quantidade 1 1 1 1 1 1 1 2 -

Descrio Display de LCD 16x2. Teclado de desktop PS/2. Kit FPGA Nexys 2 da Digilent. Computador com sada USB. Potencimetro de 10 k. Protoboard. Fonte de tenso contnua. Cabos banana-banana. Fios diversos

Tabela 2: Materiais utilizados.

10

4.2 Mtodos

O display de LCD foi montado em um protoboard e alimentado com uma fonte de alimentao contnua de 5 V, e um potencimetro foi usado para alterar o contraste da tela do display. Para este projeto foram implementados cdigos na linguagem Verilog usando o programa Xilinx ISE 12.2. Com a linguagem Verilog foram criados mdulos com funes especficas de tal modo que o projeto final era a unio de vrios mdulos menores. Aps criados os cdigos os mesmo foram verificados se possuam a sintaxe correta no Xilinx ISE12.2, caso a resposta fosse positiva a etapa seguinte consistia em testar o sistema na placa Nexys 2. Para gravar o programa gerado pelo Xilinx ISE 12.2 foi usado o gravador da Digilent que pela porta USB se comunica com a placa Nexys 2 e permite a gravao. Depois desta etapa eram feitos testes no sistema teclado-fpga-lcd para verificar se o programa atendia aos requisitos de projeto. Havendo algum erro de funcionamento, os cdigos dos mdulos seriam ajustados e novamente seriam testados no sistema at que o funcionamento ocorresse conforme o esperado.

5. DESENVOLVIMENTO DO PROJETO
O desenvolvimento do projeto consistiu basicamente de duas partes: A comunicao do Teclado com a FPGA e o processamento e envio de dados ao Display LCD. O diagrama de blocos com o completo funcionamento do circuito est na figura 5.

11

Figura 5: Diagrama de blocos do projeto do sistema completo.

O diagrama esquemtico do sistema comunicao teclado PS/2 display de LCD via FPGA est ilustrado na figura 6.

12

Figura 6: Diagrama esquemtico do sistema teclado lcd - FPGA.

5.1 Comunicao Teclado FPGA


Antes de tudo, foi preciso fazer a comunicao de dados entre o Teclado PS/2 e a placa FPGA. Para isso, como o teclado envia dados de forma serial e o Display LCD recebe dados de forma paralela, foi preciso fazer um conversor serial-paralelo. Para realizar a converso o seguinte procedimento foi adotado: sempre que o clock gerado pelo teclado fosse para a borda de descida, o bit mais significativo de um registrador receberia o dado enviado pelo teclado e seria deslocado em um bit para a direita, nessa ordem. Isso foi feito dado que o teclado envia primeiramente os bits menos significativos at o mais significativo. Um segundo clock foi incrementado, o clock de leitura, sendo ele significativamente mais lento que o clock do teclado. Com isso sempre que ele mudasse para a borda de subida, um outro registrador iria receber os dados coletados do registrador do teclado sem grande possibilidade de erro de leitura, dado que as transies do clock do teclado j teriam terminado. Aps todo o procedimento acima, esse ltimo registrador ser mandado para o processamento de dados.

13

5.1.1 O display de LCD


No caso do display de LCD utilizado havia 16 pinos disponveis: 2 de alimentao (Vcc e Ground), 2 de alimentao de backlight, 3 de instruo (rs, r/w, e) , 8 de dados e um pino para ajuste de contraste. O funcionamento do display segue o seguinte procedimento: em toda borda de descida do pino e for para nvel baixo, o display ir ler o que est nos outros pinos (dados, rs e r/w) e dependendo da configurao desses pinos o display ir executar uma tarefa. Caso o pino de rs esteja em nvel lgico 1, o display receber dados (caracteres), caso contrrio receber instrues. Caso o pino r/w esteja em nvel lgico 1 o display ir enviar os dados gravados na sua memria, caso contrrio ele ir receber dados e gravar na sua memria.

5.2 O Processamento
Esta a alma do projeto, nela os dados recebidos pelo teclado so processados e sero devidamente enviados para o display de acordo com a funo que tem pr-definidas. O processamento era executado sempre que o e (pino de enable do display lcd) fosse para nvel baixo. Para isso, foi definido que esse e seria um clock com uma frequncia definida. Todo o processo abaixo regido por esse clock.

5.2.1 O Bsico

Antes de tudo, foi preciso iniciar o display LCD no modo necessrio (2 linhas e com cursor ligado). Para isso, foi feito um lao que executava duas instrues: rs = 0, r/w = 0 e dados = 0F (dados em hexadecimal) essa instruo 14

ligava o cursor de forma piscante; rs = 0, r/w = 0, dados = 38 essa instruo fixava o display no modo de operao de duas linhas, se isso no fosse feito apenas uma linha do display seria ativada. A parte bsica do projeto consistia em digitar algo no teclado e aparecer no lcd. Para isso, tudo que precisava ser feito era definir o rs = 1, r/w = 0 e converter o valor lido pelo conversor serial-paralelo para o cdigo do caractere que o usurio desejasse utilizar seguindo a tabela mostrada na seo 3.2 do display de LCD.

5.2.2 Edio do texto

Foi implementado um editor de texto. Nele era possvel mover o cursor e a mensagem para a direita e para a esquerda, pular para a prxima linha usando o enter, dar espao, apagar caracteres usando o backspace ou limpar o display usando o esc. Para implementar os comandos sempre era usado a configurao rs = 0 e r/w = 0. O restante era dado por comandos encontrados nos datasheets do display.

5.2.3 Deslocamento automtico da mensagem (Letreiro)

15

Foi implementado uma forma de deslocar a mensagem digitada no display. Sempre que o shift da direita era teclado, a mensagem comeava a se deslocar para a esquerda, at que o shift fosse novamente teclado. Sempre que a tecla shift direita era pressionada um flag era modificado. Caso o flag estive ativado, o deslocamento era realizado, caso contrrio o deslocamento parava. Tambm foi utilizado um registrador que tinha o papel de interferir na velocidade do deslocamento. Ele era incrementado at o seu valor mximo e sempre que voltasse ao valor inicial era enviada a instruo de deslocamento.

5.2.4 Reconhecimento de String

Foi implementado um modo de reconhecimento de string. Nele, sempre que uma string fosse digitada, um comando era ativado. No caso utilizado no projeto, sempre que uma palavra fosse digitada uma mensagem apareceria na segunda linha do display. Para o reconhecimento ser realizado, um registrador do tamanho da string pr-definida pelo programador foi utilizado. Sempre que uma tecla fosse digitada ela seria gravada na ultima posio do registrador e logo em seguida ele seria deslocado em 8 bits para a esquerda. Caso o registrador fosse igual string definida, uma mensagem seria escrita na tela do display.

6. RESULTADOS
Depois de vrias semanas de trabalho, trs displays queimados, alguns caminhos errados e muita programao, o objetivo foi alcanado. O resultado 16

final ficou melhor que o esperado, visto que a comunicao entre o teclado e o display funcionaram perfeitamente e numa velocidade razovel (o clock enviado ao display foi de 100 Hz, podendo ser aumentado sem perda de qualidade), o editor de texto supriu todas as necessidades bsicas para a construo de uma frase, o reconhecimento de nomes ou frases tambm se mostrou muito til e precisa e o letreiro funcionou assim como o esperado.

7. CONCLUSES

Em uma viso geral, a comunicao com o display no uma tarefa extremamente difcil, uma vez exposto todos os pormenores, entretanto a dificuldade desse projeto se fez em parte pela quantidade de informaes equivocadas em alguns artigos consultados, mudando um pouco a direo no decorrer do projeto. O funcionamento geral pode ser visualizado no web site (http://www.youtube.com/watch?v=tRf_mf2hpUI) por meio de um vdeo.

8. BIBLIOGRAFIA

Bruno Lus, Carla Pacheco, Descrio do funcionamento e protocolo de um teclado (PC), Arquitetura de computadores II, 2002-2003, Universidade de Coimbra.

Ilton L. Barbacena, Claudio Afonso Fleur. Display LCD,1996, intech.

APNDICE
Mdulo de comunicao teclado FPGA

17

module Teclado_fpga(input clk,clk2, data, output reg [7:0] out,output reg e); reg [10:0] aux; always @(negedge clk) begin aux[10] = data; aux = aux >> 1; end always @(negedge clk2) begin out = aux[7:0]; if (out==8'hf0) e<=~e; end endmodule //reconhecimento de tecla pressionada //lao de leitura paralela //registrador serial paralelo //clock do teclado

Mdulo de converso do teclado PS/2 para a biblioteca do LCD


module processamento(input [7:0]data,input clk_e,on,aux1,output reg rs, rw, output reg [7:0]out /*led backlight falta*/);

reg aux,auxinicial,flagbs,flagdes,flagenter,flagporra; //variveis auxiliares e flags reg [39:0] porra; reg [1:0] aux3; reg [3:0] auxdes, auxporra; wire rs1, rw1;

assign rs1 = 1; assign rw1 = 0;

18

initial

//condioes iniciais begin flagdes<=0; flagbs<=0; porra<=40'b0; auxporra<=4'b0;

flagporra<=0;end

always @(posedge clk_e)

//clock do enable begin if (aux == aux1)

//condiao de repetiao nica begin if (porra == 40'h4d442d2d1c)

//criatividade de reconhecimento da palavra "porra" begin case (auxporra)

//conta com registrador a cada letra escrita no conversor teclado -> LCD 4'b0000: begin out <= 8'hc0; rs<= 0; rw<=0; end //escreve na segunda linha a frase "menino mau !" 4'b0001: begin out <= 8'h6d; rs<= rs1; rw<=rw1; end //m 4'b0010: begin out <= 8'h65; rs<= rs1; rw<=rw1; end //e 4'b0011: begin out <= 8'h6e; rs<= rs1; rw<=rw1; end //n 4'b0100: begin out <= 8'h69; rs<= rs1; rw<=rw1; end //i 4'b0101: begin out <= 8'h6e; rs<= rs1; rw<=rw1; end //n 4'b0110: begin out <= 8'h6f; rs<= rs1; rw<=rw1; end //o 4'b0111: begin out <= 8'h20; rs<= rs1; rw<=rw1; end // " " 4'b1000: begin out <= 8'h6d; rs<= rs1; rw<=rw1; end //m 4'b1001: begin out <= 8'h61; rs<= rs1; rw<=rw1; end //a 4'b1010: begin out <= 8'h75; rs<= rs1; rw<=rw1; end //u 4'b1011: begin out <= 8'h20; rs<= rs1; rw<=rw1; end // " "

19

4'b1100: porra=40'b0;end //!

begin

out

<=

8'h21;

rs<=

rs1;

rw<=rw1;

default: begin endcase

rs<=0;rw<=0;out<=8'h0f; end

auxporra<=auxporra+1; end

else if (flagdes)

// deslocamento automtico begin if (auxdes == 4'b0000) begin rs<=0;rw<=0;out<=8'h18; end else begin rs<=0;rw<=0;out<=8'h0f; end

auxdes<=auxdes+1; end

else if (flagbs)

// backspace begin case (aux3) 2'b00: begin rs<=0;rw<=0;out<=8'h10; end 2'b01: begin rs<=1;rw<=0;out<=8'h20; end 2'b10: begin rs<=0;rw<=0;out<=8'h10; flagbs<=0; end default: begin rs<=0;rw<=0;out<=8'h0f; end endcase aux3<=aux3 + 1; end

else begin end

if (auxinicial == 0) begin rs<=0;rw<=0;out<=8'h0f; // espera, ligar cursor else if (auxinicial == 1) begin

rs<=0;rw<=0;out<=8'h38; end

// espera, ligar as duas linhas

auxinicial <= auxinicial + 1; end end 20

else

case (data)

//conversor teclado -> LCD 8'h1c : begin out <= 8'h61; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //a 8'h32 : begin out <= 8'h62; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //b 8'h21 : begin out <= 8'h63; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //c 8'h23 : begin out <= 8'h64; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //d 8'h24 : begin out <= 8'h65; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //e 8'h2b : begin out <= 8'h66; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //f 8'h34 : begin out <= 8'h67; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //g 8'h33 : begin out <= 8'h68; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //h 8'h43 : begin out <= 8'h69; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //i 8'h3b : begin out <= 8'h6a; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //j 8'h42 : begin out <= 8'h6b; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //k 8'h4b : begin out <= 8'h6c; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //l 8'h3a : begin out <= 8'h6d; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //m 8'h31 : begin out <= 8'h6e; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //n 8'h44 : begin out <= 8'h6f; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //o 21

8'h4d : begin out <= 8'h70; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //p 8'h15 : begin out <= 8'h71; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //q 8'h2d : begin out <= 8'h72; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //r 8'h1b : begin out <= 8'h73; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //s 8'h2c : begin out <= 8'h74; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //t 8'h3c : begin out <= 8'h75; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //u 8'h2a : begin out <= 8'h76; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //v 8'h1d : begin out <= 8'h77; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //w 8'h22 : begin out <= 8'h78; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //x 8'h35 : begin out <= 8'h79; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //y 8'h1a : begin out <= 8'h7a; rs<= rs1; rw<=rw1; porra = porra<<8; porra[7:0] = data; end //z

8'h45 : begin out <= 8'h30; rs<= rs1; rw<=rw1; end 8'h16 : begin out <= 8'h31; rs<= rs1; rw<=rw1; end 8'h1e : begin out <= 8'h32; rs<= rs1; rw<=rw1; end 8'h26 : begin out <= 8'h33; rs<= rs1; rw<=rw1; end 8'h25 : begin out <= 8'h34; rs<= rs1; rw<=rw1; end 8'h2e : begin out <= 8'h35; rs<= rs1; rw<=rw1; end 8'h36 : begin out <= 8'h36; rs<= rs1; rw<=rw1; end 8'h3d : begin out <= 8'h37; rs<= rs1; rw<=rw1; end 8'h3e : begin out <= 8'h38; rs<= rs1; rw<=rw1; end 8'h46 : begin out <= 8'h39; rs<= rs1; rw<=rw1; end

//0 //1 //2 //3 //4 //5 //6 //7 //8 //9

22

8'h5a : begin if (flagenter == 0) //enter begin out <= 8'hc0; rs<= 0; rw<=0; end else begin out <= 8'h80; rs<= 0; rw<=0; end flagenter<=~flagenter; end

8'h59 : flagdes<=~flagdes; // deslocamento automtico (tecla shift) 8'h29 : begin out <= 8'h20; rs<= rs1; rw<=rw1; end //espao 8'h41 : begin out <= 8'h2c; rs<= rs1; rw<=rw1; end //vrgula 8'h49 : begin out <= 8'h2e; rs<= rs1; rw<=rw1; end //ponto 8'h4a : begin out <= 8'h3b; rs<= rs1; rw<=rw1; end //ponto e vrgula 8'h51 : begin out <= 8'h3f; rs<= rs1; rw<=rw1; end //interrogao 8'h4e : begin out <= 8'h2d; rs<= rs1; rw<=rw1; end //menos 8'h55 : begin out <= 8'h2b; rs<= rs1; rw<=rw1; end //mais 8'h76 : begin rs<=0;rw<=0;out<=8'h01; end // limpa display (esc) 8'h6b : begin rs<=0;rw<=0;out<=8'h10; end // cursor para esquerda 8'h74 : begin rs<=0;rw<=0;out<=8'h14; end // cursor para direita 8'h75 : begin rs<=0;rw<=0;out<=8'h1f; end // mensagem para direita 8'h72 : begin rs<=0;rw<=0;out<=8'h18; end // esquerda mensagem para

23

8'h66 : begin flagbs<=1'b1; aux3<=2'b00; end //backspace default : begin rs<=0;rw<=0; out <= 8'h0f; end endcase aux = aux1; end endmodule

Mdulo do clock do multiplexador


module clkmux(input cclk,input [31:0]max,output reg clk); reg [31:0]aux; always @(posedge cclk) begin if (aux < max) aux <= aux + 1; else begin aux<=32'b0; clk<=~clk; end end endmodule

Mdulo que exibe nos displays de 7 segmentos o cdigo em hexadecimal referente as teclas
module testeteclado(input [7:0] data, output reg [7:0] letra1, letra2); 24

reg [3:0] data1,data2; hexadecimal para sete segmentos com dois dgitos always @ * begin data1 = data[3:0]; data2 = data[7:4]; case (data1) 4'h0 : letra1 <= 8'b00000011; 4'h1 : letra1 <= 8'b10011111; 4'h2 : letra1 <= 8'b00100101; 4'h3 : letra1 <= 8'b00001101; 4'h4 : letra1 <= 8'b10011001; 4'h5 : letra1 <= 8'b01001001; 4'h6 : letra1 <= 8'b01000001; 4'h7 : letra1 <= 8'b00011111; 4'h8 : letra1 <= 8'b00000001; 4'h9 : letra1 <= 8'b00001001; 4'ha : letra1 <= 8'b00010001; 4'hb : letra1 <= 8'b11000001; 4'hc : letra1 <= 8'b01100011; 4'hd : letra1 <= 8'b10000101; 4'he : letra1 <= 8'b01100001; 4'hf : letra1 <= 8'b01110001; endcase case (data2) 4'h0 : letra2 <= 8'b00000011; 4'h1 : letra2 <= 8'b10011111; 4'h2 : letra2 <= 8'b00100101; 4'h3 : letra2 <= 8'b00001101; 4'h4 : letra2 <= 8'b10011001; 4'h5 : letra2 <= 8'b01001001; 4'h6 : letra2 <= 8'b01000001; 4'h7 : letra2 <= 8'b00011111; 4'h8 : letra2 <= 8'b00000001;

//conversor

25

4'h9 : letra2 <= 8'b00001001; 4'ha : letra2 <= 8'b00010001; 4'hb : letra2 <= 8'b11000001; 4'hc : letra2 <= 8'b01100011; 4'hd : letra2 <= 8'b10000101; 4'he : letra2 <= 8'b01100001; 4'hf : letra2 <= 8'b01110001; endcase end endmodule

26

Você também pode gostar