diff --git a/labd4.c b/labd4.c index 6807702..cf25f3d 100644 --- a/labd4.c +++ b/labd4.c @@ -1,72 +1,176 @@ #include -// šeit ir vieta segmentu definīcijām -#define sa 0x00 -#define sb 0x00 -#define sc 0x00 -#define sd 0x00 -#define se 0x00 -#define sf 0x00 -#define sg 0x00 -#define sh 0x00 -// zīmju ģeneratora tabulu, aizpildām atbilstoši norādītajiem zīmju + +// seit ir vieta segmentu definicijam ---no datasheet MSP430x4xx_slau056l.pdf 26-20 748.lpp +#define sa 0x01 +#define sb 0x02 +#define sc 0x04 +#define sd 0x08 +#define se 0x40 +#define sf 0x10 +#define sg 0x20 +#define sh 0x80 + +#define LCD_OFFSET 2 +#define DELAY 60000 + +//volatile unsigned int vieta = 0; //definejam vietu displejaa 6.2.4.1. +//volatile unsigned int skaits = 2; //definejam attelotu ciparu skaitu 6.2.4.2. + +volatile unsigned int sec = 0; // 6.1. punkts +volatile unsigned int min = 0; // 8. punkts +volatile unsigned int hour = 0; // 8. punkts + +// zimju generatora tabulu, aizpildam atbilstosi noraditajiem skaitliem const char s_gen[] = - { - sa, // 0 - sb, // 1 - sc, // 2 - sd, // 3 - se, // 4 - sf, // 5 - sg, // 6 - sh, // 7 - sa + sb, // 8 - sb + sc, // 9 - sc + sd, // A - sd + se, // b - se + sf, // C - sf + sg, // d - sg + se, // E - se + sc // F +{ +sa+sb+sc+sd+se+sf, // 0 +sb+sc, // 1 +sa+sb+sg+se+sd, // 2 +sa+sb+sc+sd+sg, // 3 +sb+sc+sf+sg, // 4 +sa+sc+sd+sf+sg, // 5 +sa+sc+sd+sf+sg+se, // 6 +sa+sb+sc, // 7 +sa+sb+sc+sd+se+sf+sg, // 8 +sa+sb+sc+sd+sf+sg, // 9 +sa+sb+sc+se+sf+sg, // A +sc+sd+se+sf+sg, // b +sa+sd+se+sf, // C +sb+sc+sd+se+sg, // d +sa+sd+se+sf+sg, // E +sa+se+sf+sg, // F +sh // . vai : }; + +// function prototyps +void Delay(unsigned int); + +/////-------Bin2Hex2LCD------- +//////////////////////// 6.2.punkts ----- JAAIEKOMENTEE sk. apaksaa 6.2.3.punkts un ---Bin2BCD2LCD--- +//void Bin2Hex2LCD(unsigned int bin, unsigned char vieta, unsigned char skaits) +//{ +//int i; +//for(i=0; i>=4; +//} +//} +////////////////////////////////////////////////////////////// + +/////-------Bin2BCD2LCD------- +//////////////////////// 7.punkts ----- JAAIEKOMENTEE visu ---Bin2Hex2LCD--- +void Bin2BCD2LCD(unsigned int bin, unsigned char vieta, unsigned char skaits) +{ +int i; +for(i=0; i> hh:mm:ss ----------- + else + { + if(vieta>4) + { + LCDMEM[i+LCD_OFFSET+vieta]=s_gen[bin%10]; + bin/=10; + }else{ + + LCDMEM[i+LCD_OFFSET+vieta]=s_gen[bin%10] | s_gen[16]; + bin/=10; + } + } + //--- 10.punkta beigas------------------------------------------------- +} +} +////////////////////////////////////////////////////////////// + void main(void) { - unsigned int i; - int j; - int k; - unsigned int offset = 2; - const unsigned int delay = 60000; - WDTCTL = WDTPW + WDTHOLD; // Apturam WDT - // LCD_A - LCDACTL = LCDFREQ_128 + LCD4MUX + LCDON; - LCDAPCTL0 = 0x7E; - P5SEL = 0x1C; +volatile unsigned int i; +int j; +int k; + +// initialization of hardware +WDTCTL = WDTPW + WDTHOLD; // stop WDT + +// LCD_A initialization +LCDACTL = LCDFREQ_128 + LCD4MUX + LCDON; +LCDAPCTL0 = 0x7E; +P5SEL = 0x1C; + +// preparing for start +for ( j=0; j<11; j++) //izdzesam visu no ekrana + { + LCDMEM[j+LCD_OFFSET]=0; + } + +for ( j=0; j<11; j++) //iekrasojam visu ekranu + { + LCDMEM[j+LCD_OFFSET]=0xFF; + Delay(DELAY); + } + +for ( j=0; j<12; j++) //izdzesam visu (ko iekrasojam) no ekrana + { + LCDMEM[j+LCD_OFFSET]=0; + Delay(DELAY); + } +j=0; +k=0; + +//programmas galvenais cikls +while(1) + { +// Bin2Hex2LCD(sec,0,4); //6.-6.2.5.punkti konvertejam sec= 12345 hex'aa sanaak - 3039 +// Bin2BCD2LCD(sec,0,4); //7.2. punkts, !!!--jaiekomentee iepriekseju rindinu--!!! vienkarsi attelojam sec= 12345 + +// LCDMEM[k+LCD_OFFSET]=s_gen[0xF & j]; // 6.2.3 jaaiekomentee // sk. AUGHSAA 6.2.punkts +// Delay(DELAY); // 6.2.3 jaaiekomentee +// j++; k++; // 6.2.3 jaaiekomentee +// if(k>6)k=0; // 6.2.3 jaaiekomentee + +// sec++; // 6.3. punkts, vienkarsi pieskaitam klaat pa sekundei + + + // Veidojam pulkstenu skaititaju 9.4. punkts + sec++; + if (sec==60) + { + sec=0; + min++; + } + if (min==60) + { + min=0; + hour++; + } + if (hour==24) + { + hour=0; + } + + Bin2BCD2LCD(sec,1,2); // 9.1. punkts - vieta, kur aatelojam secundes + Bin2BCD2LCD(min,3,2); // 9.2. punkts - vieta, kur aatelojam minutes + Bin2BCD2LCD(hour,5,2); // 9.3. punkts - vieta, kur aatelojam stundas + + +Delay(DELAY); +Delay(DELAY); + + } // while(1) - beigas +} + +/* software delay */ +void Delay(unsigned int del) +{ +volatile unsigned int t=del; + while(t) + { + t--; + } +} - for (j = 0; j < 11; j++) - { - LCDMEM[j + offset] = 0; - } - for (j = 0; j < 11; j++) - { - LCDMEM[j + offset] = 0xFF; - for (i = delay; i > 0; i--) - ; - } - for (j = 0; j < 12; j++) - { - LCDMEM[j + offset] = 0; - for (i = delay; i > 0; i--) - ; - } - j = 0; - k = 0; - while (1) - { - LCDMEM[k + offset] = s_gen[0xF & j]; - for (i = delay; i > 0; i--) - ; - j++; - k++; - if (k > 6) - k = 0; - } -} \ No newline at end of file