#include #include // 1 Wire Bus functions #asm .equ __w1_port=0x1B ;PORTA .equ __w1_bit=6 #endasm #include <1wire.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x15 ;PORTC #endasm #include int ascii_temp1_D,temp1_D; int ascii_temp1_U,temp1_U; int ascii_100; int T1 = 0; int deg; void affichage (void) { temp1_D = (T1 / 10); // divise T1 par 10 temp1_U = (T1 % 10); // reste de la division par 10 ascii_temp1_D = temp1_D | 0x30; // conversion ascii ascii_temp1_U = temp1_U| 0x30; lcd_gotoxy (15,3); lcd_putchar (ascii_temp1_D); lcd_gotoxy (16,3); lcd_putchar (ascii_temp1_U); } void signe (void) { /****************************************************************** * Gestion du signe de la valeur * ******************************************************************/ if ( T1 > 0x80 ) { T1 = T1 ^ 0xFF ; // OU ex bit à bit ( inversion des bits ) //T1 = T1 + 1; lcd_gotoxy(13,3); lcd_putsf("-"); // affiche le signe "-" } else { lcd_gotoxy(13,3); // affiche le signe "+" lcd_putsf("+"); } /****************************************************************** * Gestion du " 1 " pour une température > à 100°C * ******************************************************************/ if ( T1 > 0x63 ) // si > à 99 { T1 = T1 - 100; ascii_100 = 1 | 0x30; // conversion du 1 en ascii lcd_gotoxy (14,3); lcd_putchar (ascii_100); } else { lcd_gotoxy (14,3); // sinon afficher "0" lcd_putsf ("0"); } } // fin du sous programme SIGNE /****************************************************************** * Lecture de la valeur numérique de la température DS 1821 * ******************************************************************/ void capture (void) { w1_init(); // init 1 wire ( reset ) w1_write (0xEE); // demande de conversion delay_ms(100); w1_init(); // init 1 wire ( reset ) w1_write (0xAA); // demande d'envoie des données température T1 = w1_read(); // 1 wire config en lecture, valeur mise dans T1 ( 8 bits ) w1_write (0x22); // demande de stoper la conversion } void procedure (void) { capture (); signe (); affichage (); } void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xFF; ACSR=0x80; SFIOR=0x00; // 1 Wire Bus initialization w1_init(); // LCD module initialization lcd_init(20); lcd_clear(); lcd_gotoxy (1,0); lcd_putsf ("- DALLAS DS 1821 -"); lcd_gotoxy (5,1); lcd_putsf (" DQ = PA6 "); lcd_gotoxy (1,2); lcd_putsf ("Min=-55 MAX=+125"); deg = 0xDF; // symbole degrés. lcd_gotoxy (0,3); lcd_putsf ("Temperature : C"); lcd_gotoxy (17,3); lcd_putchar (deg); while (1) { procedure (); delay_ms(1000); }; }