Professional Documents
Culture Documents
' 2
.038020764 .
.301563185 .
- ' 2
: ,
50193-32
'17:00 - 20:00 ,
' " 2012 -
Page 2 of 15
- ' 2
: ,
' 4 3..............................................................................................................................................Assembly
LCD 5..........................................................................................................................................................................C
B 11..................................................................................................................................................................C
Page 3 of 15
2 ' -
, :
Assembly 4 '
. " 4 ' :
, , .(4 ' 5.1 , ) ,WDT- :
, , .( ) SR- " , 2 .
. , . ,
Page 4 of 15
2 ' -
, :
Page 5 of 15
2 ' -
, :
C LCD
. LCD :
, . LCD- LCD 5 ,WDT- :
,( ) , . 2- 1
, .LCD- 1- , .
. ,
unsigned char hour, min, sec; // Global parameters Hours, Minutes & Seconds.
//******************************************************************
// Write hours in LCD
//******************************************************************
void LCD_hour() // This function handles Hours parameter and updates the LCD accordingly.
{
unsigned char hour1,hour2; // Local parameters used to separate the number to two digits
hour1 = hour / 10; // Left digit of hour - most significant digit
hour2 = hour % 10; // Right digit of hour - least significant digit
switch (hour1) // Updating LCD left digit of hour according to "hour1" value.
{
case 1: P7_A1; break; case 2: P7_A2; break;
case 3: P7_A3; break; case 4: P7_A4; break;
case 5: P7_A5; break; case 6: P7_A6; break;
case 7: P7_A7; break; case 8: P7_A8; break;
case 9: P7_A9; break; case 0: P7_A0; break;
}
Page 6 of 15
2 ' -
, :
switch (hour2) // Updating LCD right digit of hour according to "hour2" value.
{
case 1: P6_A1; break; case 2: P6_A2; break;
case 3: P6_A3; break; case 4: P6_A4; break;
case 5: P6_A5; break; case 6: P6_A6; break;
case 7: P6_A7; break; case 8: P6_A8; break;
case 9: P6_A9; break; case 0: P6_A0; break;
}
}
//******************************************************************
// Write minutes in LCD
//******************************************************************
void LCD_min() // This function handles Minutes parameter and updates the LCD accordingly.
{
unsigned char min1,min2; // Local parameters used to separate the number to two digits
min1 = min / 10; // Left digit of minutes - most significant digit
min2 = min % 10; // Right digit of minutes - least significant digit
switch (min1) // Updating LCD left digit of min according to "min1" value.
{
case 1: P5_A1; break; case 2: P5_A2; break;
case 3: P5_A3; break; case 4: P5_A4; break;
case 5: P5_A5; break; case 6: P5_A6; break;
case 7: P5_A7; break; case 8: P5_A8; break;
case 9: P5_A9; break; case 0: P5_A0; break;
}
switch (min2) // Updating LCD right digit of min according to "min2" value.
{
case 1: P4_A1; break; case 2: P4_A2; break;
case 3: P4_A3; break; case 4: P4_A4; break;
case 5: P4_A5; break; case 6: P4_A6; break;
Page 7 of 15
2 ' -
, :
switch (sec1) // Updating LCD left digit of sec according to "sec1" value.
{
case 1:P3_A1; break; case 2:P3_A2; break;
case 3:P3_A3; break; case 4:P3_A4; break;
case 5:P3_A5; break; case 6:P3_A6; break;
case 7:P3_A7; break; case 8:P3_A8; break;
case 9:P3_A9; break; case 0:P3_A0; break;
}
switch (sec2) // Updating LCD right digit of sec according to "sec2" value
{
case 1: P2_A1; break; case 2: P2_A2; break;
case 3: P2_A3; break; case 4: P2_A4; break;
case 5: P2_A5; break; case 6: P2_A6; break;
case 7: P2_A7; break; case 8: P2_A8; break;
case 9: P2_A9; break; case 0: P2_A0; break;
}
}
//******************************************************************
Page 8 of 15
2 ' -
, :
Page 9 of 15
2 ' -
, :
{
hour = 0; // reset hours counter
}
}
}
Page 10 of 15
2 ' -
, :
// LCD_A configuration
LCDACTL = LCDFREQ_192 | LCD4MUX | LCDSON | LCDON; // (ACLK = 32768)/192, 4-mux LCD, LCD_A on, Segments on
LCDAVCTL0 = LCDCPEN; // Charge pump enable
// Charge pump voltage select
LCDAVCTL1 = VLCD_3_44; // VLCD = 3,44 V
Page 11 of 15
- ' 2
: ,
B C
: B 1) 2-(.
: , WDT- B : ,SMCLK ) 1 ( ,
. , , 1 2- 1 .
, 1 2- .B , .
, " . 3.5
) B (4 .
******************************************************************//
// Global data
******************************************************************//
;}unsigned int scale[notas] = {SI0, DO, RE, MI, FA, SOL, LA, SI, DO2, MUTE
;}unsigned int space[notas] = {RE, MI, DO2, DO, SOL, MUTE, MUTE, MUTE, MUTE, MUTE
;unsigned int index_notas = 0
;char volume = 2
******************************************************************//
// Port1 Interrupt Service Routine
******************************************************************//
#pragma vector=PORT1_VECTOR
)__interrupt void PORT1_ISR (void
{
;if (P1IFG & 0x01) volume = volume - 1 // If SW1 was pushed volume down
;if (P1IFG & 0x02) volume = volume + 1 // If SW2 was pushed volume up
Page 12 of 15
2 ' -
, :
FLL_CTL0 |= DCOPLUS + XCAP18PF; //FLL+ configuration, ACLK = 32.768 kHz (DCO+ set)
// fDCOCLK = 3.2-25Mhz
Page 13 of 15
2 ' -
, :
// TimerB configuration
TBCCR0 = space[0]; // load first tone from sequence
TBR = 0; // Clearing TBR (Timer B Register)
// SMCLK
// 16-bit, TBR(max) = 0FFFFh
// Each TBCLx latch loads independently
// Up mode: the timer counts up to TBCL0
// Input divider. These bits select the divider for the input clock.(/1)
TBCTL = TBSSEL_2+MC_1+ID_0; // Timer B clock source select SMCLK, Input divider = /1, Mode control = Up Mode
TBCCTL4 = OUTMOD_3; // Output mode - Set/reset
TBCCR4 = space[0]/2;
Page 14 of 15
2 ' -
, :
Page 15 of 15