Подключение к микроконтроллеру PIC16F84A LCD дисплея.

Подключение к микроконтроллеру PIC16F84A, с кварцем 4 МГц (20 МГц), LCD дисплея на микроконтроллере HD44780 (применялся дисплей WH1602A 2×16).
Линия RS к RA1, E к RA0, DB4 к RB4, DB5 к RB5, DB6 к RB6, DB7 к RB7.


#include <pic1684 .h>

void low_init()
{
TRISA=0x00;
TRISB=0x00;
}

//	LCD биты и переменные
#define LCD_width  15		//	Ширина дисплея
#define LCD_height 1		//	Высота дисплея
#define RS_1 RA1 = 1		//	RA1
#define RS_0 RA1 = 0		//	RA1
#define E_1  RA0 = 1		//	RA0
#define E_0  RA0 = 0		//	RA0

const unsigned char addLUT[4] = {0x80, 0xC0, 0x94, 0xD4};
unsigned char LCD_Address, LCD_Line;
char buffer[15];
//	-LCD биты и переменные

void delay(unsigned int p)
{
unsigned int i;
for(i=0;i<p ;i++){asm("NOP");}
}

//	LCD
void WriteNibble(unsigned char data)
{
E_1;
PORTB = (data & 0x0F)*16;
E_0;
delay(300);
}

void WriteByte(unsigned char data)
{
E_1;
PORTB = (data >> 4)*16;
E_0;
E_1;
PORTB = (data & 0xF)*16;
E_0;
delay(300);
}

void SetLCDPosition(char row, char col)
{
RS_0;
WriteByte(addLUT[row] + col);
RS_1;
LCD_Address=col;
LCD_Line = row;
}

void ClearLCD(void)
{
RS_0;
WriteByte(0x01);
delay(1000);
RS_1;
SetLCDPosition(0,0);
}

void ShowChar(unsigned char c)
{
RS_1;
WriteByte(c);
LCD_Address++;
if(LCD_Address>LCD_width)
if(LCD_Line<lcd_height )
SetLCDPosition(LCD_Line+1,0);
else
SetLCDPosition(0,0);
}

void ShowStr(unsigned char *s)
{
while (*s != 0) ShowChar(*s++);
}

void InitLCD(void)
{
int i;
E_0;
RS_0;
delay(5000);
WriteNibble(0x33);
WriteNibble(0x33);
WriteNibble(0x33);
WriteNibble(0x22);
WriteByte(0x28);
WriteByte(0x01);
WriteByte(0x10);
WriteByte(0x06);
WriteByte(0x0C);
for(i=0x40; i < 0x5F; i++)
{
delay(1000);
RS_0;
WriteByte(i);
delay(1000);
ShowChar(0);
}
RS_1;
SetLCDPosition(0, 0);
buffer[0] = 'O';
buffer[1] = 'k';
buffer[2] = '\0';
ShowStr(buffer);
}
//	-LCD биты

void main()
{
low_init();	//	инициализация контроллера
delay(10000);
InitLCD();	//	инициализация дисплея
delay(100000);
ClearLCD();	//	очистка дисплея

ShowStr("alex-exe.ru\0");	//	вывод строки
}

Описание функций:

  • delay — задержка
  • WriteNibble — отправка полубайта
  • WriteByte — отправка байта, частями, по полбайта
  • ClearLCD — очистка дисплея
  • SetLCDPosition(X,Y) — установить курсор
  • ShowChar(символ) — отправить символ на дисплей
  • ShowStr(строка) — отправить строку на дисплей
  • InitLCD — инициализация дисплея
  • Файл исходников

    Статья обновлена 1 марта 2011 года

11 комментариев »

Alex_EXE | 23.07.2009 | Микроконтроллеры | 13 862 просмотров

11 комментариев на « Подключение к микроконтроллеру PIC16F84A LCD дисплея.»

  1. NESTERKA пишет 25.05.2016 в 18:22 #

    Дополнение. Почему то в строке 01 #include исчезло указание на заголовочный файл. В том который и исходном тексте архива необходимо убрать 1684.

Комментарии RSS

Оставьте отзыв