First Programm.HF Lo Band VFO with LPC1114 and AD9851 module.Built in ELEKEY.Using ACM1602NI.

Dependencies:   mbed QEI

Revision:
1:ee890adf56ea
Parent:
0:5cdf1a556e60
--- a/main.cpp	Sun Nov 13 14:54:43 2016 +0000
+++ b/main.cpp	Fri Sep 15 07:26:48 2017 +0000
@@ -1,27 +1,30 @@
 #include "mbed.h"
 #include "I2cLCD.h"
+#include "QEI.h"
+#define ROTATE_PER_REVOLUTIONS  24
 
 DigitalOut DATA(dp9);
 DigitalOut W_CLK(dp17);
 DigitalOut FQ_UD(dp11);
-DigitalOut RESET(dp26); //previously known as dp26
+DigitalOut RESET(dp26);
 DigitalOut LED(dp14);
 DigitalOut PTT_OUT(dp18);
-DigitalIn PTT_ON(dp1);
-DigitalIn DOT(dp4);
-DigitalIn BAR(dp6);
-DigitalOut KEY(dp13);
-DigitalIn BAND_SW(dp10);
-DigitalIn JOG_1(dp2);
-DigitalIn JOG_2(dp28);   //previously known as dp28
-DigitalIn JOG_3(dp25);
-DigitalIn JOG_4(dp16);
+DigitalIn  PTT_ON(dp1);
+DigitalOut  RL1(dp13);       //BFO,AUDIO
+DigitalOut  RL2(dp15);       //AGC
+DigitalIn  BAND_SW(dp10);
+DigitalIn  JOG_3(dp25);      //FREQ STEP
+DigitalIn  RIT_SW(dp16);      //RIT
+DigitalIn  jmh(dp24);
+DigitalIn  MODE_IN(dp6);
+//DigitalIn  test(dp15);
 
 double FQX;
 double FQD;
+double FQDD;
 
-double FQD_18 = 1810000;
-double FQD_19 = 1907500;
+// double FQD_18 = 1810000;
+// double FQD_19 = 1907500;
 double FQD_351 = 3500000;
 double FQD_352 = 3599000;
 double FQD_353 = 3680000;
@@ -31,35 +34,102 @@
 double FQD_4 = 4630000;
 double FQD_7 = 7000000;
 double FQD_10 = 10100000;
+//double FQD_14 = 522000;
+double FQD_JMH = 3620600;
+double FQD_JMH1 = 7793100;
+double FQD_VOK1 = 6070000;
+double FQD_VOK2 = 9650000;
+double FQD_KCBS = 6400000;
+double FQD_NSB1 = 6055000;
+double FQD_NSB2 = 6115000;
+double FQD_NSB3 = 9595000;
+double FQD_NSB4 = 9760000;
+double FQD_NSB5 = 3925000;
+double FQD_NSB6 = 3945000;
+double FQD_CRI  = 7325000;
+double FQD_NHK  = 9750000;
+double FQD_14  = 14000000;
+double FQD_181 = 18068000;
+double FQD_M = 0;
+double FQD_MM = 0;
+double FQD_jmh = 0;
 
 double FQ;
 
-double FQ_18 = 43191352;
-double FQ_19 = 45517913;
-double FQ_351 = 83519190.5;
-double FQ_352 = 85881750;
-double FQ_353 = 87814470;
-double FQ_381 = 88339811;
-double FQ_382 = 89365820;
-double FQ_383 = 90463357;
-double FQ_4 = 110484088;
-double FQ_7 = 167038250;
-double FQ_10 = 241012230;
+// double FQ_18 =    43191352;
+// double FQ_19 =    45517913;
+double FQ_351 =   83517187;
+double FQ_352 =   85879508;
+double FQ_353 =   87812323;
+double FQ_381 =   88337282;
+double FQ_382 =   89363339;
+double FQ_383 =   90460995;
+double FQ_4 =    110481248;
+double FQ_7 =    167034290;
+double FQ_10 =   241006742;
+//double FQ_14 =   12455974;
+double FQ_JMH =   86397023;
+double FQ_JMH1 = 185963684;
+double FQ_VOK1 = 144846025;
+double FQ_VOK2 = 230274159;
+double FQ_KCBS = 152720685;
+double FQ_NSB1 = 144488086;
+double FQ_NSB2 = 145919842;
+double FQ_NSB3 = 228961619;
+double FQ_NSB4 = 232898947;
+double FQ_NSB5 = 93660807;
+double FQ_NSB6 = 94138060;
+double FQ_CRI  = 174793597;
+double FQ_NHK  = 232660321;
+double FQ_14   = 334078686;
+double FQ_181  = 431152407;
+double FQ_M = 0;
+double FQ_MM =0;
+double FQ_jmh = 0;
 
 double f1 = 7000000;
 double f2 = 7200000;
 double f1_CW = 7000000;
 double f2_CW = 7045000;
+double f1_M = 0;
+double f2_M = 0;
+double f1_MM = 0;
+double f2_MM = 0;
+double f1_CW_M = 0;
+double f2_CW_M = 0;
+double f1_CW_MM = 0;
+double f2_CW_MM = 0;
+double f1_jmh = 0;
+double f2_jmh = 0;
+double f1_CW_jmh = 0;
+double f2_CW_jmh = 0;
+int BAND_jmh;
+int mem;
+int mem_jmh;
 int BAND;
+int BAND_M;
+int BAND_MM;
 double IF;
 double STEPD;
-double STEP = 2.386;
+double STEP = 2.3863380645591;
+int ritd = 0;
 float wt = 0.1;
 const int a=1;
 int s;
-
-Ticker deley;
+int fbuf1;
+int fbuf2;
+int fbuf3;
+int fbuf4;
+int fbuf5;
+int fbuf6;
+int mode = 0;
+int riton = 0;
+int sig;
+int CW_MODE = 0;
+int CW_MODE_M;
+double CW_OFFSET;
 float del = 0.1;
+int CW_IN = 0;;
 
 void DDS(void);
 void DDS_U(void);
@@ -69,28 +139,36 @@
 void STEPS(void);
 void QSY(void);
 void STEPSS(void);
-void JOG(void);
-void DDS_CW(void);
 void PTT_OFF(void);
+void RIT(void);
+// void MEMIN(void);
+// void MEMOUT(void);
+void JMH(void);
+void JOZ(void);
+void CW1(void);
+void CW2(void);
+void MODEX(void);
+void MODEY(void);
 
 I2cLCD lcd(dp5, dp27);
+QEI wheel(dp2, dp28, NC, ROTATE_PER_REVOLUTIONS, QEI::X4_ENCODING);
+//QEI wheel(dp2, dp28, NC, ROTATE_PER_REVOLUTIONS);
 
 int main() {
 
-    KEY = 0;
     STEPD = 10;
     BAND = 7;
     FQD = FQD_7;
     FQ = FQ_7;
+    
+    RL1 = 1;
+    RL2 = 0;
+    lcd.locate(3,1);
+    lcd.printf("SSB");
 
-    IF = 10857458;//IF 455KHz
-//    IF = 255329316.50856;// IF 10.7MHz  
-//    lcd.locate(1,1);
-//    lcd.printf("455K");
-//    lcd.locate(0,1);
-//    lcd.printf("10.7M");
-  
-
+//    IF        = 10857171;//IF 455KHz
+    CW_OFFSET = 22167;//CW OFSET 1KHz
+    IF = 255259586;// IF 10.7MHz   
     LED = 0;
     s = 1;    
     
@@ -109,29 +187,36 @@
     wait_us(100);
     FQ_UD=0;
     wait_us(100);
+    FQDD = FQD;
     GET_LCD_DATA();
 
     FQX = FQ + IF;    
     DDS(); 
     DDS();
-    lcd.locate(8,0);
+    lcd.locate(9,0);
     lcd.printf("0MHz");
     lcd.locate(12,1);
     lcd.printf("1KHz");
     lcd.locate(14,0);
     lcd.printf("RX");
-    lcd.locate(0,1);
-    lcd.printf("Mode:"); 
-
+            
+    fbuf2 = 0;
+    
     while(1) {
-        if (PTT_ON==0) {DDS_T();}
-//        if (FQ_UP==0) {DDS_U();}
-//        if (FQ_DOWN==0) {DDS_D();}
-//        if (FSTEP==0) {STEPS();}
-        if (DOT==0) {DDS_CW();}
-        if (BAR==0) {DDS_CW();}
-        if (BAND_SW==0) {QSY();}
-        if (JOG_1==1) {JOG();}
+        if (PTT_ON  == 0) {DDS_T();}
+        if (BAND_SW == 0) {QSY();}
+        if (JOG_3   == 1) {STEPS();}
+        fbuf1 = wheel.getPulses();
+        if (RIT_SW  == 1) {RIT();}
+        if (fbuf1 > fbuf2) {DDS_U();}
+        if (fbuf1 < fbuf2) {DDS_D();}
+        fbuf2 = fbuf1;
+        if (jmh == 1) {JOZ();}
+//        if (memin == 0) {MEMIN();}
+//        if (memout== 0) {MEMOUT();}
+//        if (CW_MODE == 0 & CW_IN == 1 ) {CW1();}
+//        if (CW_MODE == 1 & CW_IN == 0 ) {CW2();}
+        if (MODE_IN == 1 ) {MODEX();}
     }
 }
 
@@ -181,7 +266,20 @@
 
 void DDS_U(void) {
     
-//    if (FQD <= f1 && FQD <= f2) {
+    if (riton==1) {
+        if (ritd < 99) {
+            ritd++;
+            if ( CW_IN == 1 ) {
+                FQX = FQ + STEP * ritd * 100 + IF + CW_OFFSET;
+            }else{
+                FQX = FQ + STEP * ritd * 100 + IF;
+            }
+            DDS();
+            lcd.locate( 7,1 );
+            lcd.printf("%d0 ",ritd);
+        }
+    } else { 
+    
         if (s==0) {
             if ((FQD + STEPD) <= f2) {
                 FQD = FQD + STEPD;
@@ -193,16 +291,35 @@
                 FQ = FQ + STEP * 10000;
             }
         }
-//    }        
+    
+    FQDD = FQD;        
     GET_LCD_DATA();
-    FQX = FQ + IF;
+    
+    if ( CW_IN == 1 ) {
+        FQX = FQ + IF + CW_OFFSET;
+        }else{
+        FQX = FQ + IF;
+    }
+
     DDS();
-    wait(wt);
+    }
 }
 
 void DDS_D(void) {
     
-//    if (FQD <= f1 && FQD <= f2) {
+    if (riton==1) {
+        if (ritd > -99) {
+            ritd--;
+            if ( CW_IN == 1 ) {
+                FQX = FQ + STEP * ritd * 100 + IF + CW_OFFSET;
+            }else{
+                FQX = FQ + STEP * ritd * 100 + IF;
+            }
+            DDS();
+            lcd.locate( 7,1 );
+            lcd.printf("%d0 ",ritd);
+        }
+    } else {    
         if (s==0) {
             if ((FQD - STEPD) >= f1) {
                 FQD = FQD - STEPD;
@@ -214,21 +331,24 @@
                 FQ = FQ - STEP * 10000;
             }
         }
-//    }
+    FQDD = FQD;
     GET_LCD_DATA();
-    FQX = FQ + IF;
+
+    if ( CW_IN == 1 ) {
+        FQX = FQ + IF + CW_OFFSET;
+        }else{
+        FQX = FQ + IF;
+    }
     DDS();
-    wait(wt);
+    }
 }
     
 void DDS_T(void) {
-
-    deley.detach();
       
     if (FQD > f1 && FQD < f2) {
         GET_LCD_DATA();
         lcd.locate( 14, 0 );
-        lcd.printf( "T" );
+        lcd.printf( "TX" );
 
         FQX = FQ;
         DDS();
@@ -247,45 +367,50 @@
     }
     GET_LCD_DATA();
     lcd.locate( 14,0 );
-    lcd.printf( "R" );     
+    lcd.printf( "RX" );     
 }
 
 void GET_LCD_DATA(void) {
 
     char f[9];
     
-    sprintf(f,"%8.5lf",FQD / 1000000);    
+    sprintf(f,"%8.5lf",FQDD / 1000000);    
     lcd.locate( 0,0 );
-    lcd.printf( f );
-    if (FQD >= f1_CW && FQD < f2_CW) {
-        lcd.locate( 5,1 );
-        lcd.printf("CW   ");
+    lcd.printf( "%c%c%c%c%c%c",f[0],f[1],f[2],f[3],f[4],f[5] );
+    lcd.printf( ".%c%c%",f[6],f[7] );
+
+    if (FQDD >= f1_CW && FQDD < f2_CW) {
+        lcd.locate( 0,1 );
+        lcd.printf("CW");
     }else{
-        if(FQD >= f2_CW && FQD < f2 ) {
-            lcd.locate( 5,1 );
-            lcd.printf("Phone");
+        if(FQDD >= f2_CW && FQDD < f2 ) {
+            lcd.locate( 0,1 );
+            lcd.printf("Ph");
     }else{
-        lcd.locate( 5,1 );
-        lcd.printf("none ");
+        lcd.locate( 0,1 );
+        lcd.printf("no");
         }
     }
 }
 
 void STEPS( void ) {
+
     if (s==1) {
         s = 0;
-        lcd.locate(13,1);
-        lcd.printf("0");
+        lcd.locate(12,1);
+        lcd.printf("10");
     }else{
         s = 1;
-        lcd.locate(13,1);
-        lcd.printf("K");
-    }    
+        lcd.locate(12,1);
+        lcd.printf("1K");
+    }
     wait(0.3);
+
 }
 
 void QSY(void) {
-     switch (BAND) {
+       
+     switch ( BAND ) {
      case 7:
         BAND = 10;
         FQD_7 = FQD;
@@ -297,43 +422,32 @@
         f1_CW = 10100000;
         f2_CW = 10150000;
         break;
+
         
     case 10:
-        BAND = 18;
+        BAND = 14;
         FQD_10 = FQD;
-        FQD = FQD_18;
+        FQD = FQD_14;
         FQ_10 = FQ;
-        FQ = FQ_18;
-        f1 = 1810000;
-        f2 = 1825000;
-        f1_CW = 1810000;
-        f2_CW = 1825000;
+        FQ = FQ_14;
+        f1 =   14000000;
+        f2 =   14350000;
+        f1_CW =14000000;
+        f2_CW =14100000;
         break;
-        
-    case 18:
-        BAND = 19;
-        FQD_18 = FQD;
-        FQD = FQD_19;
-        FQ_18 = FQ;
-        FQ = FQ_19;
-        f1 = 1907500;
-        f2 = 1912500;
-        f1_CW = 1907500;
-        f2_CW = 1912500;
+/////////////
+    case 14:
+        BAND = 351;
+        FQD_14 = FQD;
+        FQD = FQD_351;
+        FQ_14 = FQ;
+        FQ = FQ_351;
+        f1 =   3500000;
+        f2 =   3575000;
+        f1_CW =3500000;
+        f2_CW =3535000;
         break;
-
-    case 19:
-        BAND = 351;
-        FQD_19 = FQD;
-        FQD = FQD_351;
-        FQ_19 = FQ;
-        FQ = FQ_351;
-        f1 = 3500000;
-        f2 = 3575000;
-        f1_CW = 3500000;
-        f2_CW = 3535000;
-        break;
-        
+/////////////        
     case 351:
         BAND = 352;
         FQD_351 = FQD;
@@ -406,6 +520,7 @@
         f2_CW = 4630001;
         break;
 
+
     case 4:
         BAND = 7;
         FQD_4 = FQD;
@@ -416,14 +531,16 @@
         f2 = 7200000;
         f1_CW = 7000000;
         f2_CW = 7045000;
-        break;
-        
+        break;        
+
+
     default:
         BAND = 7;
         FQD = FQD_7;
         FQ = FQ_7;
         break;
     }
+    FQDD = FQD;
     GET_LCD_DATA();
     FQX = FQ + IF;
     DDS();
@@ -438,159 +555,483 @@
         lcd.locate(13,1);
         lcd.printf("K");
     }    
-//    wait(0.3);
-}
-
-void JOG( void ) {
- 
-    int jog;
-    deley.detach();
-
-    jog = JOG_2 * 4 +JOG_3 * 2 + JOG_4 * 1;
-    
-    switch( jog ) {
-        
-        case 2:
-            wt = 0.3;
-            s  = 0;
-            lcd.locate(12,0);
-            lcd.printf("> ");
-            STEPSS();
-            DDS_U();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;
-        
-        case 6:
-            wt = 0.05;
-            s  = 0;
-            lcd.locate(12,0);
-            lcd.printf(">>");
-            STEPSS();
-            DDS_U();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;
-            
-        case 4:
-            wt = 0.3;
-            s  =1;
-            lcd.locate(12,0);
-            lcd.printf("> ");
-            STEPSS();
-            DDS_U();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;
-
-        case 0:
-            wt = 0.05;
-            s  =1;
-            lcd.locate(12,0);
-            lcd.printf(">>");
-            STEPSS();
-            DDS_U();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;                
-
-
-        case 3:
-            wt = 0.3;
-            s  = 0;
-            lcd.locate(12,0);
-            lcd.printf(" <");
-            STEPSS();
-            DDS_D();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;
-        
-        case 7:
-            wt = 0.05;
-            s  = 0;
-            lcd.locate(12,0);
-            lcd.printf("<<");
-            STEPSS();
-            DDS_D();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;
-            
-        case 5:
-            wt = 0.3;
-            s  =1;
-            lcd.locate(12,0);
-            lcd.printf(" <");
-            STEPSS();
-            DDS_D();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;
-
-        case 1:
-            wt = 0.05;
-            s  =1;
-            lcd.locate(12,0);
-            lcd.printf("<<");
-            STEPSS();
-            DDS_D();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break;                
-
-        
-        default:
-            wt = 0.05;
-            s  =1;
-            STEPSS();
-            DDS_D();
-            lcd.locate(12,0);
-            lcd.printf("  ");
-            break; 
-    }
-}
-
-void DDS_CW(void) {
-    if (FQD > f1 && FQD < f2) {
-        deley.detach();
-        GET_LCD_DATA();
-        lcd.locate( 14, 0 );
-        lcd.printf( "T" );
-
-        FQX = FQ;
-        DDS();
-        LED = 1;
-        PTT_OUT = 1;
-        KEY = 1;
-        if (BAR==0) {
-            wait(3.5*del);
-            KEY = 0;
-            wait(del);
-        }else{
-            if (DOT==0) {
-                wait(del);
-                KEY = 0;
-                wait(del);
-            }
-        }   
-        deley.attach(&PTT_OFF,4*del);
-    }else{
-        LED=1;
-        wait(0.2);
-        LED=0;
-        wait(0.2);
-    }
-
 }
 
 void PTT_OFF(void) {
     PTT_OUT = 0;
     LED = 0;
-    KEY = 0;
     FQX = FQ + IF;
     DDS();
     GET_LCD_DATA();
     lcd.locate( 14,0 );
-    lcd.printf( "R" );  
-}
\ No newline at end of file
+    lcd.printf( "RX" );  
+}
+
+void RIT(void) {
+    
+    if ( riton == 0) {
+        riton = 1;
+        lcd.locate(3,1);
+        lcd.printf("RIT:");
+        lcd.locate( 7,1 );
+        lcd.printf("%d0 ",ritd);
+        
+    if ( CW_IN == 1 ) {
+        FQX = FQ + STEP * ritd * 100+ IF + CW_OFFSET;
+        }else{
+        FQX = FQ + STEP * ritd * 100+ IF;
+    }
+        
+        DDS();
+    } else {
+        riton = 0;
+        lcd.locate(3,1);
+        lcd.printf("        ");
+        MODEY();
+    if ( CW_IN == 1 ) {
+        FQX = FQ + STEP + IF + CW_OFFSET;
+        }else{
+        FQX = FQ + STEP + IF;
+    }
+        DDS();
+    }
+    wait(0.2);
+}
+
+
+//void MEMIN(void) {
+//    if(mem == 0 ) {
+//        BAND_M = BAND;
+//        FQD_M = FQD;
+//        FQ_M  = FQ;
+//        f1_M = f1;
+//        f2_M = f2;
+//        f1_CW_M = f1_CW;
+//        f2_CW_M = f2_CW;
+//        mem = 1;
+//        CW_MODE_M = CW_MODE;
+//        lcd.locate(11,1);
+//        lcd.printf("M");
+//    }else{
+//        mem = 0;
+//        lcd.locate(11,1);
+//        lcd.printf(" ");
+//    }
+//    wait(0.3);        
+//}
+
+//void MEMOUT(void) {
+//    if (mem == 1) {
+//        BAND_MM = BAND;
+//        FQD_MM = FQD;
+//        FQ_MM  = FQ;
+//        f1_MM = f1;
+//        f2_MM = f2;
+//        f1_CW_M = f1_CW;
+//        f2_CW_M = f2_CW;
+//        FQD = FQD_M;
+//        FQ  = FQ_M;
+//        f1  = f1_M;
+//        f2  = f2_M;
+//        f1_CW = f1_CW_M;
+//        f2_CW = f2_CW_M;
+//        FQDD = FQD;
+//        GET_LCD_DATA();
+//        if (CW_MODE_M == 1) {
+//            FQX = FQ + IF + CW_OFFSET;
+//        }else{
+//            FQX = FQ + IF;
+//        }
+//        DDS();
+//        mem = 0;
+//        lcd.locate(11,1);
+//        lcd.printf(" ");
+//    } else {
+//        BAND = BAND_MM;
+ //       FQD = FQD_MM;
+ //       FQ  = FQ_MM;
+//        f1  = f1_MM;
+//        f2  = f2_MM;
+//        f1_CW = f1_CW_M;
+//        f2_CW = f2_CW_M;
+//        FQDD = FQD;
+//        GET_LCD_DATA();
+//        if (CW_MODE_M == 1) {
+//            FQX = FQ + IF + CW_OFFSET;
+//        }else{
+//            FQX = FQ + IF;
+//        }
+//        FQX = FQ + IF;
+//        DDS();
+//    }        
+//    wait(0.1);
+//}    
+
+void JMH(void) {
+
+    if (mem_jmh == 0) {
+    FQD = FQD_JMH;
+    FQ  = FQ_JMH;
+    f1  = FQD_JMH;
+    f2  = FQD_JMH;
+    f1_CW = FQD_JMH;
+    f2_CW = FQD_JMH;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();        
+    DDS();
+    lcd.locate(7,1);
+    lcd.printf("JMH ");
+        
+    }else{
+    if (mem_jmh == 1) {
+    FQD = FQD_JMH1;
+    FQ  = FQ_JMH1;
+    f1  = FQD_JMH1;
+    f2  = FQD_JMH1;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();
+    lcd.locate(7,1);
+    lcd.printf("JMH ");
+
+    }else{
+    if (mem_jmh == 2) {
+    FQD = FQD_VOK1;
+    FQ  = FQ_VOK1;
+    f1  = FQD_VOK1;
+    f2  = FQD_VOK1;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();      
+    lcd.locate(7,1);
+    lcd.printf("VOK ");
+
+    }else{
+    if (mem_jmh == 3) {
+    FQD = FQD_VOK2;
+    FQ  = FQ_VOK2;
+    f1  = FQD_VOK2;
+    f2  = FQD_VOK2;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();        
+    lcd.locate(7,1);
+    lcd.printf("VOK ");
+
+    }else{
+    if (mem_jmh == 4) {
+    FQD = FQD_KCBS;
+    FQ  = FQ_KCBS;
+    f1  = FQD_KCBS;
+    f2  = FQD_KCBS;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();        
+    lcd.locate(7,1);
+    lcd.printf("KCBS");
+
+
+    }else{
+    if (mem_jmh == 5) {
+    FQD = FQD_NSB1;
+    FQ  = FQ_NSB1;
+    f1  = FQD_NSB1;
+    f2  = FQD_NSB1;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();        
+    lcd.locate(7,1);
+    lcd.printf("NSB1");
+
+
+    }else{
+    if (mem_jmh == 6) {
+    FQD = FQD_NSB2;
+    FQ  = FQ_NSB2;
+    f1  = FQD_NSB2;
+    f2  = FQD_NSB2;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();      
+    lcd.locate(7,1);
+    lcd.printf("NSB2");
+    
+    }else{
+    if (mem_jmh == 7) {
+    FQD = FQD_NSB3;
+    FQ  = FQ_NSB3;
+    f1  = FQD_NSB3;
+    f2  = FQD_NSB3;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();
+//    mem_jmh = 8;        
+    lcd.locate(7,1);
+    lcd.printf("NSB1");
+
+    }else{
+    if (mem_jmh == 8) {
+    FQD = FQD_NSB4;
+    FQ  = FQ_NSB4;
+    f1  = FQD_NSB4;
+    f2  = FQD_NSB4;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();
+//    mem_jmh = 9;        
+    lcd.locate(7,1);
+    lcd.printf("NSB2");
+
+    }else{
+    if (mem_jmh == 9) {
+    FQD = FQD_NSB5;
+    FQ  = FQ_NSB5;
+    f1  = FQD_NSB5;
+    f2  = FQD_NSB5;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();        
+    lcd.locate(7,1);
+    lcd.printf("NSB1");
+
+    }else{
+    if (mem_jmh == 10) {
+    FQD = FQD_NSB6;
+    FQ  = FQ_NSB6;
+    f1  = FQD_NSB6;
+    f2  = FQD_NSB6;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();
+//    mem_jmh = 11;        
+    lcd.locate(7,1);
+    lcd.printf("NSB2");
+
+
+    }else{
+    if (mem_jmh == 11) {
+    FQD = FQD_CRI;
+    FQ  = FQ_CRI;
+    f1  = FQD_CRI;
+    f2  = FQD_CRI;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();
+//    mem_jmh = 12;        
+    lcd.locate(7,1);
+    lcd.printf("CRI ");
+
+
+    }else{
+    if (mem_jmh == 12) {
+    FQD = FQD_NHK;
+    FQ  = FQ_NHK;
+    f1  = FQD_NHK;
+    f2  = FQD_NHK;
+    f1_CW = FQD_JMH1;
+    f2_CW = FQD_JMH1;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();       
+    lcd.locate(7,1);
+    lcd.printf("NHK ");    
+    
+    } else {
+    lcd.locate(7,1);
+    lcd.printf("    ");
+}
+}
+}
+}                
+}
+}
+}
+}
+}
+}        
+}
+}
+}
+    wait(0.2);
+}
+
+void CW1(void) {
+    
+    if ( riton == 1 ) {
+        FQX = FQ + STEP * ritd * 100 + IF + CW_OFFSET;
+    } else {
+        FQX = FQ + IF + CW_OFFSET;
+    }
+    DDS();
+    
+    FQDD = FQD;        
+    GET_LCD_DATA();
+
+    CW_MODE = 1;
+    DDS();
+}
+
+void CW2(void) {
+    if ( riton == 1 ) {
+        FQX = FQ + STEP * ritd * 100 + IF;
+    } else {
+        FQX = FQ + IF;
+    }
+    DDS();
+    
+    FQDD = FQD;        
+    GET_LCD_DATA();
+
+    CW_MODE = 0;
+    DDS();
+}
+
+void JOZ(void) {
+
+    BAND_jmh = BAND;
+    FQD_jmh = FQD;
+    FQ_jmh  = FQ;
+    f1_jmh = f1;
+    f2_jmh = f2;
+    f1_CW_jmh = f1_CW;
+    f2_CW_jmh = f2_CW;
+    fbuf5 = fbuf1;
+    fbuf6 = fbuf2;
+    fbuf3 = 0;
+    fbuf4 = 0;
+
+    JMH();
+    wait(0.5);
+
+    while (jmh == 0) {
+ 
+        if (MODE_IN == 1 ) {MODEX();}
+ 
+        if (CW_MODE == 1 ) {CW1();}
+        if (CW_MODE != 1 ) {CW2();}
+        
+        fbuf3 = wheel.getPulses();
+        if (fbuf3 > fbuf4) {
+            if (mem_jmh <12 ) {
+                mem_jmh++;
+                JMH();
+            }
+        }
+        if (fbuf3 < fbuf4) {
+            if (mem_jmh > 0) {
+                mem_jmh--;
+                JMH();
+            }
+        }
+        fbuf4 = fbuf3;
+
+    }
+    
+    fbuf3 = 0;
+    fbuf4 = 0;
+    fbuf1 = fbuf5;
+    fbuf2 = fbuf6;
+    BAND = BAND_jmh;
+    FQD = FQD_jmh;
+    FQ  = FQ_jmh;
+    f1  = f1_jmh;
+    f2  = f2_jmh;
+    f1_CW = f1_CW_jmh;
+    f2_CW = f2_CW_jmh;
+    FQDD = FQD;
+    FQX = FQ + IF;
+    GET_LCD_DATA();
+    DDS();
+
+    lcd.locate(7,1);
+    lcd.printf("    ");
+    MODEY();
+    wait(0.3);
+}
+
+void MODEX(void) {
+    if (CW_IN == 0) {
+        CW_IN++;
+        RL1 = 1;
+        RL2 = 1;
+        CW1();
+        lcd.locate(3,1);
+        lcd.printf("CW ");
+        wait(0.3);
+    }else{
+        if (CW_IN == 1) {
+            CW_IN++;
+            RL1 = 0;
+            RL2 = 0;
+            CW2();
+            lcd.locate(3,1);
+            lcd.printf("AM ");
+            wait(0.3);
+        }else{
+            if (CW_IN == 2)  {
+                CW_IN = 0;
+                RL1= 1;
+                RL2= 0;
+                lcd.locate(3,1);
+                lcd.printf("SSB");
+                wait(0.3);
+                CW2();
+                CW_IN = 0;
+            }
+        }
+    }
+//    DDS_U();
+}
+
+void MODEY(void) {
+    if (CW_IN == 0) {
+        lcd.locate(3,1);
+        lcd.printf("SSB");
+    }else{
+        if (CW_IN == 1) {
+            lcd.locate(3,1);
+            lcd.printf("CW ");
+        }else{
+            if (CW_IN == 2)  {
+                lcd.locate(3,1);
+                lcd.printf("AM ");
+            }
+        }
+    }
+//    DDS_U();
+}                                
\ No newline at end of file