' ========================================================================= ' File...... Crude timer.BS2 ' Purpose... Parallel LCD timer ' Author.... Mike Seiler ' E-mail.... ms767210@bigpond.net.au ' {$STAMP BS2} ' -----[ I/O Definitions ]------------------------------------------------- E CON 6 ' Enable Pin For LCD RW CON 5 ' R/W Pin For LCD RS CON 4 ' LCD Register Select 0 = Instruction, 1 = Text ' -----[ Variables ]------------------------------------------------------- char VAR Byte ' Character To Send To LCD Index VAR Byte ' Character pointer cursor_pos VAR Byte period VAR Bit second VAR Byte minute VAR Byte hour VAR Byte minute_tens VAR Nib hour_tens VAR Nib ' -----[ Constants ]------------------------------------------------------- Clr_Display CON %00000001 ' Clear the display EntryMode_Set CON %00000111 Display_Off CON %00001000 ' Turn display off Display_On CON %00001100 ' Turn display on set cursor on Modeset CON %00111000 ' Set 8 bit mode 2 lines and 5x7 characters ' Initialise I/O ---------------------------------------------------------- DIRB = %1110 OUTB = %0000 DIRH = %11111111 OUTH = %00000000 ' Message to send Msg DATA "11:00am" Main: PAUSE 150 'delay till power reaches desired level on powerup char = Modeset GOSUB lcdcmd char = Display_Off GOSUB LCDcmd char = Display_On GOSUB LCDcmd char = Clr_Display GOSUB LCDcmd GOSUB start OUTS = %0000000000000000 HIGH RS char = 0 GOTO Seconds LCDcmd: OUTH = char LOW RS PULSOUT E, 1 RETURN LCDwr: OUTH = char HIGH RS PULSOUT E, 1 RETURN Start: FOR index = 0 TO 6 READ msg + index, char GOSUB LCDwr NEXT RETURN Seconds: FOR second = 1 TO 60 PAUSE 999 NEXT Minutes: minute = minute + 1 IF minute = 10 THEN tens_minutes char = minute cursor_pos = 132 GOSUB Update_display GOTO seconds tens_minutes: minute_tens = minute_tens + 1 IF minute_tens = 6 THEN hours char = minute_tens cursor_pos = 131 GOSUB Update_display RETURN hours: hour = hour + 1 IF hour = 13 THEN finish char = hour cursor_pos = 129 GOSUB Update_display RETURN Update_display: OUTH = cursor_pos LOW rs PULSOUT e, 1 OUTH = char + 48 HIGH rs PULSOUT e, 1 RETURN finish: END END