#include #include #include #include void DelayT0(unsigned long count); //delay "10" 10us void WriteData(unsigned char cData); //datem am lcd void WriteInstr(unsigned char cInstr); //befehl an lcd void DisplayBusy(void); //busy flag lcd abfragen void InitLcd(void); //lcd initialisieren void WriteLine(unsigned char *text,unsigned char cursor); //schreiben einer ganzen linie void ReadAD(void); //spannungswerte lesen void ReadADS(void); //strom werte lesen void ShowCounts(float ergebnis); //anzeige auf display void display(float val, uchar *ptr ); //float to asci void get_gray_delta( void ); //***************lcd ports**************** #define LCDPORT P2 #define ENA P1_B0 //enable lcd #define RW P1_B1 //schreiben oder lesen lcd #define RS P1_B2 //befehl senden oder lesen lcd #define BF P2_B7 //*****************da ports************** //spannung #define DATA P0_B7 #define CLK P0_B6 #define CS P0_B5 //strom #define DATAS P0_B1 #define CLKS P0_B3 #define CSS P0_B0 //*****************encoder**************** #define GRAY_A P1_B6 #define GRAY_B P1_B7 //lcd variablen************************** #define clear_LCD 0x01 #define home_LCD 0x02 #define set_LCD 0x38 #define LCD_off 0x0E #define entry_mode 0x06 #define cursor_off 0x0C #define cursor_blink 0x0F #define EZeile 0x80 //1.Zeile anfang #define ZZeile 0xC0 //2.Zeile anfang //lcd text***************************************** code char welcome1[]="Test Programm "; code char welcome2[]=" "; code char leer[] =" "; code signed char graytab[] = { 0,1,-1,0, -1,0,0,1, 1,0,0,-1, 0,-1,1,0 }; near char buf[] = ""; //buffer für int zahl ins ram speichern; near char ComChar[] = ""; near float AnalogBuf=0; //buffer für analogwert wandler spannung near signed char zaehler=100; near signed char gray_width; near signed char graycount; IRQ_VECTOR(timer0int,TIMER0) void timer0int (void) interrupt { static unsigned char graycode = 0; if( GRAY_A ) graycode |= 0x10; // new state to bit 3, 2 if( GRAY_B ) graycode |= 0x20; graycode >>= 2; // old state to bit 1, 0 graycount += graytab[graycode]; // +/- 1 if state change } void main(void) { unsigned char i; unsigned char az_zeichen; EA = 0; // Set up UART PCON|=128; // Baudrate double SCON = 126; // 8 Bit UART - PC-compatible, TI-FLAG set! TH1=256-(XTAL/(192L*BAUDRATE)); // Calculate baudrate divisor TMOD=32; // use timer 1 as baudrate generator TCON=64; // dto. // Init Timer0 TMOD &= 0xF0; // TMOD Timer 0: 8 bit counter TMOD |= 0x02; // 8 Bit Reload Mode TH0 = 200; //reload wert ET0 = 1; // Enable timer interrupt TR0 = 1; // Start timer DelayT0(10000); //warten bis alle spannung stabil sind InitLcd(); WriteInstr(0x0C); //cursor off; WriteLine(welcome1,EZeile); //begrüssungstext WriteLine(welcome2,ZZeile); DelayT0(50000); EA = 1; for(;;){ ReadAD(); printf("%fA",AnalogBuf); get_gray_delta(); zaehler = gray_width; az_zeichen=sprintf(buf,"%d",zaehler); //int to string WriteInstr(0xC0); //display löschen for(i=0;i < (az_zeichen+1);i++){ WriteData(leer[i]); } WriteInstr(0xC0); for(i=0;i< az_zeichen;i++){ WriteData(buf[i]); } DelayT0(10000); } } void get_gray_delta( void ) // get counts after last call { signed char val; EA = 0; val = graycount; graycount = 0; EA = 1; gray_width = val; }