'---------------------------------------------------------------
'Digital Oscilloscope <Oscope2.bas>
'Programmer: Behnam Zakizadeh
'Compiler : BASCOM 2.0.4.0
'Creation Date: 04.Dec.2010
'Last Change:   23.Apr.2011
'Copyright: © 2011 By www.avr64.com
'License: This Is A Free Firmware, Ver: 2.01
'Suitable for Bascom Demo: Yes (less than 4KB)
'---------------------------------------------------------------

$regfile = "m16def.dat"
$crystal = 4000000
$hwstack = 64
$swstack = 64
$framesize = 64

'GLCD
$lib "glcdKS108.lbx"
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = _
 6 , Ce2 = 7 , Cd = 2 , Rd = 3 , Reset = 5 , Enable = 4
Setfont My6_8

'A2D
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Adc
Start Adc

'I/O
Config Pind.= Input                                       'K1
Config Pind.= Input                                       'K2
Config Pind.= Input                                       'K3
Config Pinb.= Input                                       'K4

Set Portd.4                                                 'Set Pullup Res
Set Portd.5                                                 '//
Set Portd.6                                                 '//
Set Portb.0                                                 '//

'Variables
Dim A As Word
Dim X As Byte , Speed As Word , Temp1 As Word
Speed = 1
Dim Refresh As Word
Refresh = 40

Cls
Lcdat 1 , 1 , "Digital Oscilloscope"
Wait 1

Cls
Showpic 0 , 0 , Pic1

Do
   'Horizontal Set
   If Pind.= 0 Then
      If Speed < 1000 Then
          Incr Speed
      End If
   End If
   If Pinb.= 0 Then
      If Speed > 0 Then
         Decr Speed
      End If
   End If

   'Refresh Speed Set
    If Pind.= 0 Then
       If Refresh < 4000 Then
          Refresh = Refresh * 2
       End If
    End If
    If Pind.= 0 Then
       If Refresh > 2 Then
          Refresh = Refresh / 2
       End If
    End If

   For X = 0 To 127
      A = Getadc(1)
      A = A / 16
      A = 64 - A

      'Draw Line ---___---___---___
      Pset X , A , 255

      'Horizontal
      For Temp1 = 1 To Speed
         Waitus 1
      Next Temp1

   Next
   Waitms Refresh
   Cls
   Showpic 0 , 0 , Pic1
   Lcdat 1 , 1 , "Sweep: " ; Speed
   Lcdat 2 , 1 , "Refresh: " ; Refresh
Loop
End

Pic1:
$bgf "Oscope.bgf"
$include "my6_8.font"