Temeraturmåler (C-program).txt // Initialiserings-sekvens #include <stdio.h> #pragma model=medium #pragma code=0x0000 #pragma xdata=0x4000 #pragma asm=on #pragma parameters=register //#define display P4 #define keyboard P4 //--------------------------------- Definition af porte og funktioner ------------------------- bit RS at P5.0; // Definere bit Data input på port 5.0 bit RW at P5.1; // Definere bit data read (1)/write (0) på port 5.1 bit Enable at P5.2; // Definere bit enable på port 5.2 bit busy_ben at P4.7; // Definere bit busy_ben på port 4.7 bit oe_key at P5.3; // Definere bit oe_key på på port 5.3 bit clk_key at P5.5; // Definere bit clk_key på på port 5.5 bit temp at P5.4; // Definere bit tempføler på port 5.4 void wr_ins(char); void wr_data(char); void clr_scr(char); void cursor (char); void delay (char); void full_scr(); void ini_disp (); void busy_read(); void lcd_dkch(); void presence(); void wrbyte(char kode); // Definere funktion skriv instruktion // Definere funktion skriv data // Definere funktion ryd skærm // Definere funktion Sæt cursor et vilkårligt sted // Definere funktion delay // Definere funktion tekststreng // Definere funktion initialisering af display // Definere funktion // Definere funktion lær danske karakterer // Definere funktion - aflæsning af tempføler // Definere funktion til at skrive en byte char rdbyte(); // Definere funktion til at læse en byte char wr1temp(); // Definere funktion til at skrive en bit (1) char wr0temp(); // Definere funktion til at skrive en bit (0) char temperatur; char karakter; extern // Definering af extern tid extern vent60(); // Definering af extern tid extern // Definering af extern tid //--------------------------------- Danske karakterer ----------------------------------------- void lcd_dkch(void) // Lær danske karakterer char ch; // char variabel som tæller afsendte pixels const char dk_ch[]= 0x00, 0x0A, 0x00, 0x04, 0x04, 0x11, 0x0E, 0x00, // Hex koder for "smiley" 0x00, 0x00, 0x0E, 0x15, 0x15, 0x12, 0x0D, 0x00, // Hex koder for "æ" 0x00, 0x00, 0x0E, 0x13, 0x15, 0x19, 0x0E, 0x00, // Hex koder for "ø" 0x04, 0x0A, 0x0E, 0x01, 0x0F, 0x11, 0x0F, 0x00, // Hex koder for "å" 0x07, 0x0C, 0x14, 0x1F, 0x14, 0x14, 0x17, 0x00, // Hex koder for "Æ" 0x0E, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0E, 0x00, // Hex koder for "Ø" 0x04, 0x0A, 0x15, 0x11, 0x1F, 0x11, 0x11, 0x00, // Hex koder for "Å" 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00 // Hex koder for "gradtegn" ; // definitionen af :-) æ ø å Æ Ø Å "gradtegn". delay(1); wr_ins(0x40); // adresse sættes til start af CG-Ram.
delay(400); ch = 0; while(ch<=63) wr_data(dk_ch[ch]); ch++; busy_read(); wr_ins(0x80); delay(400); Temeraturmåler (C-program).txt // vent til færdig. // karakter sendes. // Skriver danske karakterer // pause efter sidste lcd_data. // curser til første plads. //--------------------------------- Main program ---------------------------------------------- void main (void) int x; char y; ini_disp(); lcd_dkch(); delay(1000); cursor(0); linie //full_scr(); tekststreng) presence(); wrbyte(0x0c); wrbyte(0x01); while (1) presence(); wrbyte(0xee); for (x=1;x<=5000;x++); presence(); wrbyte(0xaa); y=rdbyte(); // Main funktion. // Initialisere display. // Indlæser danske karakterer. // Pause inden der skrives på display // Placerer cursor på første plads i anden // Udfører funktionen full_scr. (skriv // Skriv byte til config/status // Skriv data til config/status // Uføres så længe der er strøm på. // Start AD converter // Vent 1 sekund // Nu vil vi læse temperatur cursor (0); fprintf(1,"temp = %d",temperatur); // Udskriver temperatur på display //--------------------------------- Skriv instruktion til display ----------------------------- void wr_ins(char karakter) display. RS=0; RW=0; P4=karakter; Enable=1; // Funktion til at skrive instruktioner til // Register valg. // Læs/skriv. // Skriver karakter til display. //--------------------------------- Skriv data til display ------------------------------------ void wr_data(char karakter) // Funktion til at skrive data til display. switch (karakter) case 'æ': karakter = 0X01; // Hvis karakteren er æ skriv HEX 0X01.
Temeraturmåler (C-program).txt // Hvis æ hop til slut(). case 'ø': karakter = 0X02; // Hvis karakteren er ø skriv HEX 0X02. // Hvis ø hop til slut(). case 'å': karakter = 0X03; // Hvis karakteren er å skriv HEX 0X03. // Hvis å hop til slut(). case 'Æ': karakter = 0X04; // Hvis karakteren er Æ skriv HEX 0X04. // Hvis Æ hop til slut(). case 'Ø': karakter = 0X05; // Hvis karakteren er Ø skriv HEX 0X05. // Hvis Ø hop til slut(). case 'Å': karakter = 0X06; // Hvis karakteren er Å skriv HEX 0X06. // Hvis Å hop til slut(). default: ; // Hvis karakteren ikke står ovenfor karakter = karakter. RS=1; // Register valg. RW=0; // Læs/skriv. P4=karakter; // Skriver karakter til display. Enable=1; // Pause inden næste bogstav. //--------------------------------- Slet skærm ------------------------------------------------ void clr_scr (void) //Sletning af display og curser til start af skærm. char space; // Tildeler variablen space værdien af en char. for (space=0;space<40;space++) wr_ins (0X80+space); wr_data (' '); for (space=0;space<40;space++); wr_ins (0XC0+space); wr_data (' '); wr_ins (0X80); //--------------------------------- Sæt cursor et vilkårligt sted på display ------------------ void cursor (char ch) // Denne funktion sætter curser på en vilkårlig plads på // displayet. Plads 0-40 er første linie char tal; // og plads 40-80 på den anden. if (ch<40) tal=0x80+ch; wr_ins (tal); else tal=0xc0+ch-40; wr_ins (tal); //--------------------------------- Pause tid -------------------------------------------------
Temeraturmåler (C-program).txt char delay(char tid) // Funktion Delay unsigned int taller; // Tildeler variablen taller værdien af en unsigned int for (taller=0; taller <tid; taller++); // Længde på pause //--------------------------------- Tekststreng ----------------------------------------------- void full_scr (void) // Funktion til at skrive en tekststreng. const char besked[] = ""; // Her skrives en tekst. char ch=0; // Tildeler variablen ch værdien af en char. while (ch<=39) // Her skrives linie længde. wr_data(besked[ch]); // Skriver besked til display. ch++; // Flytter til næste plads efter hver karakter. //--------------------------------- Initialisering af display --------------------------------- void ini_disp() delay (65000); delay (65000); delay (20000); wr_ins (0X38); delay (41000); wr_ins (0X38); wr_ins (0x38); wr_ins (0x38); wr_ins (0x06); wr_ins (0x0F); wr_ins (0x01); delay (16400); wr_ins (0x80); // Initialisering af display. //--------------------------------- Aflæser om der er kommunikation --------------------------- void busy_read() P4 = (0xFF); RS = 0; RW = 1; Enable = 1; while (busy_ben); Enable = 0; // Aflæser om der sendes til display. // port gøres klar til indlæsning // kontrolben stilles ind // kontrolben stilles ind // kontrolben stilles ind // busy_ben aflæses kontinuert // aflæsning slut, enable sættes lav //--------------------------------- Temperaturføler - Termostat -------------------------------- void presence()
temp = 0; temp = '1'; Temeraturmåler (C-program).txt // Sætter P0.1 lav // Starter ekstern tæller i 500 millisek. // Sætter P0.1 høj while (temp==1) // Gør det så længe "temp er lig 1 //--------------------------------- Skriv 1 til DS1821 - Termostat ------------------------------ void wr1temp() temp = 0; temp = 1; vent60(); // Sætter P0.1 lav while (temp==1) //--------------------------------- Skriv 0 til DS1821 - Termostat ------------------------------- void wr0temp() temp = 0; vent60(); temp = 1; // Sætter P0.1 lav while (temp==1) //--------------------------------- Skriv Byte til DS1821 --------------------------------------- void wrbyte(char kode) char test=01; char i=0; i=0; do if ((kode&test)==test) wr1temp(); else wr0temp(); test=test*2; while(test!=0); //--------------------------------- Læs Byte fra DS1821 --------------------------------------- char rdbyte()
char test=01; char i=0; temperatur=0; Temeraturmåler (C-program).txt do temp = 0; temp = 1; if (temp==1) temperatur=temperatur test; test=test*2; else test=test*2; vent60(); while(test!=0); return temperatur;