Update labd4.c

This commit is contained in:
Imants Pulkstenis
2019-12-14 13:16:22 +02:00
committed by GitHub
parent fa0963d190
commit 9ed28bdb3e
+170 -66
View File
@@ -1,72 +1,176 @@
#include <msp430xG46x.h>
// š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<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)
{
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;
}
}