Сб дек 29, 2018 17:58:38
$Regfile = "m328pdef.dat"
$Crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config lcd = 20 * 4
Config lcdpin = PIN , DB4 = PORTc.3 , DB5 = PORTc.4 , DB6 = PORTc.5 , DB7 = PORTd.7 , E = PORTc.2 , RS = PORTc.1
Config lcdmode = PORT
Initlcd
Cursor Off
Deflcdchar 0 , 15 , 31 , 31 , 31 , 31 , 31 , 31 , 15
Deflcdchar 1 , 30 , 31 , 31 , 31 , 31 , 31 , 31 , 30
Deflcdchar 2 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31
Deflcdchar 4 , 31 , 31 , 32 , 32 , 32 , 32 , 24 , 28
Deflcdchar 5 , 32 , 32 , 32 , 32 , 32 , 32 , 24 , 28
Deflcdchar 6 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31
Deflcdchar 7 , 28 , 28 , 32 , 32 , 32 , 32 , 24 , 28
Dim Posx As Byte
Dim Posy As Byte
Dim I As Byte
Declare Sub set_ds1307(byval Adress As Byte , dane As Byte)
Declare Sub Style_time
Declare Sub Digit
Config Sda = Portb.7 ' I2C Data
Config Scl = Portb.6 ' I2C Clock
Dim Seco As Byte
Dim Mine As Byte
Dim Hour As Byte
dim day as byte
dim dane as byte : dane = 0
dim _out as bit : _out = 0
dim _SQWE as bit : _SQWE = 1
dim _RS as byte : _RS = 3 '0=1 hz,1= 4.096 khz,2=8.192 khz,3=32.768 khz
dim button as byte
dim x as byte , y as byte , z as byte
gosub Ds1307_start
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'конфигурация АЦП
'объявляем переменные
Dim W As Word
Start Adc
'cls
'lcd "Hello !!!"
'wait 1
cls
do
gosub Ds1307
call Style_time
'W = Getadc(7) 'считываем результат с пина 0 порта А.
'if W < 1000 then
gosub buttons
'Locate 3 , 16
'Lcd "" ; W ; " " 'выводим результат преобразования на ЖК
'Locate 4 , 16 ' позиция курсора
lcd button ; " "
'else
'button = 10
'end if
select case button
Case 5 : gosub set_menu
end select
waitms 300
loop
set_menu:
x = 2
y = 2
z = 2
cls
locate 1 , 8
lcd "MENU"
locate 2 , 3
lcd "Set time and data"
locate 3 , 3
lcd "Set budilnik"
locate 4 , 3
lcd "Set LCD contrast"
while button <> 6
gosub buttons
wend
do
locate x , 1
lcd ">"
gosub buttons
select case button
'case 0 : exit do
case 1 : gosub set_time_date 'уствановка времени и даты
'case 1 :
case 2 : locate x , 1
lcd " "
decr x
if x < 2 then x = 4
locate x , 1
lcd ">"
waitms 500
case 3 : locate x , 1
lcd " "
incr x
if x > 4 then x = 2
locate x , 1
lcd ">"
waitms 500
case 4 : if x = 2 then gosub set_time_date 'уствановка времени и даты
end select
waitms 100
loop until button = 0 'or button = 1 ' or button = 5
cls
while button = 0
gosub buttons
wend
return
set_time_date: 'уствановка времени и даты
cls
'y = 2
cls
locate 1 , 3
lcd "Set time and data"
locate 2 , 3
lcd "Set time "
locate 3 , 3
lcd "Set data"
locate 4 , 3
lcd "Set day of theweek"
while button <> 6
gosub buttons
wend
do
locate y , 1
lcd ">"
gosub buttons
select case button
'case 1 : gosub set_time_date 'уствановка времени и даты
case 0 : exit do
case 2 : locate y , 1
lcd " "
decr y
if y < 2 then y = 4
locate y , 1
lcd ">"
waitms 500
case 3 : locate y , 1
lcd " "
incr y
if y > 4 then y = 2
locate y , 1
lcd ">"
waitms 500
case 4 : if y = 2 then gosub set_time 'уствановка времени
if y = 3 then gosub set_data 'уствановка даты
if y = 4 then gosub set_day 'уствановка дня недели
end select
waitms 100
loop 'until button = 0
'cls
while button = 0
gosub buttons
wend
goto set_menu
return
set_time: 'уствановка времени
cls
'z = 2
cls
locate 1 , 3
lcd "Set time"
locate 2 , 3
lcd "Hour:"
locate 3 , 3
lcd "Minut:"
locate 4 , 3
lcd "Sekund:"
while button <> 6
gosub buttons
wend
do
gosub Ds1307
'locate 1 , 3
'lcd "Set time"
locate 2 , 10
lcd Hour ; " "
locate 3 , 10
lcd Mine ; " "
locate 4 , 10
lcd Seco ; " "
locate z , 1
lcd ">"
gosub buttons
select case button
case 0 : exit do 'уствановка времени
case 1 : if z = 2 then 'плюс минус
decr Hour
if Hour > 200 then Hour = 23
call set_ds1307(2 , Hour)
end if
if z = 3 then 'плюс минус
decr Mine
if Mine > 200 then Mine = 59
call set_ds1307(1 , Mine)
end if
if z = 4 then 'плюс минус
decr Seco
if Seco > 200 then Seco = 59
call set_ds1307(0 , Seco)
end if
waitms 100
case 2 : locate z , 1
lcd " "
decr z
if z < 2 then z = 4
locate z , 1
lcd ">"
waitms 500
case 3 : locate z , 1
lcd " "
incr z
if z > 4 then z = 2
locate z , 1
lcd ">"
waitms 500
case 4 : if z = 2 then 'плюс минус
incr Hour
if Hour > 23 then Hour = 0
call set_ds1307(2 , Hour)
end if
if z = 3 then 'плюс минус
incr Mine
if Mine > 59 then Mine = 0
call set_ds1307(1 , Mine)
end if
if z = 4 then 'плюс минус
incr Seco
if Seco > 59 then Seco = 0
call set_ds1307(0 , Seco)
end if
waitms 100
end select
waitms 100
loop 'until button = 0
goto set_time_date 'set_menu
return
set_data: 'уствановка даты
cls
'z = 2
cls
locate 1 , 3
lcd "Set data:"
locate 2 , 3
lcd "Year:20"
locate 3 , 3
lcd "Month:"
locate 4 , 3
lcd "Data: "
while button <> 6
gosub buttons
wend
do
gosub Ds1307_data
'locate 1 , 3
'lcd "Set time"
locate 2 , 10
lcd Hour ; " "
locate 3 , 10
lcd Mine ; " "
locate 4 , 10
lcd Seco ; " "
locate z , 1
lcd ">"
gosub buttons
select case button
case 0 : exit do 'уствановка даты
case 1 : if z = 2 then 'плюс минус
decr Hour
if Hour > 200 then Hour = 99 'ГОД
call set_ds1307(6 , Hour)
end if
if z = 3 then 'плюс минус
decr Mine
if Mine > 200 or mine = 0 then Mine = 12 ' МЕСЯЦ
call set_ds1307(5 , Mine)
end if
if z = 4 then 'плюс минус
decr Seco
if Seco > 200 or seco = 0 then Seco = 31 ' ДЕНЬ
call set_ds1307(4 , Seco)
end if
waitms 100
case 2 : locate z , 1
lcd " "
decr z
if z < 2 then z = 4
locate z , 1
lcd ">"
waitms 500
case 3 : locate z , 1
lcd " "
incr z
if z > 4 then z = 2
locate z , 1
lcd ">"
waitms 500
case 4 : if z = 2 then 'плюс минус
incr Hour
if Hour > 99 then Hour = 0 ' ГОД
call set_ds1307(6 , Hour)
end if
if z = 3 then 'плюс минус
incr Mine
if Mine > 12 then Mine = 1 ' МЕСЯЦ
call set_ds1307(5 , Mine)
end if
if z = 4 then 'плюс минус
incr Seco
if Seco > 31 then Seco = 1 'ДЕНЬ
call set_ds1307(4 , Seco)
end if
waitms 100
end select
waitms 100
loop 'until button = 0
goto set_time_date 'set_menu
return
set_day: 'уствановка дня недели
cls
locate 1 , 3
lcd "Set day:"
while button <> 6
gosub buttons
wend
do
locate 1 , 11
gosub Ds1307_data
lcd day ; " "
gosub buttons
select case button
case 0 : exit do
case 1 : 'минус
decr day
if day > 200 or day = 0 then day = 7 'день недели
call set_ds1307(3 , day)
case 4 : 'плюс
incr day
if day > 7 then day = 1 ' день недели
call set_ds1307(3 , day)
end select
waitms 300
loop 'until button = 0
goto set_time_date
return
buttons:
W = Getadc(7)
w = w / 10
button = w / 15
return
Ds1307_start:
dane = _RS : dane.7 = _out : dane.4 = _SQWE
i2cstart
I2cwbyte &HD0
I2cwbyte 7
I2cwbyte dane
I2cstop
gosub Ds1307
if seco > 59 then
i2cstart
I2cwbyte &HD0
I2cwbyte 0
I2cwbyte 0
I2cstop
end if
return
Ds1307:
I2cstart
I2cwbyte &HD0
I2cwbyte &H00
I2cstart
I2cwbyte &HD1
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)
Return
Ds1307_data:
I2cstart
I2cwbyte &HD0
I2cwbyte &H03
I2cstart
I2cwbyte &HD1
I2crbyte day , Ack
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)
day = Makedec(day)
Return
Sub set_ds1307(byval Adress As Byte , dane As Byte)
dane = Makebcd(dane)
I2cstart
I2cwbyte &HD0 ' бит записи
I2cwbyte Adress
I2cwbyte dane
I2cstop
end sub
Sub Style_time
Posx = 1
i = hour / 10
Call Digit
i = hour mod 10
Posx = 4
Call Digit
i = mine / 10
Posx = 10
Call Digit
i = mine mod 10
Posx = 14
Call Digit
Locate 1 , 9
Lcd "."
'i = Seco mod 10
locate 2 , 9
Lcd "."
locate 2 , 18
if Seco < 10 then Lcd "0"
Lcd Seco ; " "
End Sub
Sub Digit:
if posx = 4 then incr posx
'Select Case Stroka
if i = 0 then
Locate 1 , Posx
Lcd Chr(0) ; Chr(2) ; Chr(1)
Locate 2 , Posx
Lcd Chr(0) ; Chr(3) ; Chr(1)
end if
'----------
if i = 1 then
Locate 1 , Posx
Lcd Chr(2) ; Chr(1) ; " "
Locate 2 , Posx
Lcd Chr(3) ; Chr(0) ; Chr(3)
end if
'----------
if i = 2 then
Locate 1 , Posx
Lcd Chr(2) ; Chr(6) ; Chr(1)
Locate 2 , Posx
Lcd Chr(0) ; Chr(3) ; Chr(3)
end if
'----------
if i = 3 then:
Locate 1 , Posx
Lcd Chr(6) ; Chr(6) ; Chr(1)
Locate 2 , Posx
Lcd Chr(3) ; Chr(3) ; Chr(1)
end if
'----------
if i = 4 then
Locate 1 , Posx
Lcd Chr(1) ; " " ; Chr(3)
Locate 2 , Posx
Lcd Chr(2) ; Chr(2) ; Chr(0)
end if
'----------
if i = 5 then
Locate 1 , Posx
Lcd Chr(0) ; Chr(6) ; Chr(4)
Locate 2 , Posx
Lcd Chr(3) ; Chr(3) ; Chr(1)
end if
'----------
if i = 6 then
Locate 1 , Posx
Lcd Chr(0) ; Chr(6) ; Chr(7)
Locate 2 , Posx
Lcd Chr(0) ; Chr(3) ; Chr(1)
end if
'----------
if i = 7 then
Locate 1 , Posx
Lcd Chr(2) ; Chr(2) ; Chr(1)
Locate 2 , Posx
Lcd " " ; " " ; Chr(1)
end if
'----------
if i = 8 then
Locate 1 , Posx
Lcd Chr(0) ; Chr(6) ; Chr(1)
Locate 2 , Posx
Lcd Chr(0) ; Chr(3) ; Chr(1)
end if
'----------
if i = 9 then
Locate 1 , Posx
Lcd Chr(0) ; Chr(6) ; Chr(1)
Locate 2 , Posx
Lcd Chr(3) ; Chr(3) ; Chr(1) '" " ; Chr(3) ; Chr(1)
end if
'----------
if i = 10 then '-
Locate 1 , Posx
Lcd Chr(6) ; Chr(6) ; Chr(6)
'Locate 2 , Posx
'Lcd Chr(3) ; Chr(3) ; Chr(1) '" " ; Chr(3) ; Chr(1)
end if
if i = 11 then 'о
Locate 1 , Posx
lcd " " ; "o" ; " "
end if
if i = 12 then 'c
Locate 1 , Posx
Lcd Chr(0) ; Chr(2) ; Chr(2)
Locate 2 , Posx
Lcd Chr(0) ; Chr(3) ; Chr(3)
end if
End Sub
Сб дек 29, 2018 18:21:12
Сб дек 29, 2018 19:00:28
+-1минута давно не время изза которого стоит ломать
Сб дек 29, 2018 19:12:19
Сб дек 29, 2018 20:00:59
Вс дек 30, 2018 08:13:32
Пн янв 07, 2019 10:43:36
Пн янв 07, 2019 13:16:59
Пн янв 07, 2019 17:18:20
Пн янв 07, 2019 18:00:04
Пн янв 07, 2019 19:48:36
Вт янв 08, 2019 08:31:16
Вт янв 08, 2019 13:51:40
Вт янв 08, 2019 16:48:32
Вт янв 08, 2019 16:51:20
Вт янв 08, 2019 17:50:13
Вт янв 08, 2019 18:19:50
Вт янв 08, 2019 18:28:03
Вт янв 08, 2019 18:39:41