Показать сообщение отдельно
Старый 07.03.2010, 20:21   #431   
Форумец
 
Сообщений: 1,532
Регистрация: 19.02.2009
Возраст: 54
Записей в дневнике: 1

petrd вне форума Не в сети
Цитата:
Сообщение от viktor110668 Посмотреть сообщение
скажите где посмотреть процедуру написания проги на с для работы ацп и индикатора 16х2
Например, в примерах MikroC, выглядит так:
Код:
/*
 * Project name:
     ADC_on_LCD (Displaying ADC result on LCD)
 * Copyright:
     (c) MikroElektronika, 2005-2008.
 * Description:
     This code demonstrates how to use library function ADC_read, and library
     procedures and functions for LCD display (4 bit interface).
 * Test configuration:
     MCU:             PIC16F887
     Dev.Board:       EasyPIC5
     Oscillator:      HS, 08.0000 MHz
     Ext. Modules:    LCD
     SW:              mikroC v8.0
 * NOTES:
     None.
*/

unsigned char ch;
unsigned int adc_rd;
char *text;
long tlong;

void main() {
  INTCON = 0;                              // disable all interrupts
  ANSEL  = 0x04;                           // Configure AN2 pin as analog input
  TRISA  = 0x04;
  ANSELH = 0;                              // Configure other AN pins as digital I/O
  Lcd_Config(&PORTB, 4, 5, 6, 3, 2, 1, 0); // Lcd_Init_EP5, see Autocomplete
  LCD_Cmd(LCD_CURSOR_OFF);                 // send command to LCD (cursor off)
  LCD_Cmd(LCD_CLEAR);                      // send command  to LCD (clear LCD)

  text = "mikroElektronika";               // assign text to string
  LCD_Out(1,1,text);                       // print string a on LCD, 1st row, 1st column
  text = "LCD example";                    // assign text to string
  LCD_Out(2,1,text);                       // print string a on LCD, 2nd row, 1st column

  ADCON1     = 0x82;                       // configure VDD as Vref, and analog channels
  TRISA      = 0xFF;                       // designate PORTA as input
  Delay_ms(2000);
  text  = "voltage:";                      // assign text to string
  while (1) {
    adc_rd  = ADC_read(2);                 // get ADC value from 2nd channel
    LCD_Out(2,1,text);                     // print string a on LCD, 2nd row, 1st column

    tlong = (long)adc_rd * 5000;           // covert adc reading to milivolts
    tlong = tlong / 1023;                  // 0..1023 -> 0-5000mV

    ch     = tlong / 1000;                 // extract volts digit
    LCD_Chr(2,9,48+ch);                    // write ASCII digit at 2nd row, 9th column
    LCD_Chr_CP('.');

    ch    = (tlong / 100) % 10;            // extract 0.1 volts digit
    LCD_Chr_CP(48+ch);                     // write ASCII digit at cursor point

    ch    = (tlong / 10) % 10;             // extract 0.01 volts digit
    LCD_Chr_CP(48+ch);                     // write ASCII digit at cursor point

    ch    = tlong % 10;                    // extract 0.001 volts digit
    LCD_Chr_CP(48+ch);                     // write ASCII digit at cursor point
    LCD_Chr_CP('V');

    Delay_ms(1);
  }
}//~!
  Ответить с цитированием