Institutional Repository | Satya Wacana Christian University: Perancangan Function Generator dengan Frekuensi 0,1 HZ- 2MHZ
LAMPIRAN A
LISTING PROGRAM
#INCLUDE
#INCLUDE
DOUBLE SUM=0;
UNSIGNED LONG COUNT=0;
INT A;
VOID SETUP ()
{
SETUP_SWITCH();
SETUP_7S();
// ATTACHINTERRUPT(0,ISR,RISING);
SERIAL.BEGIN(9600);
FREQCOUNT.BEGIN(1000);
// FREQMEASURE.BEGIN();
}
FLOAT FREQ1;
VOID LOOP()
{
SCANKEY();
IF (FREQCOUNT.AVAILABLE())
{
COUNT = FREQCOUNT.READ();
//SERIAL.PRINTLN(COUNT);
}
SHOWNUM(COUNT);
}
INT LATCHPIN = 10;//ST_CP
INT CLOCKPIN = 9;//SH_CP
INT DATAPIN = 11; //DS
VOID SETUP_7S ()
{
PINMODE(LATCHPIN,OUTPUT);
PINMODE(CLOCKPIN,OUTPUT);
85
PINMODE(DATAPIN,OUTPUT);
}
VOID DISNUM(INT NUM_QUA, INT NUM_POS, INT NUM_DEC)
{
INT NUM_QUA_B = 0;
INT NUM_POS_B = 0;
SWITCH (NUM_QUA)
{
CASE 0:NUM_QUA_B =
CASE 1:NUM_QUA_B =
CASE 2:NUM_QUA_B =
CASE 3:NUM_QUA_B =
CASE 4:NUM_QUA_B =
CASE 5:NUM_QUA_B =
CASE 6:NUM_QUA_B =
CASE 7:NUM_QUA_B =
CASE 8:NUM_QUA_B =
CASE 9:NUM_QUA_B =
DEFAULT: NUM_QUA_B
};
//THIS VALUE CONVERT
192;BREAK;
249;BREAK;
164;BREAK;
176;BREAK;
153;BREAK;
146;BREAK;
130;BREAK;
248;BREAK;
128;BREAK;
144;BREAK;
= 255;BREAK;
TO BINARY, WHICH IS ADCDEFG NEED TO LIGHT
UP
SWITCH (NUM_POS)
{
CASE 1:NUM_POS_B = 1;BREAK;
CASE 2:NUM_POS_B = 2;BREAK;
CASE 3:NUM_POS_B = 4;BREAK;
CASE 4:NUM_POS_B = 8;BREAK;
CASE 5:NUM_POS_B = 16;BREAK;
CASE 6:NUM_POS_B = 32;BREAK;
CASE 7:NUM_POS_B = 64;BREAK;
CASE 8:NUM_POS_B = 128;BREAK;
DEFAULT: NUM_POS_B = 0;BREAK;
};
//THIS VALUE CONVERT TO BINARY, WHICH IS THE ONE LIGHT UP NOW.
IF (NUM_DEC == 1){NUM_QUA_B = NUM_QUA_B + 128;};
//========================================
DIGITALWRITE(LATCHPIN,LOW);
// SET LATCH TO LOW TOLET THE DISPLAY READY TO RECEIVE DATA
INT L = NUM_QUA_B; INT R = NUM_POS_B;
SHIFTOUT(DATAPIN,CLOCKPIN,MSBFIRST,R);
SHIFTOUT(DATAPIN,CLOCKPIN,MSBFIRST,L);
DIGITALWRITE(LATCHPIN,HIGH); //RESTORE TO HIGH TTL BACK
86
DELAYMICROSECONDS(100);
}
//THIS IS THE DISPLAY NUMBER FUNCTION
VOID SHOWNUM(DOUBLE NUMBER)
{
LONG NUM = NUMBER;
INT SHOWDEC [8];
FOR (INT X = 1; X < 9; X++)
{
SHOWDEC [X] = 0;
}
//CREAT THE ARRAY FOR DECIMAL POINT, 0 IS NOT TO DISPLAY, 1 IS
TO DISPLAY
IF (NUM < 10000000){
IF
(NUM
<
1000000){NUM
=
SHOWDEC[6]=1;SHOWDEC[7]=0;}
ELSE{
NUM = NUMBER*10; SHOWDEC[7]=1;
}
}
//SIMPLE DECIMAL POINT FOR TWO NUMBER DISPLAY
INT SHOWNUMBER [8];
SHOWNUMBER[1] = (NUM/10000000)%10;
SHOWNUMBER[2]= (NUM/1000000)%10;
SHOWNUMBER[3] = (NUM/100000)%10;
SHOWNUMBER[4] = (NUM/10000)%10;
SHOWNUMBER[5] = (NUM/1000)%10;
SHOWNUMBER[6] = (NUM/100)%10;
SHOWNUMBER[7] = (NUM/10)%10;
SHOWNUMBER[8]= (NUM/1)%10;
//GET EVERY NUMBER AND STORE IN THE ARRARY
INT DECTEST = 0;
FOR (INT X = 1; X
LISTING PROGRAM
#INCLUDE
#INCLUDE
DOUBLE SUM=0;
UNSIGNED LONG COUNT=0;
INT A;
VOID SETUP ()
{
SETUP_SWITCH();
SETUP_7S();
// ATTACHINTERRUPT(0,ISR,RISING);
SERIAL.BEGIN(9600);
FREQCOUNT.BEGIN(1000);
// FREQMEASURE.BEGIN();
}
FLOAT FREQ1;
VOID LOOP()
{
SCANKEY();
IF (FREQCOUNT.AVAILABLE())
{
COUNT = FREQCOUNT.READ();
//SERIAL.PRINTLN(COUNT);
}
SHOWNUM(COUNT);
}
INT LATCHPIN = 10;//ST_CP
INT CLOCKPIN = 9;//SH_CP
INT DATAPIN = 11; //DS
VOID SETUP_7S ()
{
PINMODE(LATCHPIN,OUTPUT);
PINMODE(CLOCKPIN,OUTPUT);
85
PINMODE(DATAPIN,OUTPUT);
}
VOID DISNUM(INT NUM_QUA, INT NUM_POS, INT NUM_DEC)
{
INT NUM_QUA_B = 0;
INT NUM_POS_B = 0;
SWITCH (NUM_QUA)
{
CASE 0:NUM_QUA_B =
CASE 1:NUM_QUA_B =
CASE 2:NUM_QUA_B =
CASE 3:NUM_QUA_B =
CASE 4:NUM_QUA_B =
CASE 5:NUM_QUA_B =
CASE 6:NUM_QUA_B =
CASE 7:NUM_QUA_B =
CASE 8:NUM_QUA_B =
CASE 9:NUM_QUA_B =
DEFAULT: NUM_QUA_B
};
//THIS VALUE CONVERT
192;BREAK;
249;BREAK;
164;BREAK;
176;BREAK;
153;BREAK;
146;BREAK;
130;BREAK;
248;BREAK;
128;BREAK;
144;BREAK;
= 255;BREAK;
TO BINARY, WHICH IS ADCDEFG NEED TO LIGHT
UP
SWITCH (NUM_POS)
{
CASE 1:NUM_POS_B = 1;BREAK;
CASE 2:NUM_POS_B = 2;BREAK;
CASE 3:NUM_POS_B = 4;BREAK;
CASE 4:NUM_POS_B = 8;BREAK;
CASE 5:NUM_POS_B = 16;BREAK;
CASE 6:NUM_POS_B = 32;BREAK;
CASE 7:NUM_POS_B = 64;BREAK;
CASE 8:NUM_POS_B = 128;BREAK;
DEFAULT: NUM_POS_B = 0;BREAK;
};
//THIS VALUE CONVERT TO BINARY, WHICH IS THE ONE LIGHT UP NOW.
IF (NUM_DEC == 1){NUM_QUA_B = NUM_QUA_B + 128;};
//========================================
DIGITALWRITE(LATCHPIN,LOW);
// SET LATCH TO LOW TOLET THE DISPLAY READY TO RECEIVE DATA
INT L = NUM_QUA_B; INT R = NUM_POS_B;
SHIFTOUT(DATAPIN,CLOCKPIN,MSBFIRST,R);
SHIFTOUT(DATAPIN,CLOCKPIN,MSBFIRST,L);
DIGITALWRITE(LATCHPIN,HIGH); //RESTORE TO HIGH TTL BACK
86
DELAYMICROSECONDS(100);
}
//THIS IS THE DISPLAY NUMBER FUNCTION
VOID SHOWNUM(DOUBLE NUMBER)
{
LONG NUM = NUMBER;
INT SHOWDEC [8];
FOR (INT X = 1; X < 9; X++)
{
SHOWDEC [X] = 0;
}
//CREAT THE ARRAY FOR DECIMAL POINT, 0 IS NOT TO DISPLAY, 1 IS
TO DISPLAY
IF (NUM < 10000000){
IF
(NUM
<
1000000){NUM
=
SHOWDEC[6]=1;SHOWDEC[7]=0;}
ELSE{
NUM = NUMBER*10; SHOWDEC[7]=1;
}
}
//SIMPLE DECIMAL POINT FOR TWO NUMBER DISPLAY
INT SHOWNUMBER [8];
SHOWNUMBER[1] = (NUM/10000000)%10;
SHOWNUMBER[2]= (NUM/1000000)%10;
SHOWNUMBER[3] = (NUM/100000)%10;
SHOWNUMBER[4] = (NUM/10000)%10;
SHOWNUMBER[5] = (NUM/1000)%10;
SHOWNUMBER[6] = (NUM/100)%10;
SHOWNUMBER[7] = (NUM/10)%10;
SHOWNUMBER[8]= (NUM/1)%10;
//GET EVERY NUMBER AND STORE IN THE ARRARY
INT DECTEST = 0;
FOR (INT X = 1; X