+
Hardware Profile Feed

KINGDOM MIDI BOARD - DISPLAY TEST

У миди процессора появился экранчик ^^3


sAMEO4RVTnQ[1] @ Kingdom

Фрагменты кода

<<man.h>>

#ifndef MAIN_H_

#define MAIN_H_

#define F_CPU 8000000UL

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <stdio.h>

#include <stdlib.h>

#include "lcd.h"

#endif /* MAIN_H_ */

**************

<<lcd.h>>

#ifndef LCD_H_

#define LCD_H_

#include "main.h"

//----------------------------------------

void LCD_ini(void);

void setpos(unsigned char x, unsigned y);

void str_lcd (char str1[]);

void clearlcd(void);

//----------------------------------------

#define e1    PORTL|=0b00001000 // установка линии E в 1

#define e0    PORTL&=0b11110111 // установка линии E в 0

#define rs1    PORTL|=0b00000100 // установка линии RS в 1 (данные)

#define rs0    PORTL&=0b11111011 // установка линии RS в 0 (команда)

//----------------------------------------

#endif /* LCD_H_ */

***

<<lcd.c>>

#include "lcd.h"

//----------------------------------------

void sendhalfbyte(unsigned char c)

{

c<<=4;

e1; //включаем линию Е

_delay_us(500);

PORTL&=0b00001111; //стираем информацию на входах DB4-DB7, остальное не трогаем

PORTL|=c;

e0; //выключаем линию Е

_delay_us(500);

}

//----------------------------------------

void sendbyte(unsigned char c, unsigned char mode)

{

if (mode==0) rs0;

else         rs1;

unsigned char hc=0;

hc=c>>4;

sendhalfbyte(hc); 

sendhalfbyte(c);

}

//----------------------------------------

void sendchar(unsigned char c)

{

sendbyte(c,1);

}

//----------------------------------------

void setpos(unsigned char x, unsigned y)

{

char adress;

adress=(0x40*y+x)|0b10000000;

sendbyte(adress, 0);

}

//----------------------------------------

void LCD_ini(void)

{

_delay_ms(150); //Ждем 15 мс (стр 45)

sendhalfbyte(0b00000011);

_delay_ms(40);

sendhalfbyte(0b00000011);

_delay_us(1000);

sendhalfbyte(0b00000011);

_delay_ms(10);

sendhalfbyte(0b00000010);

_delay_ms(10);

sendbyte(0b00101000, 0); //4бит-режим (DL=0) и 2 линии (N=1)

_delay_ms(10);

sendbyte(0b00001100, 0); //включаем изображение на дисплее (D=1), курсоры никакие не включаем (C=0, B=0)

_delay_ms(10);

sendbyte(0b00000110, 0); //курсор (хоть он у нас и невидимый) будет двигаться влево

_delay_ms(10);

}

//----------------------------------------

void clearlcd(void)

{

sendbyte(0b00000001, 0);

_delay_us(15000);

}

//----------------------------------------

void str_lcd (char str1[])

{  

wchar_t n;

for(n=0;str1[n]!='\0';n++)

sendchar(str1[n]);

}

//-----------------------------------

****

<<main.c>>

#include "lcd.h"

***

LCD_ini();  //Инициализируем дисплей

setpos(4,0);

str_lcd("Kingdom>");

setpos(0,1);

str_lcd("MIDI Board ^_^");

***

СХЕМА:


2019-10-13 175229 @ Kingdom

Ножки 15-16 на дисплее - подсветка (+5В/земля),

Переменный резистор 10к регулирует контраст

1 ▲
13 October 2019 17:39
Kingdom

Comments

Please, sign up (it's quick!) or sign in, to post comments and do more fun stuff.