
Просмотров: 1756
ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы.
Описание драйвера
LCD индикаторы на драйвере ML1001 - русское описание 548.43 KB 540 downloads
LCD индикаторы на драйвере ML1001 - русское описание ...
LCD индикаторы на драйвере ML1001 - описание en 410.88 KB 426 downloads
LCD индикаторы на драйвере ML1001 - описание en ...RDN0007 индикатор построен на драйвере ML1001
он представляет собой восмиразрядный семисегментный индикатор, с дополнительными индикаторами. Маркировка сегментом имеет следующий вид (хотя я в в нем ничего не понял)
Описание индикатора

LCD индикаторы на драйвере ML1001 - индикатор RDN0007 1.64 MB 552 downloads
LCD индикаторы на драйвере ML1001 - индикатор RDN0007 ...F теперь самое интересное, подключение индикатора и формирование индикации. Все примеры будут приведены для микроконтроллеров семейства PIC16, жертва PIC16F690 – это микроконтроллер (как по мне) второго поколения из этой серии (третье это там где 4 цифры после буквы F, например, PIC16F1936) .
Подключение индикатора:
Это вариант с подключением индикатора для использования модуля SPI для передачи данных. Можно конечно использовать и программный вариант SPI, но это только трата времени и памяти если есть микроконтроллер со встроенным модулем.
В схеме подключения индикатора ничего заумного нет, можно питать и от 3 и от 5 вольт, выводы LOAD и CHK надо замкнуть, всё.
На схеме сразу же показан разъем для внутрисхемного программирования микроконтроллера, а также 4 кнопки для ввода информации. Для питания применен стабилизатор из серии LD1117 с выходным напряжение 5 вольт.
Написание программы:
Конфигурация микроконтроллера
#include <xc.h> #pragma config WDTE = ON // WDT enabled #pragma config PWRTE = ON // PWRT enabled #pragma config CP = ON // Program memory code protection is enabled #pragma config BOREN = ON // BOR enabled #pragma config FCMEN = OFF // Fail-Safe Clock Monitor is disabled #pragma config MCLRE = ON // MCLR pin function is MCLR #pragma config CPD = ON // Data memory code protection is enabled #pragma config IESO = OFF // Internal External Switchover mode is disabled #pragma config FOSC = INTRCIO // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN
Инициализация микроконтроллера
CLRWDT(); // сброс сторожевого таймера OSCCON=0b01110000; // 8MHz ANSEL = 0; // 0 = Digital I/O. Pin is assigned to port or special function. ANSELH = 0; // PORTA = 0; // TRISA = 0b00110100; // вход RA2/RA4/RA5 WPUA = 0b00110100; // включить подтягивающие резисторы на RA2/RA4/RA5 IOCA = 0b00110100; // Interrupt-on-change enabled RA2/RA4/RA5 PORTB = 0; // TRISB = 0b00110000; // RB5 вход USART, RB4 - копка 4 WPUB = 0b00010000; // включить подтягивающие резисторы RB4 IOCB = 0b00010000; // Interrupt-on-change enabled RB4 PORTC = 0; // TRISC = 0; // OPTION_REG = 0b00001111; // /* | |+++---- PS<2:0>:111-1 : 128 * | +------- PSA:1 = Prescaler is assigned to the WDT * +----------- RABPU:0 = Pull-ups on PORTA/PORTB are disabled by individual WPUAx control bits */ // настройка SSP модуля в режиме SPI SSPCON=0b00110010; /* ||++++---- SSPM<3:0>:0010 = SPI Master mode, clock = FOSC/64 * |+-------- CKP:1 = Idle state for clock is a high level (Microwire default) * +--------- SSPEN:1 = Enables serial port and configures SCK, SDO and SDI as serial port pins */ // настройка прерываний INTCON=0b11001000; /* |||||+++---- флаги прерываний * ||||+------- RABIE:1 = Enables the PORTA/PORTB change interrupt * |||+-------- INTE:0 = Disables the RA2/INT external interrupt * ||+--------- T0IE:0 = Disables the Timer0 interrupt * |+---------- PEIE:1 = Enables all unmasked peripheral interrupts * +----------- GIE:1 = Enables all unmasked interrupts */
Функция индикации, преобразование кодов символов для вывода на индикатор.
надо принять следующее, все наши семисегментные символы будет кодироваться следующим образом
например:
//====================================================================================== // символы знакогенератора // цифры // Characters signgenerator // Number // .gfedcba #define c0 0b00111111 // 0-0 #define c1 0b00000110 // 1-1 #define c2 0b01011011 // 2-2 "z" #define c3 0b01001111 // 3-3 #define c4 0b01100110 // 4-4 "Ч" #define c5 0b01101101 // 5-5 "S" #define c6 0b01111101 // 6-6 #define c7 0b00000111 // 7-7 #define c8 0b01111111 // 8-8 #define c9 0b01101111 // 9-9 #define c0t 0b10111111 // 0-0 #define c1t 0b10000110 // 1-1 #define c2t 0b11011011 // 2-2 "z" #define c3t 0b11001111 // 3-3 #define c4t 0b11100110 // 4-4 "Ч" #define c5t 0b11101101 // 5-5 "S" #define c6t 0b11111101 // 6-6 #define c7t 0b10000111 // 7-7 #define c8t 0b11111111 // 8-8 #define c9t 0b11101111 // 9-9 //====================================================================================== // символы //Characters #define c_ 0b00000000 // символ "пробел" #define cM 0b01000000 // символ "-" #define c__ 0b00001000 // символ "подчеркивание" #define c_o 0b01100011 // символ "-o" верний нолик #define cn 0b01010100 // "n" #define cN 0b00110111 // "П" #define co 0b01011100 // "o" #define cE 0b01111001 // "E" #define cr 0b01010000 // "r" #define cd 0b01011110 // "d" #define cb 0b01111100 // "b" #define ct 0b01111000 // "t" #define cA 0b01110111 // "A" #define cC 0b00111001 // "C" #define cH 0b01110110 // "H" #define cP 0b01110011 // "P" #define cc 0b01011000 // "c" #define ch 0b01110100 // "h" #define cL 0b00111000 // "L" #define ci 0b00010000 // "i" #define cq 0b01100111 // "q" #define cF 0b01110001 // "F" #define cU 0b00111110 // "U" #define cu 0b00011100 // "u" #define cuY 0b01101110 // "У" #define cI 0b00110000 // "I" #define cG 0b00111101 // "G" #define cS 0b01101101 // "S" #define cl 0b00011000 // "l" #define ca 0b01011111 // "a" #define cY 0b01110010 // "Y" #define cS 0b01101101 // "Y" #define ct3 0b01001001 // symbol "three features" #define ct2 0b01001000 // symbol "two features" #define ct1 0b00001000 // symbol "one feature" //======================================================================================
т.е
сегмент a – бит 0
сегмент b – бит 1
сегмент c – бит 2
сегмент d – бит 3
сегмент e – бит 4
сегмент f – бит 5
сегмент g – бит 6
сегмент h – бит 7 (точка)
Символы треугольники под знакоместами будут кодироваться в отдельном байте. аналогичным образом.
Для загрузки в индикатор мы выделим 9 байт
unsigned char ind1,ind2,ind3,ind4,ind5,ind6,ind7,ind8,simv;
при записи в них наших “графических” изображение функция indic (), будет перекодировать и выводить на индикатор чрез SPI модуль микроконтроллера. Сама функция индикации
// индикация void indic (void) { BU1=BU2=BU3=BU4=BU5=BU6=BU7=BU8=BU9=0; // очистка буфера // преобразование символов в буфер передачи // установка стрелки if(simv&0x80) BU1 |= 0b10000000; if(simv&0x40) BU3 |= 0b00000001; if(simv&0x20) BU4 |= 0b00000010; if(simv&0x10) BU5 |= 0b00000100; if(simv&0x08) BU6 |= 0b00001000; if(simv&0x04) BU7 |= 0b00010000; if(simv&0x02) BU8 |= 0b00100000; if(simv&0x01) BU9 |= 0b01000000; // символ 1 if(ind1&0x80) BU2 |= 0b00000001; if(ind1&0x40) BU1 |= 0b00000100; if(ind1&0x20) BU1 |= 0b00001000; if(ind1&0x10) BU1 |= 0b00000010; if(ind1&0x08) BU1 |= 0b00000001; if(ind1&0x04) BU1 |= 0b01000000; if(ind1&0x02) BU1 |= 0b00100000; if(ind1&0x01) BU1 |= 0b00010000; // символ 2 if(ind2&0x80) BU3 |= 0b00000010; if(ind2&0x40) BU2 |= 0b00001000; if(ind2&0x20) BU2 |= 0b00010000; if(ind2&0x10) BU2 |= 0b00000100; if(ind2&0x08) BU2 |= 0b00000010; if(ind2&0x04) BU2 |= 0b10000000; if(ind2&0x02) BU2 |= 0b01000000; if(ind2&0x01) BU2 |= 0b00100000; // символ 3 if(ind3&0x80) BU4 |= 0b00000100; if(ind3&0x40) BU3 |= 0b00010000; if(ind3&0x20) BU3 |= 0b00100000; if(ind3&0x10) BU3 |= 0b00001000; if(ind3&0x08) BU3 |= 0b00000100; if(ind3&0x04) BU4 |= 0b00000001; if(ind3&0x02) BU3 |= 0b10000000; if(ind3&0x01) BU3 |= 0b01000000; // символ 4 if(ind4&0x80) BU5 |= 0b00001000; if(ind4&0x40) BU4 |= 0b00100000; if(ind4&0x20) BU4 |= 0b01000000; if(ind4&0x10) BU4 |= 0b00010000; if(ind4&0x08) BU4 |= 0b00001000; if(ind4&0x04) BU5 |= 0b00000010; if(ind4&0x02) BU5 |= 0b00000001; if(ind4&0x01) BU4 |= 0b10000000; // символ 5 if(ind5&0x80) BU6 |= 0b00010000; if(ind5&0x40) BU5 |= 0b01000000; if(ind5&0x20) BU5 |= 0b10000000; if(ind5&0x10) BU5 |= 0b00100000; if(ind5&0x08) BU5 |= 0b00010000; if(ind5&0x04) BU6 |= 0b00000100; if(ind5&0x02) BU6 |= 0b00000010; if(ind5&0x01) BU6 |= 0b00000001; // символ 6 if(ind6&0x80) BU7 |= 0b00100000; if(ind6&0x40) BU6 |= 0b10000000; if(ind6&0x20) BU7 |= 0b00000001; if(ind6&0x10) BU6 |= 0b01000000; if(ind6&0x08) BU6 |= 0b00100000; if(ind6&0x04) BU7 |= 0b00001000; if(ind6&0x02) BU7 |= 0b00000100; if(ind6&0x01) BU7 |= 0b00000010; // символ 7 if(ind7&0x80) BU8 |= 0b01000000; if(ind7&0x40) BU8 |= 0b00000001; if(ind7&0x20) BU8 |= 0b00000010; if(ind7&0x10) BU7 |= 0b10000000; if(ind7&0x08) BU7 |= 0b01000000; if(ind7&0x04) BU8 |= 0b00010000; if(ind7&0x02) BU8 |= 0b00001000; if(ind7&0x01) BU8 |= 0b00000100; // символ 8 if(ind8&0x80) BU9 |= 0b10000000; if(ind8&0x40) BU9 |= 0b00000010; if(ind8&0x20) BU9 |= 0b00000100; if(ind8&0x10) BU9 |= 0b00000001; if(ind8&0x08) BU8 |= 0b10000000; if(ind8&0x04) BU9 |= 0b00100000; if(ind8&0x02) BU9 |= 0b00010000; if(ind8&0x01) BU9 |= 0b00001000; // передача на индикатор DCLK = 0; SSPBUF = BU9; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU8; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU7; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU6; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU5; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU4; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU3; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU2; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; SSPBUF = BU1; while(!PIR1bits.SSPIF); PIR1bits.SSPIF=0; NOP(); DCLK = 1; NOP(); DCLK = 0; }
Для работы понадобиться функция преобразования двоичных числе и десятичные, вот пример такой функции:
//Преобразование 16 бит двоичного чила в десятичное со знаком //chisloin диапазон десятичных чисел -2.147.483.648 до +2.147.483.647 //des расположение десятичной точки void bin_dec (long chisloin,char des) { unsigned char BU1,BU2,BU3,BU4,BU5,BU6,BU7,BU8; static bit MINUS; long chislo; // регистры преобразователя //инциализация переменных chislo=chisloin; // преобразование MINUS=0; //обработка отрицательных чисел if(chislo <0) { chislo=-chislo; MINUS=1; } BU1=chislo%100000000/10000000; BU2=chislo%10000000/1000000; BU3=chislo%1000000/100000; BU4=chislo%100000/10000; BU5=chislo%10000/1000; BU6=chislo%1000/100; BU7=chislo%100/10; BU8=chislo%10; //очистка незначащих нулей if (BU1==0) { BU1=10; if (BU2==0) { BU2=10; if (BU3==0) { BU3=10; if (BU4==0) { BU4=10; if (BU5==0) { BU5=10; if (BU6==0) { BU6=10; if (BU7==0) { BU7=10; } } } } } } } // установка символа минус if(MINUS==1) { if(BU7==10) { BU7=11; } else if(BU6==10) { BU6=11; } else if(BU5==10) { BU5=11; } else if(BU4==10) { BU4=11; } else if(BU3==10) { BU3=11; } else if(BU2==10) { BU2=11; } else if(BU1==10) { BU1=11; } } //преобразование чисел в символы индикатора if(des==8)ind8=decodt[BU8]; else ind8=decod[BU8]; if(des==7)ind7=decodt[BU7]; else ind7=decod[BU7]; if(des==6)ind6=decodt[BU6]; else ind6=decod[BU6]; if(des==5)ind5=decodt[BU5]; else ind5=decod[BU5]; if(des==4)ind4=decodt[BU4]; else ind4=decod[BU4]; if(des==3)ind3=decodt[BU3]; else ind3=decod[BU3]; if(des==2)ind2=decodt[BU2]; else ind2=decod[BU2]; if(des==1)ind1=decodt[BU1]; else ind1=decod[BU1]; }//---------------------------------------------------------------------------------------
Проект для разработки устройств

LCD индикаторы на драйвере ML1001 - проект на PIC16F690 373.78 KB 702 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 ...Схема в формате PDF

LCD индикаторы на драйвере ML1001 - проект на PIC16F690 - схема 40.12 KB 478 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690...Это может быть интересно
MPLAB® Harmony – или как это просто! Часть 4.
Просмотров: 1813 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …Temperature measurement with NTC thermistor.
Просмотров: 95 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …DS18B20 – удаленный контроль температуры
Просмотров: 2938 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров, и выводить информацию …Проект с использованием MCC часть 03
Просмотров: 1471 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
Просмотров: 1074 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера. В …LED модуль P10C4V12
Просмотров: 2983 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …PIC18 – модуль DMA
Просмотров: 1058 Введение Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной обработки …MAX7219/21 и 8х8 LED дисплеи
Просмотров: 882 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно Метки:MAX7219, MAX7221Проект с использованием MCC часть 15
Просмотров: 1417 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …MPLAB® Harmony – или как это просто! Часть 1.
Просмотров: 3436 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …