/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 18.05.2009
Author  : Zver
Company : Microsoft
Comments: 


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 1,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

// PIND.0 - Увеличение переменной
// PIND.1 - Уменьшение переменной
// PIND.2 - Кнопка выбора меню настройки
// PIND.3 - Кнопка включения непрерывного режима
// PIND.4 - Педаль
// PORTB.0 - Включение пневмоклапана прижимного устройства.
// PORTB.1 - Включение трансформатора
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
char lcd_buffer[33];
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
eeprom unsigned int a; //Прижим (время прижима до включения сварки)
eeprom unsigned int b; //Сварка (время включения трансформатора)
//eeprom unsigned int c; //Автомат (включения непрерывного режима)
// Declare your global variables here

void main(void)
{

// LCD module initialization
lcd_init(8);

start:     while (!PIND.3); // Ждём, когда кнопка включения непрерывного режима будет отпущена чтобы включить стартовое меню при котором можно начинать работу
           lcd_clear(); // Очищаем дисплей.
           lcd_putsf("PyАЅo№\npe¶ёј"); // Меню автоматического режима (вВыводится надпись: Авто режим)    
start1:      while (1)
      {
      if (!PIND.3) // Если нажата кнопка включения непрерывного режима, переходим в соответствующий цикл
      {
      delay_ms (5);
      if (!PIND.3)
      {
      goto lcd4;
      }
      }
      if (!PIND.0) // Если нажата кнопку увеличения переменной...
      {
      delay_ms (5);
      if (!PIND.0) // Антидребезг
      {
      goto lcd2; // Переходим в меню настройки времени включения трансформатора
      }
      }
      if (!PIND.1) // Если нажата кнопка уменьшения переменной...
      {
      delay_ms (5);
      if (!PIND.1) // Антидребезг
      {
      goto lcd2; // Переходим в меню настройки времени включения трансформатора
      }
      }

      if (!PIND.4) // Если нажата педаль, выполняется процедура контактной сварки
      {
      delay_ms (5);
      if (!PIND.4) // Антидребезг
      {
      while (1)
      {
      PORTB.0=1; // Включается прижимное устройство
      PORTB.1=1; // Включается сварочный трансформатор
      if (PIND.4)
      {
      delay_ms (1);
      if (PIND.4)
      {
      PORTB.1=0; // Выключается сварочный трансформатор
      PORTB.0=0; // Выключается прижимное устройство
      goto start1;
      }
      }
      }
      }
      }
      if (!PIND.2) // Если нажата кнопка "Выбор", переходим на установку задержки прижима
      {
      delay_ms (5);
      if (!PIND.2) // Антидребезг
      {
      goto test2; // Безусловный переход на метку test
      }
      }
      }
test: while (!PIND.2); // Ждём, когда кнопка "Выбор" будет отпущена
      goto lcd; // Безусловный переход на метку lcd 
      while (1) // Меню задержки прижима
      {
use:  if (!PIND.4) // Если нажата педаль, переходим в рабочий режим
      {
      delay_ms (5);
      if (!PIND.4) // Антидребезг
      {
      goto lcd4; // Переход на метку start (в начало программы)
      }
      }
      if (!PIND.3) // Если нажата кнопка непрерывного режима, переходим в соответствующий режим
      {
      delay_ms (5);
      if (!PIND.3) // Антидребезг
      {
      goto automat; // Переход на метку auto
      }
      }      
      if (!PIND.2) // Если нажата кнопка "Выбор", переходим на установку задержки прижима
      {
      delay_ms (5);
      if (!PIND.2) // Антидребезг
      {
      goto test2; // Переход на метку test2
      }
      }
      if (!PIND.0) // Если нажата кнопка увеличения переменной, увеличиваем переменную a на 1.
      {
      delay_ms (5);
      if (!PIND.0) // Антидребезг
      {
      delay_ms (70);
      a=a+1;
      if (a>1000) // Если a больше 1000, устанавливает значение a равное 1000
      {
      a=1000; // a не может быть больше 1000
      };
      //while (!PIND.0);      
      goto lcd; // Переход на метку lcd
      }
      }      
      if (!PIND.1) // Если нажата кнопка уменьшения переменной, уменьшаем значение a на 1
      {
      delay_ms (5);
      if (!PIND.1) // Антидребезг
      {
      delay_ms (70);
      a=a-1;
      if (a<50)
      {
      a=50; // а не может быть меньше 50
      };
      goto lcd;      
      };
      }
      }
test2: while (!PIND.2); // Ждём, когда кнопка выбора будет отпущена
      goto lcd2; // Переход на меткку lcd2
      while (1) //Меню задержки сварки
      {
use2: if (!PIND.4)
      {
      delay_ms (5);
      if (PIND.4) // Антидребезг
      {
      goto lcd4;
      }
      }
      if (!PIND.3) // Если нажата кнопка непрерывного режима, переходим в соответствующий режим
      {
      delay_ms (5);
      if (!PIND.3) // Антидребезг
      {
      goto automat; // Переход на метку auto
      }
      }      
      if (!PIND.2) // Если нажата кнопка "Выбор", переходим на установку задержки включения трансформатора
      {
      delay_ms (5);
      if (!PIND.2) // Антидребезг
      {
      goto test; // Переход на метку test3
      }
      }
      if (!PIND.0) // Увеличение переменной b (время включения трансформатора)
      {
      delay_ms (5);
      if (!PIND.0) // Антидребезг
      {
      delay_ms (70);
      b=b+1;
      if (b>1000)
      {
      b=1000; // b не может быть больше 2500
      };    
      goto lcd2; // Переход на метку lcd2
      }
      }      
      if (!PIND.1) // Уменьшение переменной b
      {
      delay_ms (5);
      if (!PIND.1) // Антидребезг
      {
      delay_ms (70);
      b=b-1;
      if (b<10)
      {
      b=10; // b не может быть меньше 10
      };
      goto lcd2; // Переход на метку lcd2     
      };
      }
      }
/*test3: while (!PIND.2);
      goto lcd3; // Переход на метку lcd3
      while (1) //Меню задержки автоматического режима
      {
use3: if (!PIND.4)
      {
      delay_ms (4);
      if (!PIND.4)
      {
      goto lcd4;
      }
      }
      if (!PIND.3) // Если нажата кнопка непрерывного режима, переходим в соответствующий режим
      {
      delay_ms (15);
      if (!PIND.3) // Антидребезг
      {
      goto automat; // Переход на метку auto
      }
      }
      if (!PIND.2) // Если нажата кнопка "Выбор", переходим на установку времени непрерывного режима
      {
      delay_ms (5);
      if (!PIND.2) // Антидребезг
      {
      goto test; // Переход на метку test
      }
      }
      if (!PIND.0) // Увеличение переменной c
      {
      delay_ms (5);
      if (!PIND.0) // Антидребезг
      {
      delay_ms (70);
      c=c+1;
      if (c>1000)
      {
      c=1000; // c не может быть больше 1000
      };
      //while (!PIND.0);      
      goto lcd3; // Переход на метку lcd3
      }
      }      
      if (!PIND.1) // Уменьшение переменной c
      {
      delay_ms (5);
      if (!PIND.1) // Антидребезг
      {
      delay_ms (70);
      c=c-1;
      if (c<50)
      {
      c=50; // c не может быть меньше 50
      };
      //while (!PIND.1);
      goto lcd3;      
      };
      }
      }*/
automat: while (1) // цикл непрерывного режим
      {
      if (!PIND.0)
      {
      delay_ms (1);
      if (!PIND.0)
      {
      goto lcd2;
      }
      }
      if (!PIND.1)
      {
      delay_ms (1);
      if (!PIND.1)
      {
      goto lcd2;
      }
      }
      if (!PIND.2) // Если нажата кнопка "Выбор", переходим на установку задержки прижима
      {
      delay_ms (1);
      if (!PIND.2) // Антидребезг
      {
      goto test2; // Безусловный переход на метку test
      }
      }            
      if (!PIND.3) // Если нажата кнопка включения-отключения непрерывного режима, переходим в основной (рабочий) режим
      {
      delay_ms (1);
      if (!PIND.3) // Антидребезг
      {
      while (!PIND.3); // Ждём, когда кнопка будет отпущена      
      goto start; // Переход на метку start
      }
      }      
      if (!PIND.4) // Если нажата педаль, выполняется непрерывный режим
      {
      delay_ms (1);
      if (!PIND.4) // Антидребезг
      {
      PORTB.0=1;
      delay_ms (a);
      PORTB.1=1;
      delay_ms (b);
      PORTB.1=0;
      PORTB.0=0;
      delay_ms (2);
      if (!PIND.4)
      {
      delay_ms (1);
      if (!PIND.4)
      {
      while (1)
      {
      delay_ms (2);
      if (PIND.4)
      {
      goto automat;
      }
      }
      }
      //delay_ms (c);     
      }
      }
      }
      }          
lcd:       lcd_clear(); // Очищаем дисплей.
           sprintf(lcd_buffer, "Ёpё¶ёј\n%d ms", a); // Меню прижима (выводится надпись: Прижим (a) ms)
           lcd_puts(lcd_buffer);
           goto use; // Безусловный переход на метку use
           
lcd2:      lcd_clear(); // Очищаем дисплей.
           sprintf(lcd_buffer, "Cіapєa\n%d ms", b); // Меню сварки (выводится надпись: Сварка (b) ms)
           lcd_puts(lcd_buffer);
           goto use2; // Переход на метку use2
           
/*lcd3:      lcd_clear(); // Очищаем дисплей.
           sprintf(lcd_buffer, "Aіїoјaї\n%d ms", c); // Меню автоматического режима (вывожится надпись: Автомат (c) ms)
           lcd_puts(lcd_buffer);
           goto use3; // Переход на метку use3 
*/           
           
lcd4:      lcd_clear(); // Очищаем дисплей.
           sprintf(lcd_buffer, "Aіїo\n%d ms", b); // Меню сварки
           lcd_puts(lcd_buffer);
           while (!PIND.3);
           goto automat;          
           };