Search This Blog

Wednesday, March 31, 2010

Atmega16 code Timer example, using external oscilator, watchdog timer

/*****************************************************
Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 16.000000 MHz External Crystal
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include mega16.h
#include delay.h
#include stdio.h
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include lcd.h>
#define ADC_VREF_TYPE 0x20

// Read the 8 most significant bits of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCH;
}

// global variables
//unsigned int freq_array[]={50,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950,1000} ;
//unsigned int no_of_pulses[]={2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40} ;
//unsigned int pc_array[]={1,2,5,10,20,50,100,200,500,1000} ;
void PC_OUTPUTS(void);
void DELAY(void);
void CODE(void);
void ADC_DELAY(unsigned int);

unsigned int actual_delay_time,volt;
unsigned int FREQ_COUNTER=2;
unsigned int PC_COUNTER=1;
unsigned int var=1;
unsigned int var2=1;
unsigned int BTN_0=0;      
unsigned int BTN_1=0;
unsigned int BTN_2=0;
unsigned int BTN_3=0;
unsigned int BTN_4=0;
unsigned int S_10=0;
unsigned int ON_OFF_FLAG=0;       //CAL ON/OFF flag

//EEPROM VARS
#pragma warn-
eeprom unsigned int EE_FREQ_COUNTER=2 ;
eeprom unsigned int EE_PC_COUNTER=1 ;
unsigned int eeprom *ptr_EE_FREQ_COUNTER;
unsigned int eeprom *ptr_EE_PC_COUNTER;
#pragma warn+
unsigned int  *ptr_FREQ_COUNTER,*ptr_PC_COUNTER;

//Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
        PORTD.7=~PORTD.7;                       //High-Low pulse
        TCNT1=actual_delay_time;
}

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
   var++;                    //Approx. 10 sec delay
   if (var > 10000)
   {    
      var=1; 
      S_10++;    
   }        
   if(S_10 == 10)
    {
      PORTD.2=0;                       //High-Low pulse
      S_10=0;
      TCCR0=0b00000000;
    }
   TCNT0=0xFF;
}

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
   var2++;         //Push buttons delay
   if (var2 > 54000)
   {  
        var2=1;
        BTN_0=0;      
        BTN_1=0;
        BTN_2=0;
        BTN_3=0;
        BTN_4=0;
   }
    TCNT2=0xFF;     
}

void main(void)
{
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0xFF;
DDRB=0x00;          //input   push buttons

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0xff;           //output         lcd

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xff;           //output     led

DDRD.3=0;
PORTD.3=1;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0b00000000;                   //0b00000101;
TCNT0=0xFF;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TCNT1=55535;
TCCR1A=0b00000000;
TCCR1B=0b00000010;   //SELECT CLOCK HRER CS
       
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
OCR2=0x00;
TCCR2=0b00000101;
TCNT2=0xFF;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

//Timer(s)/Counter(s) Interrupt(s) initialization
//TIMSK=0x00;
TIMSK=0b01000101;                  //6 bit timer2  0 bit tiemr0   2 bit timer1 
// Analog Comparator initialization
// Analog Comparator:
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0xA6;
SFIOR&=0x1F;

lcd_init(20);
lcd_clear();
lcd_putsf("ETM");

ptr_EE_FREQ_COUNTER=&EE_FREQ_COUNTER;
ptr_EE_PC_COUNTER=&EE_PC_COUNTER;
ptr_FREQ_COUNTER=&FREQ_COUNTER;
ptr_PC_COUNTER=&PC_COUNTER;
*ptr_FREQ_COUNTER=*ptr_EE_FREQ_COUNTER;
*ptr_PC_COUNTER=*ptr_EE_PC_COUNTER;

#asm("sei")
DELAY();
PC_OUTPUTS();

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/256k
#pragma optsize-
WDTCR=0x1C;
WDTCR=0b00001111;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTD.7=0;
TCCR1A=0b00000000;
TCCR1B=0b00000000;       //STOP TIMER
lcd_gotoxy(13,1);
lcd_putsf("OFF");
               
while (1)
      { 
         //read voltage from PORTA.0  0 - 255   
         WDTCR=0b00001111;
         volt=(unsigned int)read_adc(0);                                 //100 us 
         if (S_10==0)
         {     
             if(PIND.3==0)
             {
              PORTD.2=1;
              S_10=1;
              TCCR0=0b00000101;
             }
         }      
        DELAY();  
        WDTCR=0b00001111;          
        CODE(); 
        delay_ms(350);       
      };                                                        //END OF WHILE LOOP              
}                                                               //END OF MAIN

void CODE()
{
        //CAL ON OFF
        if (PINB.4 == 0 && BTN_4==0)
         {
            if (ON_OFF_FLAG==1) 
            {
                ON_OFF_FLAG=0;
                lcd_gotoxy(13,1);
                lcd_putsf("OFF");  
                PORTD.7=0;
                TCCR1A=0b00000000;
                TCCR1B=0b00000000;   //STOP TIMER 
            }   
            else
            {
                ON_OFF_FLAG=1; 
                lcd_gotoxy(13,1);
                lcd_putsf(" ON"); 
                PC_OUTPUTS();  
                TCCR1A=0b00000000;
                TCCR1B=0b00000010;   //START TIMER           prescaler=8 
                //PORTD.2=1;
                //TCCR0=0b00000101;
            }
            BTN_4=1;
         }
         if (PINB.4 == 1)
            BTN_4=0;              
                   
        //INCREASE NO OF PULSES PORTB 0 PIN       
        if (PINB.0 == 0 && BTN_0==0)
         {
            if (FREQ_COUNTER < 40)
             {
              FREQ_COUNTER=FREQ_COUNTER+2; 
              *ptr_EE_FREQ_COUNTER=*ptr_FREQ_COUNTER;
             }  
             else
             {
              FREQ_COUNTER=2;
              *ptr_EE_FREQ_COUNTER=*ptr_FREQ_COUNTER;
             }
             BTN_0=1; 
         }
        if (PINB.0 == 1)
            BTN_0=0;       
        
        //DECREASE NO OF PULSES PORTB 1 PIN     
        if (PINB.1 == 0 && BTN_1==0)
         {    
            if (FREQ_COUNTER > 2)
             {
                FREQ_COUNTER=FREQ_COUNTER - 2;  
               *ptr_EE_FREQ_COUNTER=*ptr_FREQ_COUNTER;
             }
             else
             {
               FREQ_COUNTER=40;  
               *ptr_EE_FREQ_COUNTER=*ptr_FREQ_COUNTER;
             }
             BTN_1=1; 
         } 
        if (PINB.1 == 1)
            BTN_1=0;       
             
        //INCREASE IN PC COUNT PORTB 2 PIN     
        if (PINB.3 == 0 && BTN_2==0)
         {
            if (PC_COUNTER < 10)
             {      
                PC_COUNTER++;
                PC_OUTPUTS();
               *ptr_EE_PC_COUNTER=*ptr_PC_COUNTER;
             }
             else
             {
                PC_COUNTER=1;
                PC_OUTPUTS();
               *ptr_EE_PC_COUNTER=*ptr_PC_COUNTER;            
             }
             BTN_2=1;
         }
        if (PINB.3 == 1)
            BTN_2=0;       
          
        //DECREAE IN PC COUNT PORTB 2 PIN     
        if (PINB.2 == 0 && BTN_3 == 0)
         {
            if (PC_COUNTER > 1)
             {
                PC_COUNTER--;
                PC_OUTPUTS();
                *ptr_EE_PC_COUNTER=*ptr_PC_COUNTER;
             }
             else
             {
                PC_COUNTER=10;
                PC_OUTPUTS();
                *ptr_EE_PC_COUNTER=*ptr_PC_COUNTER;
             }
             BTN_3=1;  
         }
        
        if (PINB.2 == 1)
            BTN_3=0;       
      
        //BATTERY INDICATION  PORTB 5 PIN - LO   6 - OK  7 - CH
        if (PINB.6 == 0)
         {
            lcd_gotoxy(10,0);
            lcd_putsf("BAT OK");
         }
         else if (PINB.7 == 0)
         {
            lcd_gotoxy(10,0);
            lcd_putsf("BAT CH");
         }  
         else if  (PINB.5 == 0)
         {
            lcd_gotoxy(10,0);
            lcd_putsf("BAT LO");
         }
         else
         { 
            lcd_gotoxy(10,0);
            lcd_putsf("      ");   
         }
}

/*------------------------------------------------------------------------------
 Procedure:    PC_OUTPUTS
 Inputs:        none
 Return:        none
 Description:    Vary the 5 PC signals
------------------------------------------------------------------------------*/

void PC_OUTPUTS(void)
{
       lcd_gotoxy(0,1);
       switch (PC_COUNTER)
       {
         case 1:      
             PORTD.0=0;
             PORTD.1=0;
             PORTD.4=1;  
             PORTD.5=0;
             PORTD.6=1;
             //lcd_gotoxy(0,1);
             lcd_putsf("CAL PC 1   ");
             break;  
         case 2: 
             PORTD.0=0;
             PORTD.1=1;
             PORTD.4=0;  
             PORTD.5=1;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
               lcd_putsf("CAL PC 2  ");
             break;
         case 3:
             PORTD.0=1;
             PORTD.1=0;
             PORTD.4=1;  
             PORTD.5=1;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
               lcd_putsf("CAL PC 5   ");
             break;
         case 4:
             PORTD.0=0;
             PORTD.1=0;
             PORTD.4=1;  
             PORTD.5=1;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
               lcd_putsf("CAL PC 10  ");
             break;
         case 5:
             PORTD.0=0;
             PORTD.1=1;
             PORTD.4=1;  
             PORTD.5=0;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
             lcd_putsf("CAL PC 20  ");
             break;   
          case 6:      
             PORTD.0=1;
             PORTD.1=0;
             PORTD.4=1;  
             PORTD.5=0;
             PORTD.6=0; 
             //lcd_gotoxy(0,1);
              lcd_putsf("CAL PC 50  ");
             break;  
         case 7: 
             PORTD.0=0;
             PORTD.1=0;
             PORTD.4=1;  
             PORTD.5=0;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
              lcd_putsf("CAL PC 100 ");
             break;
         case 8:
             PORTD.0=0;
             PORTD.1=1;
             PORTD.4=0;  
             PORTD.5=0;
             PORTD.6=0;
             lcd_gotoxy(0,1);
             lcd_putsf("CAL PC 200 ");
             break;
         case 9:
             PORTD.0=1;
             PORTD.1=0;
             PORTD.4=0;  
             PORTD.5=0;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
             lcd_putsf("CAL PC 500 ");
             break;
         case 10:
             PORTD.0=0;
             PORTD.1=0;
             PORTD.4=0;  
             PORTD.5=0;
             PORTD.6=0;
             lcd_gotoxy(0,1);
              lcd_putsf("CAL PC 1000");
             break; 
         default:
             PORTD.0=0;
             PORTD.1=0;
             PORTD.4=1;  
             PORTD.5=1;
             PORTD.6=0;
             //lcd_gotoxy(0,1);
             //sprintf(str_buffer,"ERROR PC - %u",PC_COUNTER) ;
             lcd_putsf("INC MAG");
             PC_COUNTER=1;

       };
}


/*------------------------------------------------------------------------------
 Procedure:    ADC_DELAY
 Inputs:        DELAY (STEP) TIME
 Return:        none
 Description:    DELAY +/- 2.5%
------------------------------------------------------------------------------*/
void ADC_DELAY(unsigned int delay_time)
{
    actual_delay_time=65535 - (delay_time*2-3);
    if ( volt < 128)
    {  
        actual_delay_time= 65535 -(( delay_time -  (delay_time  / 100) * (10 - (8 * volt  / 100  ) ) ) )*2-3; 
    }  
    if (volt > 128 && volt < 256)
    {
        actual_delay_time= 65535 -(( delay_time + (delay_time  / 100) * (8 * (volt - 128) / 100 ) ) )*2-3;
    }
      
    if (volt == 127 || volt == 128)
         actual_delay_time=65535 - (delay_time*2-3);     
        
   WDTCR=0b00001111;                             
}

/*------------------------------------------------------------------------------
 Procedure:    DELAY
 Inputs:        none
 Return:        none
 Description:    Vary the Delay of signal
------------------------------------------------------------------------------*/
void DELAY(void)
{
     lcd_gotoxy(0,0);       
     switch (FREQ_COUNTER)
       {
         case 2: 
             ADC_DELAY(10000);
             lcd_putsf("PUL NO 2 ");
             break;  
         case 4:                      
             ADC_DELAY(5000); 
             lcd_putsf("PUL NO 4 ");
             break;
         case 6:
             ADC_DELAY(3333);
             lcd_putsf("PUL NO 6 ");
             break;
         case 8:
             ADC_DELAY(2500);
             lcd_putsf("PUL NO 8 ");
             break;
         case 10:
             ADC_DELAY(2000);
             lcd_putsf("PUL NO 10");
             break;   
         case 12:
             ADC_DELAY(1667);      
             lcd_putsf("PUL NO 12");
             break;  
         case 14:
             ADC_DELAY(1428);
             lcd_putsf("PUL NO 14");
             break;
         case 16:
             ADC_DELAY(1250);
             lcd_putsf("PUL NO 16");
             break;
         case 18:
             ADC_DELAY(1111);
             lcd_putsf("PUL NO 18");
             break;
         case 20:
             ADC_DELAY(1000);
             lcd_putsf("PUL NO 20");
             break;   
         case 22:
             ADC_DELAY(909);     
             lcd_putsf("PUL NO 22");
             break;  
         case 24:  
             ADC_DELAY(833);
             lcd_putsf("PUL NO 24");
             break;
         case 26:
             ADC_DELAY(769);
             lcd_putsf("PUL NO 26");
             break;
         case 28:
             ADC_DELAY(714);
             lcd_putsf("PUL NO 28");
             break;
         case 30:
             ADC_DELAY(667);
             lcd_putsf("PUL NO 30");
             break;   
         case 32:    
             ADC_DELAY(625);
             lcd_putsf("PUL NO 32");
             break;  
         case 34:
             ADC_DELAY(588);
             lcd_putsf("PUL NO 34");
             break;
         case 36:  
             ADC_DELAY(556);
            lcd_putsf("PUL NO 36");
             break;
         case 38: 
             ADC_DELAY(526);
             lcd_putsf("PUL NO 38");
             break;
         case 40:   
             ADC_DELAY(500);
             lcd_putsf("PUL NO 40");
             break; 
         default:
             ADC_DELAY(500);
             //sprintf(str_buffer,"ERROR-%u",FREQ_COUNTER)  ;
             lcd_putsf("INC/DEC"); 
             FREQ_COUNTER=2;
       };     
      
}

Fuse Bits for External Crystal in ATmega16

Thursday, March 25, 2010

How to create a DLL in VC++ and use Assembly code in it?

Create a DLL in VC++ and use assembly code in it.
----------------------------------------------------
sysinfo.h

#include
extern "C" __declspec(dllexport) int __stdcall getCPUFamily());


---------------------------------------------------------------------
sysinfo.cpp

#include "SysInfo.h"
extern "C" __declspec(dllexport) int __stdcall getCPUFamily() {
    int retVal;
 //This is how to use assembly code
    _asm {
        mov eax, 1
        cpuid
        mov retVal, eax
    }

    return (retVal >> 8);
}

How to use a DLL in VB.NET, Created In VB.NET

Use a DLL in VB.NET which is created in VB.NET
---------------------------------------
Start a new project (Windows Application) and Code
Then : Project -> Add Reference -> locate DLL created in VB.NET and press "Ok"-button.
--------------------------------------------------------
Imports System
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim obj As New ClassLibrary1.Class1
        Dim a() As Integer = {20, 21}
        Dim b() As Integer = {0, 0}

        Dim i As Integer
        obj.Main(a, b)          'DLL function calling

        For Each i In b
            MessageBox.Show(i.ToString)
        Next
    End Sub
End Class
----------------------------------------------------------------------
Form1 has button1 which will call main funcion of DLL.

Also See : How to create dll in VB.NET

How to create a DLL in VB.NET?

Creating a DLL in VB.NET
---------------------------------------------
Start a project as Classlibray and add CODE
----------------------------------------------
Imports System.Windows.Forms
Public Class Class1

    Public Sub Main(ByVal ary() As Integer, ByVal ary_2() As Integer)
        'populate the array
        Dim i As Integer
        For i = 0 To ary.Length - 1
            ary_2(i) = ary(i) + 10
        Next i
       MessageBox.Show("10 has been added in each array element of ary1.")
    End Sub
End Class
------------------------------
*** To use Messagebox in VB.NET DLL you have to:
Do this :  Project menu select "Add Reference".  and locate System.Windows.Forms, select it and press
OK button.
---------------------------------------------
Now bulid you get DLL file in the Debug or Release folder as per settings.

Also See : How to use DLL in VB.NETcreated in VB.NET

Wednesday, March 24, 2010

Access database in vb.net code example

Module
database.vb
-------------------------------
Imports System.Data.OleDb
Module database
    Public Sub connectDatabase()

        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            Else
                MessageBox.Show("Opened Already")
            End If

            If cn.State = ConnectionState.Open Then
                'MessageBox.Show("open")

                cmd = New OleDbCommand("select * from IA_TABLE", cn)
                dr = cmd.ExecuteReader
                readDatabase(cmd, cn, dr)
                dr.Close()
                cn.Close()
            Else
                MessageBox.Show("Not open")
            End If

        Catch

        End Try

    End Sub

    Public Sub readDatabase(ByVal cmd As OleDbCommand, ByVal cn As OleDbConnection, ByVal dr As OleDbDataReader)
        Main.ListBox_Customer_List.Items.Clear()
        Cust_Array_List.Clear()
        main.CB_CS_S_NO.Items.Clear()
        main.CB_SITE_NAME.Items.Clear()
        main.CB_DIV_CARD_NO.Items.Clear()
        main.CD_DATE.Items.Clear()
        If dr.HasRows Then
            While dr.Read()
                Dim New_Obj_Customser As IA
                New_Obj_Customser.CS_S_NO = dr(1)
                main.CB_CS_S_NO.Items.Add(dr(1))
                New_Obj_Customser.SITE_NAME = dr(2)
                main.CB_SITE_NAME.Items.Add(dr(2))
                New_Obj_Customser.DIV_CARD_NO = dr(3)
                main.CB_DIV_CARD_NO.Items.Add(dr(3))
                New_Obj_Customser.D_DATE = dr(4)
                main.CD_DATE.Items.Add(dr(4))
                Cust_Array_List.Add(New_Obj_Customser)
                Main.ListBox_Customer_List.Items.Add(New_Obj_Customser)

            End While
        Else
            main.CB_CS_S_NO.Items.Clear()
            main.CB_DIV_CARD_NO.Items.Clear()
            main.CB_SITE_NAME.Items.Clear()
            main.CD_DATE.Items.Clear()
            If MessageBox.Show("NO ROW FOUND!!!!" & Environment.NewLine & "WANT TO ADD NOW?", "NO ROW FOUND", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                ADD_NEW_FORM.Show()
                ADD_NEW_FORM.BTN_NEW.PerformClick()
            End If

        End If

    End Sub
    Public Sub writeDatabase(ByVal name, ByVal add, ByVal mob, ByVal email, ByVal DES)


        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
                ' MessageBox.Show("open")
            Else
                MessageBox.Show("open already")
            End If

            If cn.State = ConnectionState.Open Then
                'MessageBox.Show(objCh1_FULL.isON & "  " & objCh1_FULL.isScale)
                'QUERY TO UPDATE ALL SETTINGS
                cmd = New OleDbCommand("insert into IA_TABLE(CS_SERIAL_NO, SITE_NAME, DIV_CARD_NO, D_DATE, DESCRIPTION) Values('" & name & "' , '" & add & "' , '" & mob & "', '" & email & "', '" & DES & "')", cn)
                '  cmd = New OleDbCommand("select * from IA_TABLE", cn)
                dr = cmd.ExecuteReader


                dr.Close()
                cn.Close()
            End If
        Catch es As Exception
            MessageBox.Show(es.ToString)
        End Try



    End Sub
    Public Sub delDatabase(ByVal S_NO_DEL)
        Dim query_str As String = "Delete from IA_TABLE where CS_SERIAL_NO ='" & S_NO_DEL & "'"
        MessageBox.Show(query_str)

        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
                ' MessageBox.Show("open")
            Else
                MessageBox.Show("open already")
            End If

            If cn.State = ConnectionState.Open Then
                'MessageBox.Show(objCh1_FULL.isON & "  " & objCh1_FULL.isScale)
                'QUERY TO UPDATE ALL SETTINGS
                cmd = New OleDbCommand(query_str, cn)
                '  cmd = New OleDbCommand("select * from IA_TABLE", cn)
                dr = cmd.ExecuteReader


                dr.Close()
                cn.Close()
            End If
        Catch es As Exception
            MessageBox.Show(es.ToString)
        End Try



    End Sub

    'Public Sub selDatabase(ByVal name)
    '    'MessageBox.Show(name & " " & add & " " & mob & " " & email)

    '    Dim cn As OleDbConnection
    '    Dim cmd As OleDbCommand
    '    Dim dr As OleDbDataReader

    '    Try
    '        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
    '        'provider to be used when working with access database
    '        If cn.State = ConnectionState.Closed Then
    '            cn.Open()
    '            ' MessageBox.Show("open")
    '        Else
    '            MessageBox.Show("open already")
    '        End If

    '        If cn.State = ConnectionState.Open Then
    '            'MessageBox.Show(objCh1_FULL.isON & "  " & objCh1_FULL.isScale)
    '            'QUERY TO UPDATE ALL SETTINGS
    '            cmd = New OleDbCommand("select * from IA_TABLE where NAME ='" & name & "'", cn)
    '            '  cmd = New OleDbCommand("select * from IA_TABLE", cn)
    '            dr = cmd.ExecuteReader
    '            If dr.HasRows Then
    '                While dr.Read()
    '                    Main.Tb_CS_S_NOM.Text = dr(1)
    '                    Main.Tb_Cust_AddM.Text = dr(2)

    '                    Main.Tb_SITE_NAMEM.Text = dr(3)
    '                    Main.Tb_D_DATEM.Text = dr(4)
    '                End While
    '            End If

    '            dr.Close()
    '            cn.Close()
    '        End If
    '    Catch es As Exception
    '        MessageBox.Show(es.ToString)
    '    End Try



    'End Sub
    Public Sub modifyDatabase()


        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
                ' MessageBox.Show("open")
            Else
                MessageBox.Show("open already")
            End If



            If cn.State = ConnectionState.Open Then
                'MessageBox.Show(objCh1_FULL.isON & "  " & objCh1_FULL.isScale)
                'QUERY TO UPDATE ALL SETTINGS
                cmd = New OleDbCommand("update IA_TABLE set  CS_SERIAL_NO ='" & ADD_NEW_FORM.TB_CS_SERIAL_NO.Text & _
                "' ,  SITE_NAME='" & ADD_NEW_FORM.TB_SITE_NAME.Text & "' ,  DIV_CARD_NO='" & _
                ADD_NEW_FORM.TB_DIV_CARD_NO.Text & "' , D_DATE='" & ADD_NEW_FORM.TB_DEL_DATE.Text & _
                "' , DESCRIPTION='" & ADD_NEW_FORM.TB_DES.Text & _
                "' where CS_SERIAL_NO = '" & ADD_NEW_FORM.TB_CS_SERIAL_NO.Text & "' ", cn)
                '  cmd = New OleDbCommand("select * from IA_TABLE", cn)
                dr = cmd.ExecuteReader


                dr.Close()
                cn.Close()
            End If
        Catch es As Exception
            MessageBox.Show(es.ToString)
        End Try
    End Sub

    Public Function isDuplicateRow(ByVal name, ByVal add, ByVal mob, ByVal email) As Boolean
        'MessageBox.Show(name & " " & add & " " & mob & " " & email)

        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
                ' MessageBox.Show("open")
            Else
                MessageBox.Show("open already")
            End If

            If cn.State = ConnectionState.Open Then

                'QUERY TO UPDATE ALL SETTINGS
                cmd = New OleDbCommand("select * from IA_TABLE where NAME ='" & name & "' and  ADDRESS='" & add & "' and  MOB='" & mob & "' and EMAIL='" & email & "' ", cn)
                '  cmd = New OleDbCommand("select * from IA_TABLE", cn)
                dr = cmd.ExecuteReader
                If dr.HasRows Then
                    '  While dr.Read()
                    'If dr(0) = name Then
                    Return False
                    ' If
                    ' End While
                End If

                dr.Close()
                cn.Close()
            End If
            Return True
        Catch es As Exception
            MessageBox.Show(es.ToString)
        End Try

    End Function


    Public Sub searchDatabase(ByVal str)
        Dim query_str As String = "select * from IA_TABLE where CS_SERIAL_NO ='" & str & "'"
        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            Else
                MessageBox.Show("Opened Already")
            End If

            If cn.State = ConnectionState.Open Then
                'MessageBox.Show("open")

                cmd = New OleDbCommand(query_str, cn)
                dr = cmd.ExecuteReader

                '  MessageBox.Show(dr.GetDataTypeName)
                If dr.HasRows Then
                    While dr.Read()

                        'MessageBox.Show(dr(1) & " | " & dr(2) & " | " & dr(3) & " | " & dr(4) & " | " & dr(5))

                        ADD_NEW_FORM.LBL_UPDATE.Text = "Cleverscope with Serial No. " & dr(1)
                        ADD_NEW_FORM.TB_CS_SERIAL_NO.Text = dr(1)
                        ADD_NEW_FORM.TB_SITE_NAME.Text = dr(2)
                        ADD_NEW_FORM.TB_DIV_CARD_NO.Text = dr(3)
                        ADD_NEW_FORM.TB_DEL_DATE.Text = dr(4)
                        ADD_NEW_FORM.TB_DES.Text = dr(5)

                    End While

                Else
                    MessageBox.Show("No rows")
                    ' REload database
                    connectDatabase()
                End If

                dr.Close()
                cn.Close()
            Else
                MessageBox.Show("UNABLE TO OPEN.")
            End If

        Catch

        End Try

    End Sub

    Public Sub editDatabase(ByVal S_NO_DEL)
        Dim D As String = CType(S_NO_DEL + 1, String)
        Dim cn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader
        Dim query_str As String = "select * from IA_TABLE where S_NO ='" & D & "'"
        Try
            cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=IMPULSE_ANALYZER_DETAILS.mdb;")
            'provider to be used when working with access database
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            Else
                MessageBox.Show("Opened Already")
            End If

            If cn.State = ConnectionState.Open Then
                'MessageBox.Show("open")
                cmd = New OleDbCommand(query_str, cn)
                dr = cmd.ExecuteReader
                '  MessageBox.Show(dr.GetDataTypeName)
                If dr.HasRows Then
                    While dr.Read()
                        'MessageBox.Show(dr(1) & " | " & dr(2) & " | " & dr(3) & " | " & dr(4) & " | " & dr(5))
                        ADD_NEW_FORM.BTN_SAVE.Visible = False
                        ADD_NEW_FORM.BTN_NEW.Visible = True
                        ADD_NEW_FORM.LBL_UPDATE.Text = "Edit: Cleverscope with Serial No. " & dr(1)
                        ADD_NEW_FORM.TB_CS_SERIAL_NO.Text = dr(1)
                        ADD_NEW_FORM.TB_SITE_NAME.Text = dr(2)
                        ADD_NEW_FORM.TB_DIV_CARD_NO.Text = dr(3)
                        ADD_NEW_FORM.TB_DEL_DATE.Text = dr(4)
                        ADD_NEW_FORM.TB_DES.Text = dr(5)
                        ADD_NEW_FORM.Show()
                        MessageBox.Show("No rowdsf.")

                        'ADD_NEW_FORM.TB_CS_SERIAL_NO.Enabled = False
                        'ADD_NEW_FORM.TB_SITE_NAME.Enabled = False
                        'ADD_NEW_FORM.TB_DIV_CARD_NO.Enabled = False
                        'ADD_NEW_FORM.TB_DEL_DATE.Enabled = False
                        'ADD_NEW_FORM.TB_DES.Enabled = False
                    End While
                Else
                    MessageBox.Show("No rows found.")
                    ' REload database
                    connectDatabase()
                End If
                dr.Close()
                cn.Close()
            Else
                MessageBox.Show("UNABLE TO OPEN.")
            End If
        Catch
        End Try
    End Sub
End Module
---------------------------------------
2.  Functions.vb


Imports System.Xml
Module functios
    Public SITE_NAME, CS_SERIAL_NO, DIV_CARD_NO As String
    Public DELIVERY_DATE As Date


    Public Cust_Array_List As New ArrayList()
    Public SORTBY As String

    Public NM = 0, MB = 0, AD = 0, EM = 0
    'Structure contains the IA detail
    Public Structure IA
        Implements IComparable
        Public CS_S_NO As String
        Public SITE_NAME As String
        Public DIV_CARD_NO As String
        Public D_DATE As String
        'When Ever a IA structure added to the list, the LISTBOX calls the ToString method and we override it here
        Public Overrides Function ToString() As String
            Return "CS S.NO:- " & CS_S_NO & "  |  " & "SITE:- " & SITE_NAME & "  |  " & "DIV CARD NO.:- " & DIV_CARD_NO & "  |  " & "DATE:- " & D_DATE
        End Function

        'Since the ArrayList does not have the capability to sort objects as it would strings,
        'so to do tht Implement an IComparable.CompareTo function to facilitate the sort. 
        'Obviously, you can expand or modify the CompareTo function to sort on multiple properties of different types.

        Public Function CompareTo(ByVal obj As Object) As Integer _
           Implements System.IComparable.CompareTo
            If Not TypeOf obj Is IA Then
                Throw New Exception("Object is not MyObject")
            End If
            Dim Compare As IA = CType(obj, IA)
            Dim result As Integer
            Select Case SORTBY
                Case "Name"
                    result = Me.CS_S_NO.CompareTo(Compare.CS_S_NO)
                Case "Mob"
                    result = Me.SITE_NAME.CompareTo(Compare.SITE_NAME)
                Case "Address"
                    result = Me.DIV_CARD_NO.CompareTo(Compare.DIV_CARD_NO)
                Case "EMail"
                    result = Me.D_DATE.CompareTo(Compare.D_DATE)
                Case Else
                    result = Me.CS_S_NO.CompareTo(Compare.CS_S_NO)
            End Select
            '  Dim result As Integer = Me.CS_S_NO.CompareTo(Compare.CS_S_NO)

            If result = 0 Then
                result = Me.CS_S_NO.CompareTo(obj.CS_S_NO)
            End If
            Return result
        End Function
    End Structure

    Public Function SimpleCrypt(ByVal Text As String) As String
        ' Encrypts/decrypts the passed string using
        ' a simple ASCII value-swapping algorithm
        Dim strTempChar As String, i As Integer
        strTempChar = ""
        For i = 1 To Len(Text)
            If Asc(Mid$(Text, i, 1)) < 133 Then
                strTempChar = CType(Asc(Mid$(Text, i, 1)) + 133, String)
            ElseIf Asc(Mid$(Text, i, 1)) > 133 Then
                strTempChar = _
          CType(Asc(Mid$(Text, i, 1)) - 133, String)
            End If
            Mid$(Text, i, 1) = Chr(CType(strTempChar, Integer))
        Next i
        Return Text
    End Function

    Public Sub GENERATE_CS_SERIAL_NO_FILE(ByVal F_N As String)
        Dim writer As New XmlTextWriter(F_N, System.Text.Encoding.UTF8)
        Try


            writer.WriteStartDocument(True)
            writer.Formatting = Formatting.Indented
            writer.Indentation = 2

            writer.WriteStartElement("HARDWARE")
            writer.WriteStartElement("WARNING")
            writer.WriteString("HARDWARE FILE, ANY CHANGE MAY LEAD TO IRRELEVANT RESULTS.")
            writer.WriteEndElement()

            writer.WriteStartElement("HARDWARE_NUMBER")
            writer.WriteStartElement("HARDWARE_NUMBER_A")
            'GET CLEVER SCOPE SERIAL NUMBER FROM THE TEXT BOX
            writer.WriteString(SimpleCrypt(main.TB_CS_NO.Text))
            writer.WriteEndElement()


            writer.WriteStartElement("HARDWARE_NUMBER_B")
            'FOR FUTURE USE
            writer.WriteString(SimpleCrypt(main.TB_CS_NO.Text))
            writer.WriteEndElement()

            writer.WriteEndDocument()
            writer.Close()
            MessageBox.Show("FILE SAVED AS " & F_N, "FILE SAVED", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show("FILE NOT SAVED!!!!!!!!!!", "FILE NOT SAVED", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            writer.Close()

        Finally

        End Try

    End Sub

    'Public Sub read_calibration_file()
    '    Dim f As New FileInfo("c:\KVM_CALIBRATION.xml")
    '    If f.Exists Then
    '        Try
    '            Dim xmldoc As New XmlDataDocument()
    '            Dim xmlnode As XmlNodeList

    '            Dim fs As New System.IO.FileStream("c:\KVM_CALIBRATION.xml", FileMode.Open, FileAccess.Read)
    '            xmldoc.Load(fs)

    '            ''''''''''''''''''''''''''''''''''''''''''''''''''
    '            'CHANNEL 0
    '            xmlnode = xmldoc.GetElementsByTagName("CH0")
    '            AC_OFFSET_CH0 = (xmlnode(0).ChildNodes.Item(0).InnerText.Trim())
    '            AC_GAIN_CH0 = (xmlnode(0).ChildNodes.Item(1).InnerText.Trim())
    '            DC_OFFSET_CH0 = (xmlnode(0).ChildNodes.Item(2).InnerText.Trim())
    '            DC_GAIN_CH0 = (xmlnode(0).ChildNodes.Item(3).InnerText.Trim())

    '            AVG_AC_CH0 = (xmlnode(0).ChildNodes.Item(4).InnerText.Trim())
    '            AVG_DC_CH0 = (xmlnode(0).ChildNodes.Item(5).InnerText.Trim())
    '            RMS_CH0 = (xmlnode(0).ChildNodes.Item(6).InnerText.Trim())
    '            PEAK_POS_CH0 = (xmlnode(0).ChildNodes.Item(7).InnerText.Trim())

    '            PEAK_NEG_CH0 = (xmlnode(0).ChildNodes.Item(8).InnerText.Trim())
    '            PEAK_POS_ROOT2_CH0 = (xmlnode(0).ChildNodes.Item(9).InnerText.Trim())
    '            PEAK_NEG_ROOT2_CH0 = (xmlnode(0).ChildNodes.Item(10).InnerText.Trim())
    '            AVG_PEAK_CH0 = (xmlnode(0).ChildNodes.Item(11).InnerText.Trim())
    '            PEAK_FACTOR_CH0 = (xmlnode(0).ChildNodes.Item(12).InnerText.Trim())
    '            RIPPLE_CH0 = (xmlnode(0).ChildNodes.Item(13).InnerText.Trim())

    '            ''''''''''''''''''''''''''''''''''''''''''''''''''
    '            'CHANNEL 1
    '            xmlnode = xmldoc.GetElementsByTagName("CH1")
    '            AC_OFFSET_CH1 = (xmlnode(0).ChildNodes.Item(0).InnerText.Trim())
    '            AC_GAIN_CH1 = (xmlnode(0).ChildNodes.Item(1).InnerText.Trim())
    '            DC_OFFSET_CH1 = (xmlnode(0).ChildNodes.Item(2).InnerText.Trim())
    '            DC_GAIN_CH1 = (xmlnode(0).ChildNodes.Item(3).InnerText.Trim())

    '            AVG_AC_CH1 = (xmlnode(0).ChildNodes.Item(4).InnerText.Trim())
    '            AVG_DC_CH1 = (xmlnode(0).ChildNodes.Item(5).InnerText.Trim())
    '            RMS_CH1 = (xmlnode(0).ChildNodes.Item(6).InnerText.Trim())
    '            PEAK_POS_CH1 = (xmlnode(0).ChildNodes.Item(7).InnerText.Trim())

    '            PEAK_NEG_CH1 = (xmlnode(0).ChildNodes.Item(8).InnerText.Trim())
    '            PEAK_POS_ROOT2_CH1 = (xmlnode(0).ChildNodes.Item(9).InnerText.Trim())
    '            PEAK_NEG_ROOT2_CH1 = (xmlnode(0).ChildNodes.Item(10).InnerText.Trim())
    '            AVG_PEAK_CH1 = (xmlnode(0).ChildNodes.Item(11).InnerText.Trim())
    '            PEAK_FACTOR_CH1 = (xmlnode(0).ChildNodes.Item(12).InnerText.Trim())
    '            RIPPLE_CH1 = (xmlnode(0).ChildNodes.Item(13).InnerText.Trim())


    '            ''''''''''''''''''''''''''''''''''''''''''''''''''
    '            'SYSTEM FACTORS
    '            xmlnode = xmldoc.GetElementsByTagName("SYSTEM_FACTORS")
    '            KVM_RATING = (xmlnode(0).ChildNodes.Item(0).InnerText.Trim())
    '            PEAK_IN_SIG = (xmlnode(0).ChildNodes.Item(1).InnerText.Trim())
    '            NOISE_CAL_THLD = (xmlnode(0).ChildNodes.Item(2).InnerText.Trim())
    '            FREQ_THLD = (xmlnode(0).ChildNodes.Item(3).InnerText.Trim())


    '            fs.Close()
    '        Catch ex As Exception
    '            AC_OFFSET_CH0 = 0
    '            AC_GAIN_CH0 = 1
    '            DC_OFFSET_CH1 = 0
    '            DC_GAIN_CH1 = 1
    '            AC_OFFSET_CH0 = 0
    '            AC_GAIN_CH0 = 1
    '            DC_OFFSET_CH1 = 0
    '            DC_GAIN_CH1 = 1
    '            MessageBox.Show("HARDWARE FILE ALTERED." & Environment.NewLine & "MAY LEAD TO IRRELEVANT RESULTS.")
    '        Finally
    '            SYSTEM_RATING = KVM_RATING / PEAK_IN_SIG

    '            'THRESHOLD CHOOSING CH1 OR CH0
    '            THLD = PEAK_IN_SIG * 0.08
    '            UPPER_LIMIT = PEAK_IN_SIG * 1

    '        End Try
    '    Else
    '        MessageBox.Show("HARDWARE FILE NOT FOUND!!!!!!!!!!!" & Environment.NewLine & "KVM WILL DEFAULT VALUES")
    '    End If
    'End Sub
End Module
----------------------------------------------------------------------------

ADD_NEW_FORM.vb


Public Class ADD_NEW_FORM

    Private Sub BTN_SAVE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_SAVE.Click
        writeDatabase(Me.TB_CS_SERIAL_NO.Text, Me.TB_SITE_NAME.Text, Me.TB_DIV_CARD_NO.Text, Me.TB_DEL_DATE.Text, Me.TB_DES.Text)


        MessageBox.Show("NEW ENTRY SAVED.", "SAVE", MessageBoxButtons.OK, MessageBoxIcon.Information)
        connectDatabase()


        Me.TB_CS_SERIAL_NO.Enabled = False
        Me.TB_SITE_NAME.Enabled = False
        Me.TB_DIV_CARD_NO.Enabled = False
        Me.TB_DEL_DATE.Enabled = False
        Me.TB_DES.Enabled = False
        Me.BTN_SAVE.Enabled = False
        Me.btn_edit.Enabled = True
        Me.BTN_DEL.Enabled = True
    End Sub

    Private Sub BTN_new_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_NEW.Click
        Me.TB_CS_SERIAL_NO.Enabled = True
        Me.TB_SITE_NAME.Enabled = True
        Me.TB_DIV_CARD_NO.Enabled = True
        Me.TB_DEL_DATE.Enabled = True
        Me.TB_DES.Enabled = True
        Me.LBL_UPDATE.Text = "Impulse Analyser: Add New"
        Me.TB_CS_SERIAL_NO.Text = "CS_SERIAL_NO"
        Me.TB_SITE_NAME.Text = "SITE NAME"
        Me.TB_DIV_CARD_NO.Text = "DIV CARD NO"
        Me.TB_DEL_DATE.Text = "DATE"
        Me.TB_DES.Text = "DESCRIPTION"
        Me.BTN_SAVE.Enabled = True
        btn_edit.Text = "EDIT"
        Me.btn_edit.Enabled = False
        Me.BTN_DEL.Enabled = False

    End Sub

    Private Sub btn_edit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_edit.Click
        If btn_edit.Text = "EDIT" Then
            btn_edit.Text = "UPDATE"
            Me.TB_CS_SERIAL_NO.Enabled = True
            Me.TB_SITE_NAME.Enabled = True
            Me.TB_DIV_CARD_NO.Enabled = True
            Me.TB_DEL_DATE.Enabled = True
            Me.TB_DES.Enabled = True
        Else
            modifyDatabase()
            Me.TB_CS_SERIAL_NO.Enabled = False
            Me.TB_SITE_NAME.Enabled = False
            Me.TB_DIV_CARD_NO.Enabled = False
            Me.TB_DEL_DATE.Enabled = False
            Me.TB_DES.Enabled = False
            btn_edit.Text = "EDIT"
            MessageBox.Show("ENTRY UPDATED.", "UPDATED", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
  

    End Sub

    Private Sub BTN_DEL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_DEL.Click
        If MessageBox.Show("SURE TO DELETE THIS ENTRY?", "DELETE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            delDatabase(TB_CS_SERIAL_NO.Text)

            MessageBox.Show("ENTRY DELETED.", "DELETE", MessageBoxButtons.OK, MessageBoxIcon.Information)
            connectDatabase()
            Me.TB_CS_SERIAL_NO.Enabled = True
            Me.TB_SITE_NAME.Enabled = True
            Me.TB_DIV_CARD_NO.Enabled = True
            Me.TB_DEL_DATE.Enabled = True
            Me.TB_DES.Enabled = True
            Me.LBL_UPDATE.Text = "Impulse Analyser: Add New"
            Me.TB_CS_SERIAL_NO.Text = "CS_SERIAL_NO"
            Me.TB_SITE_NAME.Text = "SITE NAME"
            Me.TB_DIV_CARD_NO.Text = "DIV CARD NO"
            Me.TB_DEL_DATE.Text = "DATE"
            Me.TB_DES.Text = "DESCRIPTION"
            Me.BTN_SAVE.Enabled = True
            btn_edit.Text = "EDIT"
            Me.Close()
        End If
    End Sub

    Private Sub BTN_EXIT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_EXIT.Click
        Me.Close()
    End Sub
End Class
---------------------------------

main.vb


Public Class main

    Private Sub BTN_CS_S_NO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_CS_S_NO.Click
        If TB_CS_NO.Text = "" Then
            MessageBox.Show("ENTER VALUE!!!!!!!!", "INVALID PARAMETER", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        With saveChannelSettings
            .FileName = "REGISTRATION_FILE"
            .Filter = "REGISTRATION FILE (*.IM)|*.IM"
        End With
        If saveChannelSettings.ShowDialog <> 1 Then
            Exit Sub
        End If
        Dim STR As String = saveChannelSettings.FileName
        If STR = "" Then
            MessageBox.Show("INVALID FILE NAME!!!!!!!!!!", "FILE NAME", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        'Try
        '    'CREATE CLEVER SCOPE SERIAL NUMBER FILE
        '    FileOpen(1, "C:\MyDLL\CS_ID", OpenMode.Output)
        '    WriteLine(1, "CS ID:", SimpleCrypt(TB_CS_NO.Text))
        '    MessageBox.Show("FILE SAVED AS C:\MyDLL\CS_ID", "FILE SAVED", MessageBoxButtons.OK, MessageBoxIcon.Information)
        '    FileClose(1)
        'Catch es As Exception
        '    MessageBox.Show("FILE NOT SAVED!!!!!!!!!!", "FILE NOT SAVED", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        '    FileClose(1)
        'End Try
        GENERATE_CS_SERIAL_NO_FILE(STR)
    End Sub

    Private Sub BTN_DIV_CARD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_DIV_CARD.Click
        If TB_A.Text = "" Or TB_B.Text = "" Then
            MessageBox.Show("ENTER VALUE!!!!!!!!", "INVALID PARAMETER", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        With saveChannelSettings
            .FileName = "Hardware_parameters"
            .Filter = "HARDWARE FILE (*.IM)|*.IM"
        End With
        If saveChannelSettings.ShowDialog <> 1 Then
            Exit Sub
        End If
        Dim STR As String = saveChannelSettings.FileName
        If STR = "" Then
            MessageBox.Show("INVALID FILE NAME!!!!!!!!!!", "FILE NAME", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If
        Try
            'CREATE CALIBRATION PARAMETERS
            FileOpen(1, STR, OpenMode.Output)
            WriteLine(1, "OFFSET:", SimpleCrypt("0"), SimpleCrypt("0"))
            WriteLine(1, "INT DIV:", SimpleCrypt(TB_A.Text), SimpleCrypt(TB_B.Text))
            MessageBox.Show("FILE SAVED AS " & STR, "FILE SAVED", MessageBoxButtons.OK, MessageBoxIcon.Information)
            FileClose(1)
        Catch es As Exception
            MessageBox.Show("FILE NOT SAVED!!!!!!!!!!", "FILE NOT SAVED", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            FileClose(1)
        End Try
    End Sub

    Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        connectDatabase()
    End Sub

    Private Sub BTN_EXIT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_EXIT.Click
        If MessageBox.Show("SURE TO CLOSE THE APPLICATION?", "EXIT", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly) = Windows.Forms.DialogResult.OK Then
            Me.Close()
        End If
    End Sub

    Private Sub BTN_ADD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

        '  ADD_NEW_FORM.BTN_SAVE.Visible = True
        ' ADD_NEW_FORM.BTN_NEW.Visible = False
        ADD_NEW_FORM.LBL_UPDATE.Text = "Impulse Analyser Details"
        ADD_NEW_FORM.TB_CS_SERIAL_NO.Text = "CS_SERIAL_NO"
        ADD_NEW_FORM.TB_SITE_NAME.Text = "SITE NAME"
        ADD_NEW_FORM.TB_DIV_CARD_NO.Text = "DIV CARD NO"
        ADD_NEW_FORM.TB_DEL_DATE.Text = "DATE"
        ADD_NEW_FORM.TB_DES.Text = "DESCRIPTION"
        ADD_NEW_FORM.Show()

        ADD_NEW_FORM.TB_CS_SERIAL_NO.Enabled = True
        ADD_NEW_FORM.TB_SITE_NAME.Enabled = True
        ADD_NEW_FORM.TB_DIV_CARD_NO.Enabled = True
        ADD_NEW_FORM.TB_DEL_DATE.Enabled = True
        ADD_NEW_FORM.TB_DES.Enabled = True
    End Sub

    Private Sub BTN_DEL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Me.ListBox_Customer_List.SelectedIndex = -1 Then
            MessageBox.Show("SELECT ENTRY TO DELETE", "SELECT ITEM", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
        If MessageBox.Show("SURE TO DELETE THIS ENTRY?", "DELETE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            delDatabase(Me.ListBox_Customer_List.SelectedIndex)

            MessageBox.Show("ENTRY DELETED.", "DELETE", MessageBoxButtons.OK, MessageBoxIcon.Information)
            connectDatabase()
        End If
    End Sub

    Private Sub CB_CS_S_NO_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_CS_S_NO.SelectedIndexChanged
        'MessageBox.Show(CB_CS_S_NO.SelectedItem.ToString)
        searchDatabase(CB_CS_S_NO.SelectedItem.ToString)
        ADD_NEW_FORM.Show()

        ADD_NEW_FORM.TB_CS_SERIAL_NO.Enabled = False
        ADD_NEW_FORM.TB_SITE_NAME.Enabled = False
        ADD_NEW_FORM.TB_DIV_CARD_NO.Enabled = False
        ADD_NEW_FORM.TB_DEL_DATE.Enabled = False
        ADD_NEW_FORM.TB_DES.Enabled = False
        ADD_NEW_FORM.BTN_SAVE.Enabled = False
    End Sub

    Private Sub BTN_EDIT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        If Me.ListBox_Customer_List.SelectedIndex = -1 Then
            MessageBox.Show("SELECT ENTRY TO DELETE", "SELECT ITEM", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Exit Sub
        End If
        MessageBox.Show(Me.ListBox_Customer_List.SelectedIndex)
        'If MessageBox.Show("SURE TO DELETE THIS ENTRY?", "DELETE", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
        editDatabase(Me.ListBox_Customer_List.SelectedIndex)

        ' End If
    End Sub
End Class
------------------------------------------------------------------------------------------
DATABASE has 5 fields.