1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
1

Работа с ИЖК (PIC16F676, HiTech)

23.02.2015, 11:54. Показов 3883. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Никак не получается работать с ЖК на pic16f676.... На других некоторых пробовал (pic16f628, pic16f877, pic16f874), а на этом нивкакую.... А мне надо бы на нем...
Библиотека hi-tech
Вот коды.
Ну это сама программа
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#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:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* 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 видно на каких выводах у меня что подключено.

Добавлено через 11 часов 49 минут
Вот.

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

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

http://storage2.static.itmages... f9c097.jpg

Добавлено через 44 секунды
Попробуйте у себя пожалуйста. Мои коды в первом посте.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.02.2015, 11:54
Ответы с готовыми решениями:

Работа с АЦП (PIC16F676)
МК pic16f676 Задача: попробовать сделать АЦП. Код программы: #include &lt;htc.h&gt; ...

PIC и ИЖК МТ-10Т7
Уважаемые форумчане выручайте встала такая задача нужно работать с дисплеем МТ-10т7 через...

Концепция работы с ИЖК и клавиатурой
здравствуйте, вообщем я человек молодой, неопытный, самоучка, если кто подкинет мне статью и...

PIC16F676
делаю плату и не могу найти диаметр для PIC16F676

34
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
23.02.2015, 23:22  [ТС] 21
Author24 — интернет-сервис помощи студентам
А чем какой компилятор лучше\хуже?
Тут дело то видимо в библиотеке....
Можете библиотеку скинуть, тоже .с и .h ?
Попробую у себя.
0
179 / 164 / 30
Регистрация: 14.02.2013
Сообщений: 1,463
23.02.2015, 23:44 22
Да действительно RC4 и RC5 в протеусе не работают. Возможно это глюк протеуса
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
23.02.2015, 23:52  [ТС] 23
У вас тоже чтоли?
Может это просто что-то в аппаратной части? например они не могут выдавать высокий уровень или что-то подобное? (сам бы узнал еслиб английский знал)
0
179 / 164 / 30
Регистрация: 14.02.2013
Сообщений: 1,463
24.02.2015, 00:45 24
Дело не в библиотеке это точно.
По даташиту RC4 и RC5 могут работать так же как и все другие RC.
Если у вас есть реальное железо то проверьте в нём.

Добавлено через 44 минуты
Запутался я с вами.
В библиотеки дело.
Смотрите библиотеку свою где то в ней вы удалили что то.
У меня на все RC работает.
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 20
24.02.2015, 03:45 25
user437, поставьте ANSEL = 0; в inite.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
24.02.2015, 12:36  [ТС] 26
Так я и прошу скинуть мне вашу библиотеку.
Ничего я не удалял. Это стандартная библиотека которая есть в hi-tech

Изя, где? что за inite?
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
24.02.2015, 12:53 27
>>что за inite?
Функция инициализации в библиотеке.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
24.02.2015, 13:02  [ТС] 28
Витальич, в lcd.c чтоли? А смысл если у меня итак этот тоже самое в моей программе?
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 20
24.02.2015, 13:55 29
Ну или в main() добавьте ANSEL = 0; в самое начало.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
24.02.2015, 14:08  [ТС] 30
... это уж давно сделано...
0
179 / 164 / 30
Регистрация: 14.02.2013
Сообщений: 1,463
24.02.2015, 14:58 31
Сделал вот так и всё пошло.

C++
1
2
3
4
5
6
7
8
9
void
lcd_write(unsigned char c)
{
    __delay_us(40);
    LCD_DATA = ( ( c >> 4 ) & 0x0F );
    LCD_STROBE();
    LCD_DATA =  c;    //эта строка
    LCD_STROBE();
}
а было вот

C++
1
2
3
4
5
6
7
8
9
void
lcd_write(unsigned char c)
{
    __delay_us(40);
    LCD_DATA = ( ( c >> 4 ) & 0x0F );
    LCD_STROBE();
    LCD_DATA = ( c & 0x0F );       //эта строка
    LCD_STROBE();
}
Добавлено через 13 минут
Исходя из каких размышлений написали это LCD_DATA = ( c & 0x0F ); ?
Я с подобным сталкивался не раз.
Может так в институтах учат?
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
24.02.2015, 16:17  [ТС] 32
РРР.... Я это не писал. Это так и было в стандартной библиотеки. Я правил только в начале :
#define LCD_RS RA0
//#define LCD_RW RB1
#define LCD_EN RA1

#define LCD_DATA PORTC
и в конце
TRISA=0;
TRISC=0;

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

все. просто я подставил свои названия портов. больше я не правил --- это стандартная библиотека hi-tech

ПОзже у себя проверю)
Можете все же выложить вашу библиотеку?
0
179 / 164 / 30
Регистрация: 14.02.2013
Сообщений: 1,463
24.02.2015, 16:36 33
Вот рабочая библиотека с исправлением попробуйте её.

Новая папка.rar

для вот этого подключения.

Работа с ИЖК (PIC16F676, HiTech)
0
179 / 164 / 30
Регистрация: 14.02.2013
Сообщений: 1,463
24.02.2015, 16:38 34
Моя библиотека не будет работать с вашим компилятором.
Моя библиотека будет работать только с MicroC pro.
1
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
25.02.2015, 16:16  [ТС] 35
Блин... Жаль...
А как вы отличили MCLR? У меня не получается...

Добавлено через 22 часа 11 минут
Попробовал... Не вышло... Так показывает только верхнюю строку, а нижнюю - нет.
0
25.02.2015, 16:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2015, 16:16
Помогаю со студенческими работами здесь

PIC16F676. Конфигурация МК
Уважаемые форумчане помогите новичку. Я пытаюсь написать программу под pic16f676. вернее пытаюсь...

Чтение из PORTA PIC16F676
И ждать пробовал и от питания подводил. Не читает первый бит PORTA как set и все тут! На...

Прокомментировать программу для МК PIC16F676-I/P
Уважаемые знатоки языка. Мне для курсового и дипломного проекта нужно прокомментировать программу...

Контроллер холодильника, прошивка PIC16F676
Попал сей девайс.Название аппарата с которого принесли не знаю.Управление собранно на...

Контроль светодиодов в таймере (PIC16F676, ASM)
На микроконтроллере PIC16F676 не получается добавить таймер чтобы по нулевым значениям через таймер...

PIC16F676 Header file for HI-TECH compilier
У кого есть файл описания регистров под HI-TECH для данного контроллера? Пыталcя прикрутить свой и...

Программа в МПлаб при переходе с PIC12F675 на pic16f676 пишет ошибку в PROTEUS
Дали задание на курсовой-у меня был готовый,сделанный с помощью PIC12F675,мне нужно кое-что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru