Files
2019-12-14 13:16:22 +02:00

177 lines
4.7 KiB
C

#include <msp430xG46x.h>
// 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+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<skaits; i++)
//{
//LCDMEM[i+LCD_OFFSET+vieta]=s_gen[bin&0x0F];
//bin>>=4;
//}
//}
//////////////////////////////////////////////////////////////
/////-------Bin2BCD2LCD-------
//////////////////////// 7.punkts ----- JAAIEKOMENTEE visu ---Bin2Hex2LCD---
void Bin2BCD2LCD(unsigned int bin, unsigned char vieta, unsigned char skaits)
{
int i;
for(i=0; i<skaits; i++)
{
if (i==0)
{
LCDMEM[i+LCD_OFFSET+vieta]=s_gen[bin%10];
bin/=10;
}
//--- 10.punkta papildus kods kola attelosanai ->> 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)
{
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--;
}
}