RST var PortA.4 'pin 3 Output reset display
SDIN var PortA.3 'pin 2 Output master data out
SCK var PortA.2 'pin 1 Output Spi clock
DQ var PortA.1 'pin 18 I/O DQ DS18b20
D_C var PortB.0 'pin 6 Output command/data sel. register
temperature var Word
TempC var byte
Float var byte
temperature2 Var Word
Dummy var byte
TempC2 var byte
Float2 var byte
Bitovi var byte
Bitovi2 var byte
Predznak var Bitovi.0
Predznak2 var Bitovi2.0
Minus var Byte
LcdReg var byte
x var byte
y var byte
Offset var byte
Char var byte
a var byte
PosX VAR Byte
PosY VAR Byte
Chr VAR Byte
LcdData VAR Byte
TargetTemp Var Word ' Desired Temperature
Hyst Var Word ' Hystereris
V Var Word ' Var. for display
V2 Var Word ' Var. for display
B1 Var Byte ' Byte for TargetTemp calculation
B2 Var Byte ' Byte for TargetTemp calculation
Mode Var Byte ' 0=Temp. display, 1=Set Temp, 2=Set Hysteresis
Sign Var Byte
Sign2 Var Byte
DS18B20_1_12bit CON %01111111 ; 750ms, 0.0625°C
DS18B20_2_12bit CON %01111111 ; 750ms, 0.0625°C
DATA 46, 224, 10 ' Temp MSB, TEMP LSB, Hysteresis DIV 10
MainLoop:
If PORTB.3=0 then
Pause 50
Gosub LCD_Clear
Call Apel
If PORTB.3=0 then MainLoop ' Wait until button is released
Mode=Mode+1 ' Increment mode
If Mode=2 then ' Save Target Temperature (Mode1 -> Mode2)
Write 0, TargetTemp / 256 ' TargetTemp MSB
Write 1, TargetTemp MOD 256 ' TargetTemp LSB
EndIf
If Mode > 2 Then ' Save Hysteresis (Mode 2 -> Mode 0)
Mode=0 ' Only 0, 1, 2 are valid
Write 2, Hyst / 10 ' Divide Hyst value to fit in Byte
EndIf
Endif
V=TargetTemp ' TargetTemp in V
Gosub SelectSign ' Select +/blank/-
Gosub DTemp ' Display Target Temperature
If (PORTB.1=0) Or (PORTB.2=0) then ' Up or Down button pushed
If PORTB.2=0 then ' Down button
If TargetTemp > 7500 then ' Not lower than -25 C. (10000-MinTemp * 100)
TargetTemp=TargetTemp-10 ' Decrease temperature with 0.25 C.
EndIf
EndIf
If PORTB.1=0 then ' Up button
If TargetTemp < 17500 then ' Not higher than 75 C. (10000+MaxTemp * 100)
TargetTemp=TargetTemp+10 ' Increase temperature with 0.25 C.
EndIf
EndIf
GoSub SetTargetTemp ' Display TargetTemp and delay 0.25 Sec.
EndIf
EndIf
If Mode=2 then ' Set Hysteresis
LcdReg = %10000000 + 12 ' cursor X
call PrintCtrlLcd
LcdReg = %01000011 ' cursor Y
call PrintCtrlLcd
Char = 24
call PrintChar
Char = 22
call PrintChar
Char = 23
call PrintChar
Char = 15
call PrintChar
Sign=" " ' No sign
V= 10000+Hyst ' Set value for V
Gosub DTemp ' Display Hysteresis
If (PORTB.1=0) Or (PORTB.2=0) then ' Up or down button pushed
Sign=" " ' No sign for Hysteresis
If PORTB.1=0 then ' Down button
If Hyst > 10 then Hyst=Hyst-10 ' Not less than 0.1 C.
EndIf
If PORTB.2=0 then ' Up button
If Hyst < 1000 then Hyst=Hyst+10 ' Not more than 10.0 C.
EndIf
V= 10000+Hyst ' Set value for V
Gosub DTemp ' Display Hysteresis
Pause 250 ' Delay 0.25 Sec.
EndIf
EndIf
If Mode > 0 then Mainloop ' Setting TargetTemperature or Hysteresis
Output DQ ' Make Pin Output
DQ=0 ' OneWire line Low
PauseUs 480 ' Keep down for 480 µS
Input DQ ' Make Pin Input
PauseUs 70 ' Wait 70 µS
If DQ=1 then ' No presence pulse from DS1820
Pause 500 ' Wait 0.5 Sec.
Goto MainLoop ' Check again
EndIf
OWOut DQ, 1, [$55, $28, $DD, $06, $49, $1, $0, $0, $D4, $BE]
Pause 500
OWIn DQ, 2, [temperature.byte0, temperature.byte1]
Predznak = 0
if temperature.15 then
temperature = ~ temperature + 1
Predznak = 1
endif
Dummy = 625 * Temperature
TempC = DIV32 10
TempC = (Temperature & $7FF) >> 4
Float = ((Temperature.Lowbyte & $0F ) * 25 )>>2
Temperature=TempC*100 + Float
If Predznak then
V= 10000 - Temperature ' 25 C=12500 0 C=10000 -10 C=9000
Predznak = 0
else
V= 10000 + Temperature
EndIf
If V >= 10000 then ' Above 0 C.
Temperature=V-10000
Else
Temperature=10000-V ' Below 0 C.
EndIf
If V < TargetTemp - Hyst then ' Below Target temperature - Hysteresis
PORTB.6=1 ' Activate Warm Output
PORTB.7=0 ' Deactivate Cold Output
EndIf
If V > TargetTemp + Hyst then ' Above Target temperature + Hysteresis
PORTB.6=0 ' Deactivate Warm output
PORTB.7=1 ' Activate Cold Output
EndIf
GoSub SelectSign ' +/blank/- Sign
If V >= 10000 then ' Above 0 C.
Temperature=V-10000
Else
Temperature=10000-V ' Below 0 C.
EndIf
'---------------setting cursor for text "TEMP.INT :"
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000001 ' cursor Y
call PrintCtrlLcd
'---------------setting cursor for display the temperature 1
LcdReg = %10100000 + 22 ' cursor X
call PrintCtrlLcd
LcdReg = %01000010 ' cursor Y
call PrintCtrlLcd
'---------------now display temperature 1
if TempC > 99 then
Char = 3
call PrintChar
endif
If sign ="-" then
Char = 13
call PrintChar
else
Char = 12
call PrintChar
endif
'====================================================================
SelectSign:
If v = 10000 then ' Temperature = 0 C.
Sign=" " ' No sign
Else
If v < 10000 then ' <> 0
Sign="-" ' Temperature below 0 C.
Else
Sign="+" ' Temperature above 0 C.
EndIf
EndIf
If v2 = 10000 then ' Temperature = 0 C.
Sign2=" " ' No sign
Else
If v2 < 10000 then ' <> 0
Sign2="-" ' Temperature below 0 C.
Else
Sign2="+" ' Temperature above 0 C.
EndIf
EndIf
Return
BorderLine:
'=================================== UP
LcdReg = %10000000 ' cursor X
call PrintCtrlLcd
LcdReg = %01000000 ' cursor Y
call PrintCtrlLcd
for y = 0 to 73
LOokup y, [$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3F,$3F,$21,$21,$3F,$1E,$00,$3F,$3F,$00,_
$1E,$3F,$21,$29,$3B,$1A,$00,$3F,$3F,$00,_
$01,$01,$3F,$3F,$01,$01,$00,$3E,$3F,$09,$09,$3F,$3E,$00,_
$3F,$3F,$20,$20,$20,_
$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,_
$18,$27,$27,$18,$00,$00,$00,$00,$06,$06,_
$00,$1E,$3F,$21,$21] ,LcdReg
' for y = 0 to 83
' LOokup y, [$01,$01,$01,$01,$01,$01,$01,$01,_
' $01,$01,$01,$01,$01,$01,$7F,$7F,$43,$43,$7F,$3D,$01,$7F,$7F,$01,_ 'DI
' $3D,$7F,$43,$53,$77,$35,$01,$7F,$7F,$01,$03,$03,$7F,$7F,$03,$03,$01,_ 'GIT
' $7D,$7F,$13,$13,$7F,$7D,$01,$7F,$7F,$41,$41,$41,$01,$01,$01,$01,$01,_ 'AL
' $01,$01,$01,$31,$4F,$4F,$31,$01,$01,$01,$0D,$0D,$01,$3D,$7F,$43,$43,$43,_
' $01,$01,$01,$01,$01,$01,$01,01] ,LcdReg
call PrintDataLcd
next y
'=================================== DOWN
' LcdReg = %10000000 ' cursor X
' call PrintCtrlLcd
' LcdReg = %01000101 ' cursor Y
' call PrintCtrlLcd
' for y = 0 to 83
' LOokup y, [$80,$80,$80,$80,$80,$80,$FE,$CA,$CA,$B4,$80,$8E,$D0,$D0,$BE,_ 'BY
' $80,$80,$80,$80,$FE,$88,$90,$FE,$80,$FE,$80,$BC,$C2,$C2,$A4,_ 'NIC
' $80,$BE,$C0,$C0,$BE,$80,$FE,$C0,$C0,$C0,$80,$FE,$CA,$CA,$C2,_ 'ULE
' $80,$A4,$CA,$CA,$B0,$80,$BC,$C2,$C2,$A4,$80,$BE,$C0,$C0,$BE,_ 'SCU
' $80,$80,$80,$80,$FE,$C2,$C2,$BC,$80,$FC,$92,$92,$FC,$80,$FE,_ 'DAN
' $88,$90,$FE,$80,$80,$80,$80,$80,$80] ,LcdReg
'
' call PrintDataLcd
' next y
return
'=================================== end of BorderLine
Ahoj lidi, s PIC teprve začínám tak pokud bude moje otázka blbá tak sorry. Chci postavit známý teploměr s LCD z Nokie ( http://www.radiolocman.com/shem/schematics.html?di=44132 ). HEX se dá stáhnout všude ale mě jde o tu grafiku. Je přímo v tom HEX? Píše se už v ASM nebo až pak v nějakém programu? Pomozte prosím díky
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2
Strana 2 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.