' 'JP60 DDS 05 (AD9850) 2017.2.26 JE1UCI '------------------------------------------------------------------------------ $regfile = "m168DEF.DAT" $crystal = 2000000 'LCDの表示が遅いので減速した Config Portb = &B11111111 '1=OUTPUT Config Portc = &B00000000 '0=INPUT Portc = &B11111111 '1=PULL UP Config Portd = &B11111111 Config Lcdmode = Port Config Lcdbus = 4 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 Config Lcdpin = Pin , Db6 = Portb.4 , Db7 = Portb.5 Config Lcdpin = Pin , E = Portb.1 , Rs = Portb.0 Config Lcd = 16 * 2 Dim Frq As Long Dim Start_frq As Long Dim Max_frq As Long Dim Min_frq As Long Dim Tempa As Byte Dim Tempb As Byte Dim Tempc As Byte Dim Tempd As Long Dim Rena_flag As Byte Dim Renb_flag As Byte Dim Osc As Single Dim Stephz As Single Dim Datadec As Single Dim Ddsdata As Long Dim Ddshex As Long Dim Frqdata As String * 8 Dim Flaga As Byte Dim Flagb As Byte Osc = 62500000 '基準の0.5倍を記入 Start_frq = 21200000 '電源ON時の周波数 Max_frq = 21450000 '最大周波数 Min_frq = 21000000 '最小周波数 '------------------------------------------------------------------------------ Dataset: Frq = Start_frq Stephz = Osc / 2147483648 Datadec = Frq Datadec = Datadec / Stephz Ddsdata = Round(datadec) Waitms 500 Gosub Dds Gosub Dds Cls Waitms 500 Locate 1 , 1 Lcd "JP60 DDS VFO-05" Cursor Off Gosub Dspfrq Tempa = Pinc Tempa = Tempa And &H03 Flaga = Tempa Tempb = Pinc Tempb = Tempb And &H30 Flagb = Tempb '------------------------------------------------------------------------------ Main: Main_rena: Gosub Rena Select Case Rena_flag Case 1 : Goto Main_dn Case 2 : Goto Main_up Case Else : Goto Main_renb End Select Main_up: Rena_flag = 0 Tempa = 25 Frq = Frq + Tempa Gosub Maxchk Goto Main_lcd Main_dn: Rena_flag = 0 Tempa = 25 Frq = Frq - Tempa Gosub Minchk Goto Main_lcd Main_renb: Gosub Renb Select Case Renb_flag Case 1 : Goto Main_dn1k Case 2 : Goto Main_up1k Case Else : Goto Main_end End Select Main_up1k: Renb_flag = 0 Tempd = 1000 Frq = Frq + Tempd Gosub Maxchk Goto Main_lcd Main_dn1k: Renb_flag = 0 Tempd = 1000 Frq = Frq - Tempd Gosub Minchk Goto Main_lcd Main_lcd: Gosub Dspfrq Main_dds: Datadec = Frq Datadec = Datadec / Stephz Ddsdata = Round(datadec) Gosub Dds Main_end: Goto Main End '------------------------------------------------------------------------------ '以下サブルーチン '------------------------------------------------------------------------------ Rena: Tempa = Pinc Tempa = Tempa And &H03 Select Case Flaga Case 0 : Goto Rena_0 Case 1 : Goto Rena_1 Case 2 : Goto Rena_2 Case 3 : Goto Rena_3 Case Else : Goto Rena_end End Select Rena_0: Select Case Tempa Case 0 : Goto Rena_end Case 1 : Goto Rena_up Case 2 : Goto Rena_dn Case Else : Goto Rena_end End Select Rena_1: Select Case Tempa Case 1 : Goto Rena_end Case 3 : Goto Rena_up Case 0 : Goto Rena_dn Case Else : Goto Rena_end End Select Rena_2: Select Case Tempa Case 2 : Goto Rena_end Case 0 : Goto Rena_up Case 3 : Goto Rena_dn Case Else : Goto Rena_end End Select Rena_3: Select Case Tempa Case 3 : Goto Rena_end Case 2 : Goto Rena_up Case 1 : Goto Rena_dn Case Else : Goto Rena_end End Select Rena_up: Rena_flag = 1 Goto Rena_end Rena_dn: Rena_flag = 2 Rena_end: Flaga = Tempa Return '------------------------------------------------------------------------------ Renb: Tempb = Pinc Tempb = Tempb And &H30 Shift Tempb , Right , 4 Select Case Flagb Case 0 : Goto Renb_0 Case 1 : Goto Renb_1 Case 2 : Goto Renb_2 Case 3 : Goto Renb_3 Case Else : Goto Renb_end End Select Renb_0: Select Case Tempb Case 0 : Goto Renb_end Case 1 : Goto Renb_up Case 2 : Goto Renb_dn Case Else : Goto Renb_end End Select Renb_1: Select Case Tempb Case 1 : Goto Renb_end Case 3 : Goto Renb_up Case 0 : Goto Renb_dn Case Else : Goto Renb_end End Select Renb_2: Select Case Tempb Case 2 : Goto Renb_end Case 0 : Goto Renb_up Case 3 : Goto Renb_dn Case Else : Goto Renb_end End Select Renb_3: Select Case Tempb Case 3 : Goto Renb_end Case 2 : Goto Renb_up Case 1 : Goto Renb_dn Case Else : Goto Renb_end End Select Renb_up: Renb_flag = 1 Goto Renb_end Renb_dn: Renb_flag = 2 Renb_end: Flagb = Tempb Return '------------------------------------------------------------------------------ Dspfrq: Locate 2 , 3 Frqdata = Str(frq) Select Case Frq Case Is >= 10000000 : Goto Dspfrq_lcd7 '10MHz台 Case Is >= 1000000 : Goto Dspfrq_lcd6 '1MHz台 Case Is >= 100000 : Goto Dspfrq_lcd5 '100kHz台 Case Is >= 10000 : Goto Dspfrq_lcd4 '10kHz台 Case Is >= 1000 : Goto Dspfrq_lcd3 '1kHz台 Case Is >= 100 : Goto Dspfrq_lcd2 '100Hz台 Case Is >= 10 : Goto Dspfrq_lcd1 '10Hz台 End Select Dspfrq_lcd7: Lcd Left(frqdata , 2) : Lcd "." : Lcd Mid(frqdata , 3 , 3) : Lcd "," : Lcd Mid(frqdata , 6 , 1) : Lcd "MHz" '最後を6,2から変更して10Hz台をカットした Return Dspfrq_lcd6: Lcd " " : Lcd Left(frqdata , 1) : Lcd "." : Lcd Mid(frqdata , 2 , 3) : Lcd "," : Lcd Mid(frqdata , 5 , 2) : Lcd "MHz " Return Dspfrq_lcd5: Lcd " " : Lcd Left(frqdata , 3) : Lcd "." : Lcd Mid(frqdata , 4 , 2) : Lcd "kHz " Return Dspfrq_lcd4: Lcd " " : Lcd Left(frqdata , 2) : Lcd "." : Lcd Mid(frqdata , 3 , 2) : Lcd "kHz " Return Dspfrq_lcd3: Lcd " " : Lcd Left(frqdata , 1) : Lcd "." : Lcd Mid(frqdata , 2 , 2) : Lcd "kHz " Return Dspfrq_lcd2: Lcd " " : Lcd Left(frqdata , 3) : Lcd "Hz" Return Dspfrq_lcd1: Lcd " " : Lcd Left(frqdata , 2) : Lcd "Hz" Return '------------------------------------------------------------------------------ Dds: Tempc = 00 '00:CLK X 1 01:CLK X 3 (AD9851 only) Ddshex = Hex(ddsdata) Shiftout Portd.3 , Portd.1 , Ddsdata , 3 Shiftout Portd.3 , Portd.1 , Tempc , 3 Set Portd.2 Reset Portd.2 Return '------------------------------------------------------------------------------ Minchk: If Frq < Min_frq Then Frq = Min_frq End If Return '------------------------------------------------------------------------------ Maxchk: If Frq > Max_frq Then Frq = Max_frq End If Return '------------------------------------------------------------------------------ End