49845 (Счетчик обратного отсчета), страница 2
Описание файла
Документ из архива "Счетчик обратного отсчета", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "49845"
Текст 2 страницы из документа "49845"
call prWaitFor_TI
mov SBUF, A
ret
prDisplay:
call prWaitFor_TI
mov SBUF, #CR; переводим курсор в начало строки:
mov A, R3
call lbDrawElement
mov A, R2
call lbDrawElement
mov A, R1
call lbDrawElement
mov A, R0
call lbDrawElement
call prWaitFor_TI; для выравнивания подождём передачи последнего символа
setb TI; [1] иначе - программа "зависнет"
ret; [2]
;; процедура prWaitFor_TI:
;; ожидание "готовности передачи" по последовательному порту
prWaitFor_TI:
jnb TI, $; зациклить, пока TI=0
clr TI ; устанавливаем "неготовность пердачи"
ret
;; процедура prIs_SetTime_Mode:
;; [2 на вызов]+[2+1+2+2]=[9]
;; проверяет, нажата ли клавиша входа в режим установки времени;
;; такой клавишей явл. '0'
prIs_SetTime_Mode:
mov P1, #00BFh
mov A, P1
cjne A, #00BEh, lbNot_SetTime_Mode
call prSetTime; переход в режим установки таймера
lbNot_SetTime_Mode:
cjne A, #00B7h, lbNotAnyMode
mov R0, Buf_R0
mov R1, Buf_R1
mov R2, Buf_R2
mov R3, Buf_R3
lbNotAnyMode: ret
;; процедура prExam_NumKeys:
;; опрос цифровых клавиш
prExam_NumKeys:
mov R7, #0FFh; допустим, что ничего не будет нажато
;опрос первого столбца клавиш:
lbKey_1:
mov P1, #00DFh
mov A, P1
cjne A, #00DDh, lbKey_2
mov R7, #1
ret
lbKey_2:
cjne A, #00DEh, lbKey_3
mov R7, #2
ret
lbKey_3:
cjne A, #00D7h, lbKey_4
mov R7, #3
ret
;опрос второго столбца клавиш:
lbKey_4:
mov P1, #00EFh
mov A, P1
cjne A, #00EDh, lbKey_5
mov R7, #4
ret
lbKey_5:
cjne A, #00EEh, lbKey_6
mov R7, #5
ret
lbKey_6:
cjne A, #00E7h, lbKey_7
mov R7, #6
ret
;опрос третьего столбца клавиш:
lbKey_7:
mov P1, #007Fh
mov A, P1
cjne A, #007Dh, lbKey_8
mov R7, #7
ret
lbKey_8:
cjne A, #007Eh, lbKey_9
mov R7, #8
ret
lbKey_9:
cjne A, #0077h, lbKey_0
mov R7, #9
ret
;опрос четвёртого столбца клавиш:
lbKey_0:
mov P1, #00BFh
mov A, P1
cjne A, #00BDh, lbEnd_Exam_NumKeys
mov R7, #0
lbEnd_Exam_NumKeys: ret
;; процедура prWaitFor_NextKey_Pressed:
;; ждёт СЛЕДУЮЩЕГО НАЖАТИЯ, чтобы долгое нажатие не "флудило"
prWaitFor_NextKey_Pressed:
lbPrevKey_Pressed: call prSmartDelay; чтоб избежать "дребезга" клавиатуры
call prExam_NumKeys;
cjne R7, #0FFh, lbPrevKey_Pressed;
call prSmartDelay; чтоб избежать "дребезга" клавиатуры
lbNo_NextKey_Pressed: call prExam_NumKeys
cjne R7, #0FFh, lbNextKey_Pressed
jmp lbNo_NextKey_Pressed
lbNextKey_Pressed: ret
;; процедура prSetTime:
;; режим установки таймера:
prSetTime:
clr EA
mov DPTR, #msgSetTime_Mode
call prShowMessage; вывод сообщения msgSetTime_Mode
call prDisplay
;регистр R3:
call prWaitFor_NextKey_Pressed;
mov R3, 07
call prDisplay
;регистр R2:
call prWaitFor_NextKey_Pressed
mov R2, 07
call prDisplay
;регистр R1:
call prWaitFor_NextKey_Pressed
mov R1, 07
call prDisplay
;регистр R0:
call prWaitFor_NextKey_Pressed
mov R0, 07
call prDisplay
mov Buf_R0, R0
mov Buf_R1, R1
mov Buf_R2, R2
mov Buf_R3, R3
mov DPTR, #msgShowTime_Mode
call prShowMessage; вывод сообщения msgShowTime_Mode
setb EA
ret
;; процедуры prIs_R0_more_59, prIs_R1_more_59, prIs_R2_more_23:
;; проверяют соответствующие регистры на корректность значений в них;
;; большие значения уменьшаются до ближайших верных
prCorrect_R0:
cjne R0, #59, lbR0_not_59
ret
lbR0_not_59: jnc lbR0_more_59
ret
lbR0_more_59: mov R0, #59
ret
prCorrect_R1:
cjne R1, #59, lbR1_not_59
ret
lbR1_not_59: jnc lbR1_more_59
ret
lbR1_more_59: mov R1, #59
ret
prCorrect_R2:
cjne R2, #23, lbR2_not_23
ret
lbR2_not_23: jnc lbR2_more_23
ret
lbR2_more_23: mov R2, #23
ret
;; процедура prShowMessage:
;; выводит на экран текстовое сообщение; символ ESC - признак конца сообщения
prShowMessage:
clr A
movc A, @A + DPTR
lbNextSymbol: call prWaitFor_TI
mov SBUF, A
inc DPTR
clr A
movc A, @A + DPTR
cjne A, #ESC, lbNextSymbol
ret
;;;; ОПИСАНИЕ ТЕКСТОВЫХ СООБЩЕНИЙ: ;;;;
msgSetTime_Mode: db LF,CR, '[Regim ustanovki taymera:]', CR, LF, ESC
msgShowTime_Mode: db LF,CR, 'OBRATNYI OTSCHET...', CR, LF, ESC
msgFinal: db CR, '!!!OBRATNYI OTSCHET ZAKONCHEN!!!:', CR, LF, ESC
END;;;; КОНЕЦ ПРОГРАММЫ