Вы вошли на сайт, как Гость
Регистрация

Использование ЖК дисплея (LCD)

Использование ЖК дисплея (LCD)
(Example №7)

Этот пример иллюстрирует использование буквенно-цифрового ЖК-дисплея. Функции библиотек существенно позволит упростить эту программу. В реальном устройстве вместо значения напряжения, например, может быть показана температура.

/*Header******************************************************/

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

unsigned char ch;                    //
unsigned int adc_rd;                 // Объявление переменных
char *text;                          //
long tlong;                          //

void main() {
    INTCON = 0;                      // Все прерывания отключены 
    ANSEL = 0x04;                    // Вход RA2 настроен как аналоговый вход
    TRISA = 0x04;
    ANSELH = 0;                      // Остальные выводы настроены как цифровые
    
    Lcd_Init();                      // ЖК-дисплей инициализация 
    Lcd_Cmd(_LCD_CURSOR_OFF);        // LCD команды (курсор выключен)
    Lcd_Cmd(_LCD_CLEAR);             // LCD команды (очистить LCD)
    
    text = "mikroElektronika";       // Определяем первое сообщение
    Lcd_Out(1,1,text);               // Запись первого сообщения в первой строке 
    text = "LCD example";            // Определить второе сообщение 
    Lcd_Out(2,1,text);               // Определяем первое сообщение
    
    ADCON1 = 0x82;                   // Опорным напряжением является VCC
    TRISA = 0xFF;                    // Все выводы настроены как входы
    Delay_ms(2000);
    
    text = "voltage:";               // Определение третьего сообщения
    
    while (1) {
        adc_rd = ADC_Read(2);        // A/D преобразование. Pin RA2 является входом. 
        Lcd_Out(2,1,text);           // Запись результата во второй строке 
        tlong = (long)adc_rd * 5000; // Преобразование результата в милливольтах
        tlong = tlong / 1023;        // 0 .. 1023 -> 0-5000mV 
        ch = tlong / 1000;           // Извлечь вольты (тысячи милливольт)
                                     // из результата 
        Lcd_Chr(2,9,48+ch);          // Запись результата в текстовом формате
        Lcd_Chr_CP('.');
        ch = (tlong / 100) % 10;     // Извлечение сотен милливольт 
        Lcd_Chr_CP(48+ch);           // Записываем результат в текстовом формате
        ch = (tlong / 10) % 10;      // Извлечение десятков милливольт
        Lcd_Chr_CP(48+ch);           // Запись результата в текстовом формате
        ch = tlong % 10;             // Извлечение единиц для милливольт
        Lcd_Chr_CP(48+ch);           // Запись результата в текстовом формате
        Lcd_Chr_CP('V');
        Delay_ms(1);
    }
}

Для того, чтобы этот пример работал правильно, необходимо поставить галочку в следующие библиотеки в Library Manager до компиляции: LCD, ADC.