Принцип работы жк-индикатора. Электроды подложки и сегментов. Принципиальная электрическая схема

Страницы работы

Фрагмент текста работы

вход/выход данных (SDA) ; RA2, тактовая частота (SCL) ; Входной бит подпрограммы I2C ; Выходной бит подпрограммы I2C


ORG  0x004       ; вектор прерывания movwf    w_temp ; сохранение текущего значения W movf STATUS,w ; перенос содержимого STATUS в W movwf statusjemp ; сохранение содержимого регистра STATUS


clrf TMR0 bcfINTCON,T0IF btfsc flags, 1 goto tempread timeread callclock btfss flags, 0 goto d_point bsf digit2, 7 bcf flags, 0 goto gohome d_point  bcf digit2, 7 bsf lags, 0 decfsz disp, f

goto gohome bsf flags, 1

movlw templenght movwf disp goto gohome

очистка таймера

; сброс флага прерывания если flags<l>-=0 отображаем время если flags<l>=l отображаем температуру чтение текущего значения времени разделитель включен? если нет, то включаем разделитель сбрасываем флаг разделителя и выходим из подпрограммы иначе выключаем разделитель устанавливаем флаг разделителя уменьшаем на 1 время индикации. Врем? истекло?

нет, продолжаем отображать часы иначе устанавливаем флаг индикации температуры и загружаем в disp

длительность ее отображения



tempread call celsio


; чтение текущего значения температуры


btfss flags, О goto zerot bcf flags, 0 goto gohome zerot      bsf flags, 0 decfsz disp, f

goto gohome bcf flags, 1

movlw timelenght

movwf disp movlw 0x9E movwf SLAVE movlw OxEE movwf ADDR call WRCOM


уменьшаем на 1 время индикации. Время истекло?

нет, продолжаем отображать термометр если да, сбрасываем флаг индикации температуры и устанавливаем длительность отображения времени обращаемся к термометру с командой начать новое измерение


gohome movf status_temp,w ; чтение копии регистра STATUS

movwf STATUS ; восстановление значения регистра STATUS swapf w_temp,f

swapf w_temp,w ; восстановление значения аккумулятора W retfie                        ; возврат из прерывания

main     clrf PORTA clrf PORTB clrf flags movlw timelenght movwf disp

clrwdt                      ; очистка WDT и пределителя

bsf STATUS, RPO , bank 1

movlwb '01110010';

movwf OPTION_REG

movlw   b'l 1110000'

movwf PORTA

movlw   b'l 111011Г

movwf PORTB

bcf STATUS, RPO; bank 0 .*************************************************************

;      инициализация часов (DS1307) и термометра (DS1621)

********* ***********************************************


10 Зак. № 4879 Яцснков


273


movlw 0х9Е movwf SLAVE movlw ОхАС movwf ADDR movlw OxOB movwf DATAO call WRBYTE nop

movlw 0x9E movwf SLAVE movlw OxEE movwf ADDR call WRCOM


; записываем в SLAVE адрес термометра ; адрес регистра конфигурации термометра ; режимы термометра: POL-high, ISHOT-yes

; подпрограмма записи байта

; защитный интервал

; обращение к термометру

; команда начать измерение температуры запись команды в термометр


пор


; защитный интервал


movlw OxDO movwf SLAVE movlw 0x00 movwf ADDR call RDBYTE btfss DATAI,7

goto okay movlw OxDO movwf SLAVE clrw

movwf ADDR movwf DATAO call WRBYTE nop

movlw OxDO movwf SLAVE movlw 0x01 movwf ADDR movlw 0x00 movwf DATAO call WRBYTE nop

movlw OxDO movwf SLAVE movlw 0x02 movwf ADDR movlw 0x00


; проверка пропадания питания ; установили адрес часов .установили адрес регистра состояния

; считываем регистр состояния ; если питание не пропадало, обходим ; инициализацию

; и начинаем отображать время и температуру ; иначе - инициализируем часы

; кварцевый генератор включен, ; счетчик секунд сброшен ; запись байта адрес для обращения к часам

; обнуление счетчика минут адрес для обращения к часам

; обнуление счетчика часов

movwf DATAO call WRBYTE nop

movlw OxDO movwf SLAVE movlw 0x07 movwf ADDR movlw    0x91 movwf DATAO call WRBYTE nop


; адрес для обращения к часам

; адрес контрольного регистра

; устанавливаем режим отображения 24 часа

; и частоту 4кГц на выходе Tout


okay clrf   TMRO        ; очищаем таймер movlw   b'l 0100000'

movwf   INTCON; разрешаем прерывание no TMRO

call    mnmc

call    indJLCD

btfss   PORTB, 2

call    hrinc

call    ind LCD

repeat btfss PORTB, 1   ; нажата кнопка "+минута"?

; если да, увеличить значение минут

; иначе обновить значение на индикаторе

; нажата кнопка "+час"?

; если да, увеличить значение часов

; иначе обновить значение на индикаторе

goto repeat ***********************************

чтение текущего времени из часов *************************************************************

clock movlw OxDO movwf SLAVE movlw 0x01 movwf ADDR

call    RDBYTEN ; чтение двух байтов: 01H, 02Н movf DATAI,W andlw OxOF

call    convert       ; табличная перекодировка movwf digit4 swapf DATAI,F movf DATAI,W andlw 0x07

call   convert       ; табличная перекодировка movwf digit3 movf DATAI_1,W andlw OxOF

call    convert       ; табличная перекодировка

movwf digit2 swapf DATAI_1,F movf DATAI_1,W andlw 0x03 btfsc STATUS,Z movlw OxOA

call    convert       ; табличная перекодировка

movwf   digit 1

return

***************************

> >

;               чтение значения температуры из термометра ;

*************************************************************


celsio movlw movwf movlw movwf b'00000000' digit 1

b'01100011' digit4


гасим первое знакоместо

символ "градус"

в четвертое знакоместо


movlw 0х9Е movwf SLAVE movlw ОхАА movwf ADDR call RDBYTEN movlw   b'01000000' btfss DATAI,7

goto rotate decf DATAI,F movwf   digit 1


; MSB-LSB ; символ минус

; если бит 7= 1, то температура отрицатель-: ная записали символ минус в первое знакоместо


movlw OxFF xorwf DATAI,F rotate movf DATAI,W movwf bin bcf bin,7

call   binary_to_bcd ; подпрограмма конвертации

movf tens_and_ones,W

andlw OxOF

call convert

movwf digit3

swapf tens_and_ones,F

movf tens_and_ones,W

andlw OxOF

call convert


movwf   digit 2 xorlw 0x3F btfss STATUS, Z return

movf digit3, w

movwf digit2

clrf digit4

movlw b'OllOOOll'

movwf digit3

movf digit2, w

xorlw 0x3F

btfss STATUS, Z

return

clrf   digit 1

return


; если в 2-м знакоместе незначащий ноль

; то для лучшей читаемости значения

; переносим значение из 3-го знакоместа в 2-е

; гасим 4-е знакоместо

; символ "С"

; в третье знакоместо

; если температура ноль градусов,

; то символ "плюс/минус" не отображаем


I jjc эфе эфе эфе эфе эфе эфе эфе э|с э|с эфе эфе эфеэфеэфеэфеэфеэфеэфеэфеэфеэфеэфеэфгэфеэфе эфе эфеэфеэфеэфеэфефэф^эфе эфе эфеэ[еэ[еэфсэфеэ}еэ}еэ}еэ[еэ[еэ[еэфсэ)еэфе эфе эфе эфеэфеэфеэ[еэ|сэ[еэ|сэ[еэ[е»

»

подпрограмма отображения 4 символов на ЖК-индикаторе ;

эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе эфе ^е эфе эфе эфе эфе э|е э|е э|е эфе э|е эфе эфе эфе эфе эфе эфе эфе эфе эфе э|е эфе э|е эфе эфе эфе э|е э|е э|е эфе э|е э|е эфе эфе эфе эфе эфе эфе э|е э|е э|е э|е э|е эфе эфе эфе*


ind_LCD bcf PORTB, 3 movf digitl,w movwf digitemp call loader movf digit2, w movwf digitemp call loader movf digit3, w movwf digitemp call loader movf digit4, w movwf digitemp call loader call delay

bsf PORTB, 3 movf digitl,w xorlw OxFF movwf digitemp call loader movf digit2, w xorlw OxFF movwf digitemp


; уровень на подложке в О

; первая цифра в аккумуляторе

; выгрузили биты в индикатор ; вторая цифра в аккумуляторе

; выгрузили биты в индикатор ; третья цифра в аккумуляторе

Похожие материалы

Информация о работе