PRÁTICA 5 – DISPLAY ASCII LCD HD44780 (COM RELÓGIO)
Objetivos:
- Esta prática tem o objetivo de usar o display ASCII LCD Hitachi HD44780 de 16 caracteres e duas linhas:
Introdução:
Pinagem do display ASCII LCD Hitachi HD44780 de 16 caracteres e duas linhas:
Descrição dos pinos do display ASCII LCD Hitachi HD44780:
Tarefas:
- Compilar o programa 1 (abaixo) em C usando o MikroC e gerar o arquivo HEX.
- Enviar o arquivo HEX para o pic usando o pickit2.
- Montar o circuito e verificar o funcionamento.
- Configurações para o projeto (em project -> edit project)
- OSCILLATOR SELECTION: INTOSC
- MASTER CLEAR: DISABLE
- POWER-UP TIMER: ENABLE
- Todas as outras opções: DISABLE
Circuito 1 – Mensagens no display de LCD:
Programa 1 – Mensagens no display de LCD:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//Configura os pinos do PIC para utilizar a biblioteca do LCD HD44780 sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; void main() { int pos = 0; TRISA = 0x00; TRISB = 0x00; CMCON = 0x07; Lcd_Init(); //Inicializa o LCD com a configuração indicada Lcd_Cmd(_LCD_CLEAR); //Limpa a tela do LCD Lcd_Cmd(_LCD_CURSOR_OFF); //Desabilita o cursor while(1) { // Loop infinito for (pos=0;pos<15;pos++) { //Loop com POS variando de 0 a 15 Lcd_Cmd(_LCD_CLEAR); //Limpa a tela Lcd_Out(1,pos,"PIC LCD"); //Escreve PIC LCD na primeira linha e coluna POS Lcd_Out(2,pos,"CEFET"); //Escreve CEFET na primeira linha e coluna POS Delay_ms(200); //Esperar 200ms } } } |
Programa 2 – Relógio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
//Configura os pinos do PIC para utilizar a biblioteca do LCD HD44780 sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; void main() { int seg = 40; int min = 59; int hor = 23; char message[] = "00:00:00"; TRISA = 0x00; TRISB = 0x00; CMCON = 0x07; Lcd_Init(); //Inicializa o LCD com a configuração indicada Lcd_Cmd(_LCD_CLEAR); //Limpa a tela do LCD Lcd_Cmd(_LCD_CURSOR_OFF); //Desabilita o cursor while(1) { // Loop infinito Lcd_Cmd(_LCD_CLEAR); //Limpa a tela message[0] = hor/10 + 48; message[1] = hor%10 + 48; message[3] = min/10 + 48; message[4] = min%10 + 48; message[6] = seg/10 + 48; message[7] = seg%10 + 48; Lcd_Out(1,4,"PIC O'CLOCK"); //Escreve no LCD Lcd_Out(2,5,message); //Escreve no LCD Delay_ms(1000); //Esperar 1000ms seg = seg + 1; if (seg > 59) { min = min + 1; seg = 0; } if (min > 59) { hor = hor + 1; min = 0; } if (hor > 23) { hor = 0; } } } |
Desafio: Faça um texto aparecer na primeira linha da esquerda para a direita e outro na segunda linha da direita para a esquerda.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//Configura os pinos do PIC para utilizar a biblioteca do LCD HD44780 sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; void main() { int pos = 0; TRISA = 0x00; TRISB = 0x00; CMCON = 0x07; Lcd_Init(); //Inicializa o LCD com a configuração indicada Lcd_Cmd(_LCD_CLEAR); //Limpa a tela do LCD Lcd_Cmd(_LCD_CURSOR_OFF); //Desabilita o cursor while(1) { // Loop infinito for (pos=0;pos<15;pos++) { //Loop com POS variando de 0 a 15 Lcd_Cmd(_LCD_CLEAR); //Limpa a tela Lcd_Out(1,pos,"UM TEXTO"); Lcd_Out(2,15-pos,"OUTRO TEXTO"); Delay_ms(200); //Esperar 200ms } } } |