728x90

728x90

Sunday, January 21, 2024

PIC16F887 MCP23017 LCD and Keypad Interfacing using XC8

In previous post, I use the MCP23017 16-bit I/O expander chip to interface with LED and DIP switch, 4x4 matrix keypad, and the HD44780 based character LCD. Here I will put them altogether using a 4x4 matrix keypad and a 16x2 character LCD.

PIC16F887 MCP23017 LCD and Keypad Interfacing using XC8
Program Start Up

In this example, the micro-processor keep tracks of keypad scanning. When the a key-press is detected it will send to a 16x2 character LCD via the MCP23017 I2C communication interface. The LCD is automatically create new line and return home by software.

  1. /*
  2.  * File: main.c
  3.  * Author: Admin
  4.  *
  5.  * Created on January 22, 2024, 9:04 AM
  6.  */
  7.  
  8. #include <xc.h>
  9. #include "config.h"
  10. #include "mcp23017.h"
  11.  
  12. #define _XTAL_FREQ 8000000
  13.  
  14. void main(void) {
  15. OSCCONbits.IRCF=7;
  16. __delay_ms(100);
  17. lcd_init();
  18. __delay_ms(100);
  19. lcd_text(" MCP23017 I2C");
  20. lcd_xy(1,2);
  21. lcd_text(" LCD Key Pad");
  22. __delay_ms(3000);
  23. lcd_clear();
  24. uint8_t temp,counter=0,new_line=0,line_num=1;
  25. while(1){
  26. temp=keyScan();
  27. if(temp!=0xFF){
  28. lcd_data(temp);
  29. counter++;
  30. __delay_ms(250);
  31. }
  32. if(counter>=16) {counter=0; new_line=1;}
  33. if(new_line){
  34. new_line=0;
  35. line_num++;
  36. if(line_num==2) lcd_xy(1,2);
  37. if(line_num==3){lcd_clear(); line_num=1;}
  38. }
  39. }
  40. return;
  41. }
  42.  

The PIC16F887 use the I2C clock frequency of 400kHz without disruption. Program simulation in Proteus doesn't run smoothly. So I need to test this firmware on a prototype board next.

PIC16F887 MCP23017 LCD and Keypad Interfacing using XC8
Keypad Scanning and LCD Display Tasks

Click here to download this example package from GitHub.



No comments:

Post a Comment

320x50

Search This Blog

tyro-728x90