Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Подключение разных дисплейчиков
mg12
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 22 мар 2010, 21:22

Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Сообщение mg12 »

Уважаемые гуру PIC
Помогите начинающему.
Необходимо по схеме написать прошивку на LCD на русском.
при нажатии кнопок 1,2,3,4,5,6,7, и 8 включаються светики 1,2,3,4,5,6,7, и оптореле на 0,1с и точно также кнопки 9-16.
На дисплее информация о включении к примеру "Прибор включен кнопка 1 ВКЛ" и так далее. при нажатии кнопок 9-16 "Прибор выключен кнопка 9 ВЫКЛ"
С надежой на спасение.
Заранне Благодарен.
Вложения
Key1.jpg
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Нужна помощь

Сообщение rhf-admin »

Ну что же, попробовать можно. Но для начала - вопрос по схеме: опиши как ты себе представляешь работу клавиатуры (подробно, как определяется нажатие конкретной кнопки, какие линии входы, какие выходы, в общем весь процесс).
С уважением, администрация сайта.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Нужна помощь

Сообщение rhf-admin »

Посмотрел, оказывается эти темы освещались на сайте:
http://radiohlam.ru/control/dot_matrix_LCD.htm - подключение ЖК
http://radiohlam.ru/control/keyboard.htm - клавиатура
Там также есть примеры программ.
В чём проблема? Почитай, подумай и скомпануй это всё в одну программу.
Представь хотя бы какой-нибудь вариант своей версии, а потом уже с ним будем разбираться.
С уважением, администрация сайта.
mg12
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 22 мар 2010, 21:22

Re: Нужна помощь

Сообщение mg12 »

Огромное спасибо что отликнулись.
По работе схемы.
При нажатии кнопки S1 включается светик 1 и на дисплее показывае инфу в виде "Система включена кнопка 1" и тк останеться в трегерном режиме.
При нажатии кнопки S2 включается светик 2 и на дисплее показывае инфу в виде "Система включена кнопка 2" и так далее по восмую кнопку.
При нажатии кнопки S9 выключается светик 1 и на дисплее показывает "Система выключена кнопка 9" и так далее по 16 кнопку.
Но есть одно но, вместо светиков будет оптореле.

Я тут пробывал писать на бесике но где-то зашел за тучу.
мне надо не тригерный режим а импульсный.
Укажите пожалуйста мои ошибки.
Заранее благодарен.


Define LCD_DREG PORTD ' LCD
Define LCD_RSREG PORT
Define LCD_RSBIT 0
Define LCD_EREG PORT
Define LCD_EBIT 1

ADCON1 = 7 ' PORT
Low PORT.2 ' LCD R/W low
Pause 300 ' LCD

option_reg=0 'PORTB

TRISB=%11110000 'PORTB 7654 3210
TRISC=%00000000 'PORTC

portb=0:portc=0 'PORTB v PORTC v 0
lcdout $FE,1 'LCD
lcdout $FE,2,"Прибор Включен"

SW1 var byte
SW2 var byte
SW3 var byte
SW4 var byte
SW5 var byte
SW6 var byte
SW7 var byte
SW8 var byte
SW9 var byte
SW10 var byte
SW11 var byte
SW12 var byte
SW13 var byte
SW14 var byte
SW15 var byte
SW16 var byte

if portb.4=0 then SW1=1
if portb.5=0 then SW2=1
if portb.6=0 then SW3=1
if portb.7=0 then SW4=1
if portb.4=0 then SW5=1
if portb.5=0 then SW6=1
if portb.6=0 then SW7=1
if portb.7=0 then SW8=1
if portb.4=0 then SW9=1
if portb.5=0 then SW10=1
if portb.6=0 then SW11=1
if portb.7=0 then SW12=1
if portb.4=0 then SW13=1
if portb.5=0 then SW14=1
if portb.6=0 then SW15=1
if portb.7=0 then SW16=1

SW1=0:SW2=0:SW3=0:SW4=0:SW5=0:SW6=0:SW7=0:SW8=0:SW9=0
SW10=0:SW11=0:SW12=0:SW13=0:SW14=0:SW15=0:SW16=0

return

lcdgoster:
if SW1=1 then lcdout $FE,$C0,"Система включена кнопка 1":portc.0=1 'portc.0
if SW2=1 then lcdout $FE,$C0,"Система включена кнопка 2":portc.1=1 'portc.1
if SW3=1 then lcdout $FE,$C0,"Система включена кнопка 3":portc.2=1
if SW4=1 then lcdout $FE,$C0,"Система включена кнопка 4":portc.3=1
if SW5=1 then lcdout $FE,$C0,"Система включена кнопка 5":portc.4=1
if SW6=1 then lcdout $FE,$C0,"Система включена кнопка 6":portc.5=1
if SW7=1 then lcdout $FE,$C0,"Система включена кнопка 7":portc.6=1
if SW8=1 then lcdout $FE,$C0,"Система включена кнопка 8":portc.7=1
if SW9=1 then lcdout $FE,$C0,"Система выключена кнопка 9":portc.0=0
if SW10=1 then lcdout $FE,$C0,"Система выключена кнопка 10":portc.1=0
if SW11=1 then lcdout $FE,$C0,"Система выключена кнопка 11":portc.2=0
if SW12=1 then lcdout $FE,$C0,"Система выключена кнопка 12":portc.3=0
if SW13=1 then lcdout $FE,$C0,"Система выключена кнопка 13":portc.4=0
if SW14=1 then lcdout $FE,$C0,"Система выключена кнопка 14":portc.5=0
if SW15=1 then lcdout $FE,$C0,"Система выключена кнопка 15":portc.6=0
if SW16=1 then lcdout $FE,$C0,"Система выключена кнопка 16":portc.7=0


return

end
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Нужна помощь

Сообщение rhf-admin »

Конечно я не сильно люблю языки высокого уровня применительно к контроллерам, но всё же попробую разобраться.
Насколько я понимаю, команда
TRISB=%11110000 'PORTB
настраивает выводы порта B RB0-RB3 - выходы, RB4-RB7 - входы. Ладно.
Далее проверяется уровень сигнала на линиях RB4-RB7, командами
if portb.4=0 then SW1=1
и т.д. Но я нигде не увидел, чтобы выходы RB0-RB3 устанавливались в 1.
Если этого не сделать - откуда появится высокий уровень на входах RB4-RB7 ??? Судя по всему они один раз устанавливаются в ноль и всё: portb=0:portc=0.
Далее, почему все команды проверки идут подряд:
if portb.4=0 then SW1=1
if portb.5=0 then SW2=1
if portb.6=0 then SW3=1
if portb.7=0 then SW4=1
if portb.4=0 then SW5=1
if portb.5=0 then SW6=1
if portb.6=0 then SW7=1
if portb.7=0 then SW8=1
if portb.4=0 then SW9=1
if portb.5=0 then SW10=1
if portb.6=0 then SW11=1
if portb.7=0 then SW12=1
if portb.4=0 then SW13=1
if portb.5=0 then SW14=1
if portb.6=0 then SW15=1
if portb.7=0 then SW16=1
К одному входу подключены четыре кнопки. Как различить, какая кнопка нажата?
А различие это делается так:
Сначала устанавливают высокий уровень на выходе RB0 (на остальных выходах низкий уровень) и проверяют входы.
Таким образом проверяют нажатие кнопок SW1-SW4.
Потом переключают выход RB0 в 0, а в 1 устанавливают выход RB1 и опять проверяют входы.
В этом случае проверяется нажатие кнопок SW5-SW8 и т.д.
А чтобы не было к.з. (если вдруг нажмут две кнопки одновременно, одна из которых подключена к выходу, установленному в 1, а другая к выходу, установленному в 0) делают диодную развязку.
С уважением, администрация сайта.
mg12
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 22 мар 2010, 21:22

Re: Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Сообщение mg12 »

Еще раз спасибо за помощь!
попробывал дописать
и вот что получилось.
PCON=%00000000
define osc 20

Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1

ADCON1 = 7
Low PORTE.2
Pause 300

option_reg=0

TRISB=%11110000 'PORTB
TRISC=%00000000 'PORTC
portb=0:portc=0 'PORTB
lcdout $FE,1 'LCD
lcdout $FE,2," Прибор Включен."

SW1 var byte
SW2 var byte
SW3 var byte
SW4 var byte
SW5 var byte
SW6 var byte
SW7 var byte
SW8 var byte
SW9 var byte
SW10 var byte
SW11 var byte
SW12 var byte
SW13 var byte
SW14 var byte
SW15 var byte
SW16 var byte

portb=%11111110
if portb.4=0 then SW1=1
if portb.5=0 then SW2=1
if portb.6=0 then SW3=1
if portb.7=0 then SW4=1

portb=%11111101

if portb.4=0 then SW5=1
if portb.5=0 then SW6=1
if portb.6=0 then SW7=1
if portb.7=0 then SW8=1

portb=%11111011

if portb.4=0 then SW9=1
if portb.5=0 then SW10=1
if portb.6=0 then SW11=1
if portb.7=0 then SW12=1

portb=%11110111
if portb.4=0 then SW13=1
if portb.5=0 then SW14=1
if portb.6=0 then SW15=1
if portb.7=0 then SW16=1

degisken0:
SW1=0:SW2=0:SW3=0:SW4=0:SW5=0:SW6=0:SW7=0:SW8=0:SW9=0
SW10=0:SW11=0:SW12=0:SW13=0:SW14=0:SW15=0:SW16=0

return

lcdgoster:
if SW1=1 then lcdout $FE,$C0,"Система включена кнопка 1":portc.0=1
if SW2=1 then lcdout $FE,$C0,"Система включена кнопка 2":portc.1=1
if SW3=1 then lcdout $FE,$C0,"Система включена кнопка 3":portc.2=1
if SW4=1 then lcdout $FE,$C0,"Система включена кнопка 4":portc.3=1
if SW5=1 then lcdout $FE,$C0,"Система включена кнопка 5":portc.4=1
if SW6=1 then lcdout $FE,$C0,"Система включена кнопка 6":portc.5=1
if SW7=1 then lcdout $FE,$C0,"Система включена кнопка 7":portc.6=1
if SW8=1 then lcdout $FE,$C0,"Система включена кнопка 8":portc.7=1
if SW9=1 then lcdout $FE,$C0,"Система выключена кнопка 9":portc.0=0
if SW10=1 then lcdout $FE,$C0,"Система выключена кнопка 10":portc.1=0
if SW11=1 then lcdout $FE,$C0,"Система выключена кнопка 11":portc.2=0
if SW12=1 then lcdout $FE,$C0,"Система выключена кнопка 12":portc.3=0
if SW13=1 then lcdout $FE,$C0,"Система выключена кнопка 13":portc.4=0
if SW14=1 then lcdout $FE,$C0,"Система выключена кнопка 14":portc.5=0
if SW15=1 then lcdout $FE,$C0,"Система выключена кнопка 15":portc.6=0
if SW16=1 then lcdout $FE,$C0,"Система выключена кнопка 16":portc.7=0
return

end

Только у меня вопрос: будет ли распозноваться русский язык?

Во тут у меня заход за тучи.
mg12
Читатель
Читатель
Сообщения: 5
Зарегистрирован: 22 мар 2010, 21:22

Re: Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Сообщение mg12 »

Еще раз спасибо за помощь!
попробывал дописать
и вот что получилось.
PCON=%00000000
define osc 20

Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG PORTE
Define LCD_EBIT 1

ADCON1 = 7
Low PORTE.2
Pause 300

option_reg=0

TRISB=%11110000 'PORTB
TRISC=%00000000 'PORTC
portb=0:portc=0 'PORTB
lcdout $FE,1 'LCD
lcdout $FE,2," Прибор Включен."

SW1 var byte
SW2 var byte
SW3 var byte
SW4 var byte
SW5 var byte
SW6 var byte
SW7 var byte
SW8 var byte
SW9 var byte
SW10 var byte
SW11 var byte
SW12 var byte
SW13 var byte
SW14 var byte
SW15 var byte
SW16 var byte

portb=%11111110
if portb.4=0 then SW1=1
if portb.5=0 then SW2=1
if portb.6=0 then SW3=1
if portb.7=0 then SW4=1

portb=%11111101

if portb.4=0 then SW5=1
if portb.5=0 then SW6=1
if portb.6=0 then SW7=1
if portb.7=0 then SW8=1

portb=%11111011

if portb.4=0 then SW9=1
if portb.5=0 then SW10=1
if portb.6=0 then SW11=1
if portb.7=0 then SW12=1

portb=%11110111
if portb.4=0 then SW13=1
if portb.5=0 then SW14=1
if portb.6=0 then SW15=1
if portb.7=0 then SW16=1

degisken0:
SW1=0:SW2=0:SW3=0:SW4=0:SW5=0:SW6=0:SW7=0:SW8=0:SW9=0
SW10=0:SW11=0:SW12=0:SW13=0:SW14=0:SW15=0:SW16=0

return

lcdgoster:
if SW1=1 then lcdout $FE,$C0,"Система включена кнопка 1":portc.0=1
if SW2=1 then lcdout $FE,$C0,"Система включена кнопка 2":portc.1=1
if SW3=1 then lcdout $FE,$C0,"Система включена кнопка 3":portc.2=1
if SW4=1 then lcdout $FE,$C0,"Система включена кнопка 4":portc.3=1
if SW5=1 then lcdout $FE,$C0,"Система включена кнопка 5":portc.4=1
if SW6=1 then lcdout $FE,$C0,"Система включена кнопка 6":portc.5=1
if SW7=1 then lcdout $FE,$C0,"Система включена кнопка 7":portc.6=1
if SW8=1 then lcdout $FE,$C0,"Система включена кнопка 8":portc.7=1
if SW9=1 then lcdout $FE,$C0,"Система выключена кнопка 9":portc.0=0
if SW10=1 then lcdout $FE,$C0,"Система выключена кнопка 10":portc.1=0
if SW11=1 then lcdout $FE,$C0,"Система выключена кнопка 11":portc.2=0
if SW12=1 then lcdout $FE,$C0,"Система выключена кнопка 12":portc.3=0
if SW13=1 then lcdout $FE,$C0,"Система выключена кнопка 13":portc.4=0
if SW14=1 then lcdout $FE,$C0,"Система выключена кнопка 14":portc.5=0
if SW15=1 then lcdout $FE,$C0,"Система выключена кнопка 15":portc.6=0
if SW16=1 then lcdout $FE,$C0,"Система выключена кнопка 16":portc.7=0
return

end

Только у меня вопрос: будет ли распозноваться русский язык?

Во тут у меня заход за тучи.
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 3060
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Сообщение rhf-admin »

Будет ли распознаваться русский язык зависит от самого LCD. Если туда зашит русский язык - будет распознаваться, если не зашит - не будет.
Есть ещё правда в LCD область памяти, куда можно самому что хочешь зашить, но во-первых, она всего на несколько символов, а во-вторых - лишний код писать однако.
С уважением, администрация сайта.
Fuhrer
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 03 май 2010, 18:55
Откуда: Екатеринбург
Контактная информация:

Re: Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Сообщение Fuhrer »

[img]
mg12 писал(а): Только у меня вопрос: будет ли распозноваться русский язык?
Во тут у меня заход за тучи.
Никакого захода за тучи не может быть. Опрашивай его с интервалом, по которому ты успеешь записать его символы на бумажко :) Начерти листочек формата А4 и выводи каждую группу символов примерно по алгоритму: вывод первых 16 знаков по порядку -> кольцо программы с опросом кнопки -> кнопку нажал -> инкремент (в нужном количестве) адресов на следующие 16 символов и так далее. Если нет от дисплея карты, так и делаем. Вот я сваял из дисплея от телефона. На твоём кстати камне. Всё гуд. Может поможет чем? У меня на ассемблере. И вообще надо на сайте выложить. Радиохлам всётаки :D А как выложить архив, 3 метра весит?
Fuhrer
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 03 май 2010, 18:55
Откуда: Екатеринбург
Контактная информация:

Re: Нужна помощь по подключению LCD и клавиатуры к PIC16F877

Сообщение Fuhrer »

Вопрос к администратору: Уважаемый админ, а как выложить архив с проектом?
Ответить