Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

funkcja sfprint(coś tam );

16 Mar 2007 08:31 1155 4
  • Poziom 10  
    Niewiem co sie kryje za sprintf(lcd_buffer,"t%u=%c%i.%u\xdfC",++i,j,temp/10,temp%10);
    a szczegulnie chodzi mi w jakiej zmiennej przechowywana jest temperatura

    posiadam wyświetlacz 4x40 znaków i niewiem jak np :
    w czkażdej linijce umieścić temperature ds1820 bo teraz sie wyświetla
    1-sza potem 2-ga itd ale tylko w jednej
    to jest gotowiec z Code Vision Avr działa na atmega8515 iwświetlaczu4x40
    #asm
    .equ __lcd_port=0x15
    #endasm

    #include <lcd.h> // LCD driver routines
    #include <ds1820.h>
    #include <delay.h>
    #include <stdio.h>
    #includ <lcd4x40>

    char lcd_buffer[33];

    /* maximum number of DS1820/DS18S20 connected to the 1 Wire bus */
    #define MAX_DEVICES 8

    /* DS1820/DS18S20 devices ROM code storage area */
    unsigned char rom_code[MAX_DEVICES][9];

    main()
    {
    unsigned char i,j,devices;
    int temp;

    lcd_init(16);
    lcd_putsf("CodeVisionAVR\n1 Wire Bus Demo");
    delay_ms(2000);
    lcd_clear();

    /* detect how many DS1820/DS18S20 devices
    are connected to the 1 Wire bus */
    devices=w1_search(0xf0,rom_code);
    sprintf(lcd_buffer,"%u DS1820\nDevice detected",devices);
    lcd_puts(lcd_buffer);
    delay_ms(2000);

    /* display the ROM codes for each device */
    if (devices)
    {
    for (i=0;i<devices;i++)
    {
    sprintf(lcd_buffer,"Device #%u ROM\nCode is:",i+1);
    lcd_clear();
    lcd_puts(lcd_buffer);
    delay_ms(2000);
    lcd_clear();
    for (j=0;j<8;j++)
    {
    sprintf(lcd_buffer,"%02X ",rom_code[i][j]);
    lcd_puts(lcd_buffer);
    if (j==3) lcd_gotoxy(0,1);
    };
    delay_ms(5000);
    };
    }
    else
    while (1); /* stop here if no devices were found */

    /* measure and display the temperature(s) */
    while (1)
    {
    for (i=0;i<devices;)
    {
    temp=ds1820_temperature_10(&rom_code[i][0]);
    j='+';
    if (temp<0)
    {
    j='-';
    temp=-temp;
    };
    sprintf(lcd_buffer,"t%u=%c%i.%u\xdfC",++i,j,temp/10,temp%10);
    lcd_clear();
    lcd_puts(lcd_buffer);
    delay_ms(800);
    };
    };
    }
  • Użytkownik usunął konto  
  • Poziom 10  
    chcę aby na wyświetlaczu 4x40 w było tak
    temperatura 1 =np:23 °c
    temperatura 2 = 30°c
    temperatura wpokoju = 22°c

    a pużniej może jeszcze dołoże pcf czyli zegarek
    Jestem laikem w C i niewiem jak wyłuskać kolejne temperatury,
    i godzine ale to może pozniej

    wyczytałem też ze C jest obiektowy czyli można pracować na obiektach
    ,a może polecił bys mi dobrą książke.

    Dodano po 7 [minuty]:

    no a jeżeli w zmiennej Device przechowywana jest ilość ds-ów to jak mam wiedziec który jest który i co to jest %u czy to kolejny numer ds-a

    Dodano po 11 [minuty]:

    Bardzo podoba mi sie programowanie tych kosteczek ,tyko mnie czeka
    troche nauki:D
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 10  
    W programie zmienilem:
    #include <lcd4x40.h>
    char lcd_buffer[161]; co daje tablice o tym rozmiarze prawda?


    lcd_init();
    lcd_putsf(" CodeVisionAVR\n Kapsi(malpa)poczta.onet.pl\n \n Dallas DS1820");
    delay_ms(4000);
    lcd_clear();

    po każdej literce \n napis wyświetlany jest linie niżej

    CodeVisionAVR
    Kapsi(malpa)poczta.onet.p
    Dallas DS1820

    Tak to wygląda