Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Делимся исходными кодами
Ответить
Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение Radioded » 04 янв 2009, 03:49

Начнём-с, для затравки библиотека функций для работы с дисплеем 16x2 на контроллере HD44780. Изначально код писался под WinAVR.
Вот сам код, или качайте прикреплённый файл lcd.h:

Код: Выделить всё

#define cbi(reg, bit) (reg&=~(1<<bit))
#define sbi(reg, bit) (reg|= (1<<bit))

#define LCDPORT PORTC
#define LCDDDR DDRC
#define RS 0
#define E 1


#define RS_0 cbi(LCDPORT,RS)
#define RS_1 sbi(LCDPORT,RS)
#define E_0 cbi(LCDPORT,E)
#define E_1 sbi(LCDPORT,E)

void clearlcd(void);
void lcddata(unsigned char temp);
void lcdcmd(unsigned char temp);
void showstr(unsigned char *s);
void shiftleft(void);
void shiftright(void);
void home(void);

const unsigned char lcdaddr[4] = {0X80, 0XC0, 0X94, 0XD4};

void setlcdposition(unsigned char row, unsigned char col){

	lcdcmd(lcdaddr[row-1] + col);
	
}

void lcdcmd(unsigned char temp){
	
	LCDPORT = (temp & 0xF0);
	RS_0;		// command
	E_1;
	_delay_us(2);
	E_0;

	LCDPORT = ((temp & 0x0F) << 4);
	RS_0;		// command
	E_1;
	_delay_us(2);
	E_0;
	
	_delay_ms(1);
}

void lcddata(unsigned char temp){
	
	LCDPORT = (temp & 0xF0);
	RS_1;		// data
	E_1;
	_delay_us(2);
	E_0;
	
	LCDPORT = ((temp & 0x0F) << 4);
	RS_1;		// data
	E_1;
	_delay_us(2);
	E_0;
	
	_delay_us(50);
}

void lcdinit(void){

	PORTC = 0x00;
	DDRC = 0b11110011; 	// output
	_delay_ms(60);

	lcdcmd(0x30);		
	_delay_ms(5);
	
	lcdcmd(0x30);		
	_delay_us(200);

	lcdcmd(0x30);		
	_delay_us(200);
	
	lcdcmd(0x02);		// 4bit mode

	lcdcmd(0x02);		// 4bit mode

	lcdcmd(0x28); 		// 4 bit, 2 lines, 5*7 font
	
	lcdcmd(0x0C);		// cursor OFF, display ON

	lcdcmd(0x06);		// -> inc
	
	clearlcd();
}

void clearlcd(void){
	lcdcmd(0x01); 	// clear LCD
	_delay_ms(3);	// max 1.53mS
}

void home(void){
	lcdcmd(0x02); 	
	_delay_ms(3);	// max 1.53mS
}

void secondline(void){

	lcdcmd(0xC0);
	_delay_ms(3);

}
void shiftleft(void){
	lcdcmd(0x04);
}

void shiftright(void){
	lcdcmd(0x06);
}

void showstr(unsigned char *s){
  while(*s != 0) lcddata(*s++);
  _delay_ms(1);
}
Пример использования функций из библиотеки:

Код: Выделить всё

#include <avr/io.h>
#define F_CPU 1000000
#include <util/delay.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include <lcd.h>

char word[]="Hello";
char banner[]="radioded.ru";
int main (void) {

	lcdinit();
	clearlcd();
	showstr(word);
	secondline();
	showstr(banner);

}

sanekerfort
Сообщения: 1
Зарегистрирован: 30 мар 2009, 06:50

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение sanekerfort » 30 мар 2009, 07:31

Спасибо, очень пригодилось. Простенько и понятно. То что надо для простых проектов, где надо только выводить на экран, без излишних заморочек.

gr_JAVA
Сообщения: 1
Зарегистрирован: 06 мар 2010, 19:20

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение gr_JAVA » 06 мар 2010, 19:23

Это исходники для подключения дисплея по 4-проводной или 8-проводной линии?

Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение Radioded » 14 мар 2010, 18:14

Исходники для подключения дисплея HD44780 по 4-проводной линии.

begun
Сообщения: 1
Зарегистрирован: 11 апр 2010, 13:30

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение begun » 11 апр 2010, 13:34

Здравствуйте!
Можки у кого нибудь есть то же самое на CVAVR ?
у меня проблема подключения LCD на разные пины разных портов.

asad
Сообщения: 1
Зарегистрирован: 04 окт 2014, 23:38

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение asad » 05 окт 2014, 00:12

А где скачать LCD.h судя по демке все просто но в студии6 исходник выдает ошибки.

SuperVnuk
Сообщения: 1
Зарегистрирован: 07 окт 2014, 19:41

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение SuperVnuk » 07 окт 2014, 20:00

А где скачать LCD.h судя по демке все просто но в студии6 исходник выдает ошибки.
под WinAvr
Этот код писался только для него.

Аватара пользователя
Radioded
Site Admin
Сообщения: 184
Зарегистрирован: 07 ноя 2008, 02:47
Откуда: Москва
Контактная информация:

Re: Библиотека для работы с дисплеем 16*2 на Си под WinAVR

Сообщение Radioded » 15 ноя 2016, 22:27

Прикрепляю сам файл библиотеки lcd.h
Вложения
lcd.rar
Библиотека на СИ для работы с дисплеями на контроллере HD44780
(668 байт) 150 скачиваний

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость