lm75_anzeige.h


1
#ifndef _LM75_anzeige_INCLUDED_
2
#define _LM75_anzeige_INCLUDED_
3
4
#include <i2c.h>
5
#include <lcd.h>
6
#include <stdlib.h>
7
8
#pragma used+
9
10
void lm75_auf_lcd(unsigned char chip, unsigned char x_pos, unsigned char y_pos)
11
{
12
13
 char puffer[3];            // drei Zeichen für Zahlen größer 100
14
 unsigned char higher_byte; // für's einlesen des Temperatur-Registers des LM75
15
 unsigned char lower_byte;  // für's einlesen des Temperatur-Registers des LM75
16
 unsigned char i2c_addr;
17
18
  i2c_addr=0x90|(chip<<1);  // Adresse des angesprochenem LM75
19
  i2c_start();            // Start zur Datenübertragung auf dem I2C-Bus
20
  i2c_write(i2c_addr);      // Ansprechen des LM75
21
  i2c_write(0);             // Die "0" für lesen senden
22
  i2c_start();
23
  i2c_write(++i2c_addr);
24
  higher_byte=i2c_read(1);  // Empfang des higher_byte vom Temperatur-Register
25
  lower_byte=i2c_read(0);   // Empfang des lower_byte  vom Temperatur-Register
26
  i2c_stop();               // Ende zur Datenübertragung auf dem I2C-Bus
27
28
 lcd_gotoxy(x_pos,y_pos);
29
30
/*      
31
es muss geprüft werden ob dass letzte Bit(15) vom "Temperatur-Register" "high"
32
oder "low" ist. Wenn es "high" ist dann ist der Temperaturwert negativ.
33
Dabei muss das "higher_byte" erst mal invertiert werden und "1" dazu addieren
34
werden. (Siehe  Datenblatt) Ist der Wert nicht negativ dann entspricht das
35
Bitmuster dem Temperaturwert VOR dem Komma.
36
*/
37
38
  if (higher_byte >= 128)
39
   {
40
    higher_byte = ~(higher_byte);
41
    higher_byte =+1;
42
    lcd_putsf("-");
43
   } 
44
  else lcd_putsf("+");
45
  
46
  x_pos ++;                       // Die "Cursor-Position" um eins erhöhen
47
      
48
  lcd_gotoxy(x_pos,y_pos);
49
  itoa(higher_byte, puffer);      // schreibt den Bit-Wert vom higher_byte
50
  lcd_puts(puffer);               // an das Display
51
      
52
  x_pos ++;                       // auf jeden Fall die "Cursor-Position"
53
                                  // um eins erhöhen.
54
                                  
55
  if (higher_byte >=10) x_pos ++; // Falls der Wert höher wie 10, dann muss
56
                                  // der "Cursor" um zwei Stellen erhöht werden 
57
                                  
58
  if (higher_byte >=100)x_pos ++; // Falls der Wert höher wie 100, dann muss
59
                                  // der "cursor" um drei Stellen erhöht werden
60
  
61
  lcd_gotoxy(x_pos,y_pos);
62
  lcd_putsf(",");
63
  x_pos ++;
64
      
65
/*
66
Jetzt muss geprüft werden ob das Bit(7) vom "Temperatur-Register"
67
(7.Bit vom lower_byte) "high" oder "low" ist. Wenn es "low" ist, dann
68
ist der Wert hinter dem Komma "0". Sonnst ist der Wert "5".
69
*/      
70
  
71
  if (lower_byte >= 128) lcd_putsf("5");
72
  else lcd_putsf("0");
73
      
74
  x_pos ++;
75
  
76
  lcd_gotoxy(x_pos,y_pos);
77
  lcd_putchar(223);               // "Grad" Zeichen
78
  
79
  x_pos ++;
80
  
81
  lcd_gotoxy(x_pos,y_pos);
82
  lcd_putchar(20);                // Leerzeichen zum überschreiben von einstelligen
83
                                  // Zahlen auf zweistelligen Zahlen
84
      
85
}
86
#pragma used-
87
88
#endif