Basic timer w/ mins and secs on LCD not working

Hi everyone,
I just got my first LCD hooked up today and was experimenting and ran into a snag...

I am working off the "Hello World" example sketch, with a few modifications. Basically I tried to tweak the second line displayed so instead of just simply counting seconds, it would display "xxx mins, xx secs".

My code will count up until 59 secs, and then mins just start increasing - fast! Where did I go wrong?

Thanks for the help!

/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the 
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
// (RS, EN, D4, D5, D6, D7)
// (4,  6,  11, 12, 13, 14) pins on the LCD board



LiquidCrystal lcd(8, 9, 7, 6, 4, 5);
int BACKLIGHT = 3;
unsigned long MIN = 0;
unsigned long SEC = 0;

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Hello, World!");
  pinMode(BACKLIGHT, OUTPUT);
  digitalWrite(BACKLIGHT, HIGH);
}

void loop() {
  SEC = millis()/1000;
  if (SEC > 59){
    SEC=0;
    MIN++;
  }
 
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  //lcd.print(millis()/1000);
  //lcd.setCursor(7, 1);
  lcd.print(MIN);
  lcd.print(" mins, ");
  lcd.print(SEC);
  lcd.print(" sec");
 }

You make at least one, and possibly two assignments to SEC each time through the loop -- when you assign 0 to it, it doesn't hold that value for long (just until we get back to the top of the loop). You probably want to calculate elapsedseconds as millis() / 1000, then display that by calculating displayminutes as elapsedseconds / 60 and displayseconds as elapsedseconds mod 60. I hope I am remembering correctly that in c the modulus operator is %

SEC = millis()/1000;

If millis() equals 1000, SEC will be 1. If millis() equals 60000, then SEC will be 60. If millis() equals 60001, then SEC will be.... 60.

When you divide integers, all decimal points are lost. So once 60 "seconds" go by, your sketch just keeps incrementing MIN. You might want to checkout the Time library.

As an additional thought, you might want to keep track of a "previous" value of elapsedseconds, because you really don't want to push all that data to the lcd every time through the loop. Rather, when the number of elapsedseconds changes, then it's time to udpate the lcd.

Thank you - I got it working! (I just need to read up on modelo...)
I really appreciate the help.
Here's my loop code:

void loop() {
  ESEC = millis()/1000;
  MIN = ESEC / 60;
  DSEC = ESEC % 60;
 

  lcd.setCursor(0, 1);
  lcd.print(MIN);
  lcd.print(" mins, ");
  lcd.print(DSEC);
  lcd.print(" sec");

}