Mercurial > public > mk2
diff code_part1/OSTC_code_asm_part1/menu_settime.asm @ 0:96a35aeda5f2
Initial setup
author | heinrichsweikamp |
---|---|
date | Tue, 12 Jan 2010 15:05:59 +0100 |
parents | |
children | c97c5514b165 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/code_part1/OSTC_code_asm_part1/menu_settime.asm Tue Jan 12 15:05:59 2010 +0100 @@ -0,0 +1,290 @@ + +; OSTC - diving computer code +; Copyright (C) 2008 HeinrichsWeikamp GbR + +; This program is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation, either version 3 of the License, or +; (at your option) any later version. + +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. + +; You should have received a copy of the GNU General Public License +; along with this program. If not, see <http://www.gnu.org/licenses/>. + + +; menu "Set Time" +; written by: Matthias Heinrichs, info@heinrichsweikamp.com +; written: 5/19/06 +; last updated: 080904 +; known bugs: +; ToDo: + + +menu_settime: + call PLED_ClearScreen + + bcf set_minutes + bcf menubit4 + bcf cursor + clrf timeout_counter2 + bcf menubit2 + bcf menubit3 + bcf sleepmode + bcf set_year + bcf set_day + bcf set_month + clrf menupos2 + + call PLED_topline_box + WIN_INVERT .1 ; Init new Wordprocessor + DISPLAYTEXT .29 ; Set Time + WIN_INVERT .0 ; Init new Wordprocessor + DISPLAYTEXT .22 ; Time: + DISPLAYTEXT .23 ; Date: + + call set_time_refresh + + DISPLAYTEXT .24 ; Set Hours + + bcf switch_left + bcf switch_right + +settime_loop: + btfsc switch_left + call add_hours_or_minutes_or_date + + btfsc switch_right + call set_time_next_or_exit + + btfsc menubit4 + bra set_time_done + + btfsc onesecupdate + call timeout_surfmode + + btfsc onesecupdate + call set_dive_modes + + bcf onesecupdate + + btfsc sleepmode + bra exit_settime + + btfsc divemode + goto restart + + bra settime_loop + +set_time_refresh: + WIN_LEFT .70 + WIN_TOP .65 + lfsr FSR2,letter + movff hours,lo + output_99x + movlw ':' + movwf POSTINC2 + movff mins,lo + output_99x + movlw ' ' + movwf POSTINC2 + movlw ' ' + movwf POSTINC2 + call word_processor + +set_date_refresh: + WIN_LEFT .70 + WIN_TOP .95 + lfsr FSR2,letter + movff month,convert_value_temp+0 + movff day,convert_value_temp+1 + movff year,convert_value_temp+2 + call PLED_convert_date ; converts into "DD/MM/YY" or "MM/DD/YY" or "YY/MM/DD" in postinc2 + movlw ' ' + movwf POSTINC2 + movlw ' ' + movwf POSTINC2 + call word_processor + return + + +set_time_done: ; Check date + movff month,lo ; new month + dcfsnz lo,F + movlw .31 + dcfsnz lo,F + movlw .28 + dcfsnz lo,F + movlw .31 + dcfsnz lo,F + movlw .30 + dcfsnz lo,F + movlw .31 + dcfsnz lo,F + movlw .30 + dcfsnz lo,F + movlw .31 + dcfsnz lo,F + movlw .31 + dcfsnz lo,F + movlw .30 + dcfsnz lo,F + movlw .31 + dcfsnz lo,F + movlw .30 + dcfsnz lo,F + movlw .31 + cpfsgt day ; day ok? + bra set_time_done2 ; OK + movlw .1 ; not OK, set to 1st + movwf day + +set_time_done2: + WIN_LEFT .32 + WIN_TOP .155 + movlw d'8' + movwf temp1 + call PLED_display_clear_common_y1 + + movlw d'5' + movwf wait_temp + clrf secs + bcf onesecupdate + +set_time_done_loop + btfss onesecupdate + bra set_time_done_loop + bcf onesecupdate + + call set_date_refresh + + WIN_LEFT .70 + WIN_TOP .65 + lfsr FSR2,letter + movff hours,lo + output_99x + movlw ':' + movwf POSTINC2 + movff mins,lo + output_99x + movlw ':' + movwf POSTINC2 + movff secs,lo + output_99x + movlw ' ' + movwf POSTINC2 + call word_processor + + decfsz wait_temp,F + bra set_time_done_loop +exit_settime: ;Exit + movlw d'1' + movwf menupos + goto more_menu2 + + +set_time_next_or_exit: + btfsc set_year + bsf menubit4 ; quit settime + incf menupos2,F + movff menupos2,menupos3 + + dcfsnz menupos3,F + bsf set_minutes + dcfsnz menupos3,F + bsf set_month + dcfsnz menupos3,F + bsf set_day + dcfsnz menupos3,F + bsf set_year + + WIN_LEFT .32 + WIN_TOP .155 + lfsr FSR2,letter + OUTPUTTEXT .94 ; Set + + movff menupos2,menupos3 + decfsz menupos3,F + bra set_time_next_or_exit2 + OUTPUTTEXT .90 ; Minutes + bra set_time_next_or_exit5 +set_time_next_or_exit2: + decfsz menupos3,F + bra set_time_next_or_exit3 + OUTPUTTEXT .91 ; Month + bra set_time_next_or_exit5 +set_time_next_or_exit3: + decfsz menupos3,F + bra set_time_next_or_exit4 + OUTPUTTEXT .92 ; Day + bra set_time_next_or_exit5 +set_time_next_or_exit4: + OUTPUTTEXT .93 ; Year + +set_time_next_or_exit5: + call word_processor + call wait_switches ; Waits until switches are released, resets flag if button stays pressed! + return + + +add_hours_or_minutes_or_date: + bcf switch_right + clrf secs + + btfsc set_year + bra add_year + + btfsc set_day + bra add_day + + btfsc set_month + bra add_month + + btfsc set_minutes + bra add_minutes +; Also Stunden erhöhen +add_hours: + incf hours,F + movlw d'23' + cpfsgt hours + bra set_time_refresh_x + clrf hours + bra set_time_refresh_x +add_minutes: + incf mins,F + movlw d'59' + cpfsgt mins + bra set_time_refresh_x + clrf mins + bra set_time_refresh_x +add_day: + incf day,F + movlw d'31' + cpfsgt day + bra set_time_refresh_x + movlw d'1' + movwf day + bra set_time_refresh_x +add_month: + incf month,F + movlw d'12' + cpfsgt month + bra set_time_refresh_x + movlw d'1' + movwf month + bra set_time_refresh_x +add_year: + incf year,F + movlw d'20' ; calendar until 2020 + cpfsgt year + bra set_time_refresh_x + movlw d'8' + movwf year ; Set Year to 2008 + +set_time_refresh_x: + call set_time_refresh + call wait_switches ; Waits until switches are released, resets flag if button stays pressed! + return