Перейти к содержанию

Жк Pic


Vasily437

Рекомендуемые сообщения

Здравствуйте!

Никак не получается работать с ЖК на pic16f676.... На других некоторых пробовал (pic16f628, pic16f877, pic16f874), а на этом нивкакую.... А мне надо бы на нем...

Библиотека hi-tech

Вот коды.

Ну это сама программа

#include <pic16f676.h>
#include "lcd.c"

void
main(void)
{
   lcd_init();
   lcd_goto(0);    // select first line
   lcd_puts("12345678");
   lcd_goto(0x40); // Select second line
   lcd_puts("Hello world");

   while(1){}
}

lcd.c:

#ifndef _XTAL_FREQ
// Unless specified elsewhere, 4MHz system frequency is assumed
#define _XTAL_FREQ 4000000
#endif


#include    <htc.h>
#include    "lcd.h"

#define LCD_RS RA0
//#define   LCD_RW RB1
#define LCD_EN RA1

#define LCD_DATA    PORTC

#define LCD_STROBE()    ((LCD_EN = 1),(LCD_EN=0))

/* write a byte to the LCD in 4 bit mode */

void
lcd_write(unsigned char c)
{
   __delay_us(40);
   LCD_DATA = ( ( c >> 4 ) & 0x0F );
   LCD_STROBE();
   LCD_DATA = ( c & 0x0F );
   LCD_STROBE();
}

/*
*  Clear and home the LCD
*/

void
lcd_clear(void)
{
   LCD_RS = 0;
   lcd_write(0x1);
   __delay_ms(2);
}

/* write a string of chars to the LCD */

void
lcd_puts(const char * s)
{
   LCD_RS = 1; // write characters
   while(*s)
    lcd_write(*s++);
}

/* write one character to the LCD */

void
lcd_putch(char c)
{
   LCD_RS = 1; // write characters
   lcd_write( c );
}


/*
* Go to the specified position
*/

void
lcd_goto(unsigned char pos)
{
   LCD_RS = 0;
   lcd_write(0x80+pos);
}

/* initialise the LCD - put into 4 bit mode */
void
lcd_init()
{
   char init_value;

   ADCON1 = 0x06;  // Disable analog pins on PORTA
CMCON=7;//выключаем компараторы
   init_value = 0x3;
   TRISA=0;
   TRISC=0;

   LCD_RS = 0;
   LCD_EN = 0;
   //LCD_RW = 0;

   __delay_ms(15); // wait 15mSec after power applied,
   LCD_DATA	 = init_value;
   LCD_STROBE();
   __delay_ms(5);
   LCD_STROBE();
   __delay_us(200);
   LCD_STROBE();
   __delay_us(200);
   LCD_DATA = 2;   // Four bit mode
   LCD_STROBE();

   lcd_write(0x28); // Set interface length
   lcd_write(0xF); // Display On, Cursor On, Cursor Blink
   lcd_clear();    // Clear screen
   lcd_write(0x6); // Set entry Mode
}

lcd.h:

/* write a byte to the LCD in 4 bit mode */

extern void lcd_write(unsigned char);

/* Clear and home the LCD */

extern void lcd_clear(void);

/* write a string of characters to the LCD */

extern void lcd_puts(const char * s);

/* Go to the specified position */

extern void lcd_goto(unsigned char pos);

/* intialize the LCD - call before anything else */

extern void lcd_init(void);

extern void lcd_putch(char);

/*  Set the cursor position */

#define lcd_cursor(x)   lcd_write(((x)&0x7F)|0x80)

Ну из lcd.c видно на каких выводах у меня что подключено.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вот.

Код один и тот же, что сама программа, что lcd библиотека.

Подключил к одним и тем же выводам. Результат

s_1424681564_3906180_61f4f9c097.jpg

Попробуйте у себя пожалуйста. Мои коды в первом посте.

Ссылка на комментарий
Поделиться на другие сайты

Все так... RA0 на RS, а RA1 на E

C0-C3 на последнии выводы ЖК.

И порт С настроил как цифровые выходы?

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

Решение -- включить порты как цифровые, отключить компаратор, MCLR на +.

Как программно отключить MCLR? пробовал поразному - не выходило. Надеюсь на вас, а то мне нужен этот вывод.....

Алекс, почему-то при попытке подключить lcd.h выдает ошибку.

+ подскажите пожалуйста как отключить курсор. Он по умолчанию включен, и никак не могу найти его отключения....

Ссылка на комментарий
Поделиться на другие сайты

Как программно отключить MCLR? пробовал поразному - не выходило. Надеюсь на вас, а то мне нужен этот вывод.....

MCLRE=0

Алекс, почему-то при попытке подключить lcd.h выдает ошибку.

Ну-ка угадай какую ошибку у него выдает компилятор?!

+ подскажите пожалуйста как отключить курсор. Он по умолчанию включен, и никак не могу найти его отключения....

Пошли дисплею код "1" - очистка и убрать курсор

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

Алекс, почему-то при попытке подключить lcd.h выдает ошибку.

Ну какую... Наверное не найдены функции. Ибо в проект то он по-любому .c-файл не добавляет.

Не любит народ читать литературу, хотят чтобы всё и сразу...

Ссылка на комментарий
Поделиться на другие сайты

Алекс, спасибо - помогло. при .h так ошибку не выдает.

Вова, на MCLRE=0 ругается(нет такого индефикатора) и как послать 1 дисплею?

Не могу сделать, чтобы выводились данные когда C0-C3 на выводы данных индикатора, а C4, C5 на RS, E....

Ссылка на комментарий
Поделиться на другие сайты

Вова, на MCLRE=0 ругается(нет такого индефикатора)

Ответ тут: #include <pic16f676.h>

послать 1 дисплею?

У тебя уже есть функция lcd_clear() или она курсор не отключает?:

Не могу сделать, чтобы выводились данные когда C0-C3 на выводы данных индикатора, а C4, C5 на RS, E....

И не получится:

#define LCD_RS RA0
//#define   LCD_RW RB1
#define LCD_EN RA1
#define LCD_DATA	    PORTC

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

Вова, в pic16f676.h смотрел и даже оттуда вставлял строку по отключению MCLR -но почему-то не отключается...

lcd_clear() -очистка дисплея

Разумеется я правил на RC4 и RC5, но толку нет.

Алекс, а вы сами эту библиотеку пробовали? Чем она лучше обычной? Те же функции, так же не понятно как отключить курсор, так еще и разбираться в назначении выводов....

Ссылка на комментарий
Поделиться на другие сайты

Чем она лучше обычной?
Какой "обычной" ? И что значит "лучше" ?

1. Вы хотите отключенный курсор, там он отключается.

2. Вы хотите указывать различные выводы МК для дисплея, там это делается с лёгкостью.

3. Я не то что её пробовал, я - автор этого произведения.

Ссылка на комментарий
Поделиться на другие сайты

Я не знаю, что у Вас за стандартная библиотека, не разбирался. Я просто предложил Вам альтернативу, исходя из Ваших запросов, т.к. Ваша не удовлетворяет Вашим требованиям, по Вашим же словам.

Чем она Вам не угодила ?

Ссылка на комментарий
Поделиться на другие сайты

на MCLRE=0 ругается(нет такого индефикатора)

в pic16f676.h смотрел и даже оттуда вставлял строку по отключению MCLR -но почему-то не отключается...

А вообще, в качестве чего собираешься использовать пин MCLR? (как вход,выход?)

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

вход.

Вот это вставлял.

// RA3/MCLR pin function is digital I/O, MCLR internally tied to VDD

#define MCLRE_OFF 0xFFDF

А что такое "#define" ? И как этим пользоваться?

Как только ответишь сам на эти вопросы, так нога и заработает!

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

Забыл видимо про это)

Но я все же не понял как объявлять...

#define CONFIG 0x2007

#define MCLRE_OFF 0xFFDF

CONFIG MCLRE_OFF;

ошибки, ошибки, ошибки...

P.S: не хотелось бы через __CONFIG, хотя так: __CONFIG MCLRE_OFF; тоже ругается

Ссылка на комментарий
Поделиться на другие сайты

Для того, чтобы понятно было другим нужно писать через конфиг!

А если так:

__CONFIG (MCLRE_OFF);

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...