Надо всего лишь подключить хэдер и исходник и определить XTAL_FREQ.
Делов на 5 минут.
А так , на xc8 все уже есть и не в пример проще.
Но вам похоже без разницы, ибо без знания языка изучать что то весьма трудно...
Mon писал(а):пока крутил проверял БП на индикаторе вольтамперметра заметил - что пропал контраст.
Gudd-Head писал(а):Mon писал(а):пока крутил проверял БП на индикаторе вольтамперметра заметил - что пропал контраст.
Вот это попробробней можно?
Код: Выделить всё
init_lcd : process
variable init : integer := 0;
variable var_lcd_e : boolean := true;
begin
wait until rising_edge(clk_load_lcd);
if var_lcd_e then
if init = 0 then
lcd_rs <= '0';
lcd_data <= x"2";
lcd_e <= '1';
var_lcd_e := false;
init := 1;
elsif init = 1 then
lcd_data <= x"0";
lcd_e <= '1';
var_lcd_e := false;
init := 2;
elsif init = 2 then
lcd_data <= x"2";
lcd_e <= '1';
var_lcd_e := false;
init := 3;
elsif init = 3 then
lcd_data <= x"0";
lcd_e <= '1';
var_lcd_e := false;
init := 4;
elsif init = 4 then
lcd_data <= x"0";
lcd_e <= '1';
var_lcd_e := false;
init := 5;
elsif init = 5 then
lcd_data <= x"1";
lcd_e <= '1';
var_lcd_e := false;
init := 6;
elsif init = 6 then
lcd_data <= x"0";
lcd_e <= '1';
var_lcd_e := false;
init := 7;
elsif init = 7 then
lcd_data <= x"c";
lcd_e <= '1';
var_lcd_e := false;
init := 8;
elsif init = 8 then
lcd_rs <= '1';
lcd_data <= x"3";
lcd_e <= '1';
var_lcd_e := false;
init := 9;
elsif init = 9 then
lcd_data <= x"0";
lcd_e <= '1';
var_lcd_e := false;
init := 10;
end if;
else
var_lcd_e := true;
lcd_e <= '0';
end if;
end process;
Alexeyslav писал(а):Настраивай контраст, у дисплея как минимум должны появится квадраты в первой строке если его никак не инициализировать. 15-16 контакты идут прямо к площадкам подсветки.
подключил 15 к +5В 16й к земле светится.Alexeyslav писал(а):сбоку у индикатора есть контакты для подключения подсветки.
dimitriy91 писал(а):После включения , включаются обе строки , горят все пикселы, ноль почему то не выводится.
Код: Выделить всё
// MK pic16f72
// работа с LCD
#include <pic.h>
//----------
volatile struct strPause // объявление структуры strPause типа volatile
{
unsigned bPause1_1:1; // бит на защелку задержки 01 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause2_1:1; // бит на защелку задержки 02 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause3_1:1; // бит на защелку задержки 03 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause4_1:1; // бит на защелку задержки 04 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause5_1:1; // бит на защелку задержки 05 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause6_1:1; // бит на защелку задержки 06 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause7_1:1; // бит на защелку задержки 07 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause8_1:1; // бит на защелку задержки 08 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause9_1:1; // бит на защелку задержки 09 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause10_1:1; // бит на защелку задержки 10 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause11_1:1; // бит на защелку задержки 11 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause12_1:1; // бит на защелку задержки 12 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause13_1:1; // бит на защелку задержки 13 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause14_1:1; // бит на защелку задержки 14 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause15_1:1; // бит на защелку задержки 15 символа в 1-й строке(1 - да, 0 - нет)
unsigned bPause16_1:1; // бит на защелку задержки 16 символа в 1-й строке(1 - да, 0 - нет)
unsigned char varPause; // strPause.varPause - счетчик до 10 миллисекунд
}strPause;
//----------
void interrupt isr(void) // обработчик прерываний
{
if (T0IF && T0IE) // ветка опроса флага прерывания по переполнению TMR0
{
T0IF = 0; // сброс флага прерывания по переполнению TMR0
TMR0+= 6; // предзагрузка TMR0
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
strPause.varPause++;
} // конец ППОП TMR0
}
//----------
__CONFIG (XT & WDTDIS & PWRTDIS & BOREN & UNPROTECT); // биты конфигурации программатора
//----------
// объявление функций, используемые в файле------------------------------------------------------------------------------------------
extern void lcd_init(void);
extern void lcd_clear(void);
extern void lcd_gotoxy(char, char);
extern void lcd_puts(char *);
extern void lcd_putch(char);
extern void lcd_cgram(char *, unsigned char); // Добавляет массив строк из arr в CGRAM, по адресу adr.
void podgot (void) // настройки
{
GIE = 1; // разрешены все немаскированные прерывания
// Начало настройки TMR0 ----------
T0CS = 0; // bit 5 TMR0 Выбор источника сигнала 0 - Fosc/4 (внутренний); 1 - подача на T0CKI
T0SE = 0; // bit 4 TMR0 Выбор фронта приращения TMR0 при внешнем тактовом сигнале (0-передний фронт)
PSA = 0; // bit 3 Выбор включения предделителя: 0 - перед TMR0, 1 - перед WDT
PS2 = 0; // bit 2 Настройка предделителя
PS1 = 0; // bit 1 Настройка предделителя
PS0 = 1; // bit 0 Настройка предделителя
// Конец настройки TMR0 ----------
}
// конец объявления функций, используемые в файле----------------------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void main ()
{
podgot(); //настройки
//DelayMs(10); задержка на 10 миллисекунд
T0IE = 1; // 1/0 разрешение/запрет прерывания по переполнению TMR0
strPause.bPause1_1 = 1;
strPause.bPause2_1 = 0;
// (strPause.varPause >= 10)
//
T0IE = 0; // 1/0 разрешение/запрет прерывания по переполнению TMR0
lcd_init(); // инициализация дисплея
lcd_clear(); // очистка дисплея
strPause.varPause = 0;
//
for(;;)
{
//начало вывода 1-го символа 1-й строки-----------------------------------------------------
if(strPause.bPause1_1==1)
{
lcd_gotoxy(0,0);
lcd_putch('H');
if(strPause.varPause>9){strPause.bPause1_1 = 0; strPause.bPause1_2 = 1;}
}//конец вывода 1-го символа 1-й строки-----------------------------------------------------
//начало вывода 2-го символа 1-й строки-----------------------------------------------------
if(strPause.bPause1_2 == 1)
{
lcd_gotoxy(1,0);
lcd_putch('e');
strPause.varPause = 0;
if(strPause.varPause>9) {strPause.bPause1_2 = 0; strPause.bPause1_1 = 1;}
}//конец вывода 2-го символа 1-й строки-----------------------------------------------------
}// end main
//----------
Код: Выделить всё
volatile struct // объявление структуры strPause типа volatile
{
............
}strPause;
Код: Выделить всё
volatile struct strPause // объявление структуры strPause типа volatile
{
..........
}strPause;
С одинаковыми именами ? Не зналодновременное объявление и реализацию еще никто не запрещал...
