- 阅读权限
- 200
- UID
- 2
- 帖子
- 343
- 精华
- 0
- 注册时间
- 2013-2-20
- 在线时间
- 368 小时
- UID
- 2
- 帖子
- 343
- 精华
- 0
- 注册时间
- 2013-2-20
- 在线时间
- 368 小时
|
' *********************************************
' * DS3231(RTC)I2C *
' * (Ver 1.01) *
' * Copyright By Slyt 2020.2.27 *
' *********************************************
'...................................................................................
$regfile = "m16def.dat" ' specify the used micro
$crystal = 7372800 ' used crystal frequency
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 64 ' default use 64 for the SW stack
$framesize = 64
'...................................................................................
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.1 , Rs = Porta.0
Cursor Off Noblink
Config Date = Ymd , Separator = Minus 'yy-mm-dd
Config Clock = Soft
Config Scl = Portc.0 'Is serial clock SCL
Config Sda = Portc.1 'Is serial data SDA
I2cinit
'...................................................................................
Declare Sub Write3231_date()
Declare Sub Write3231_time()
Declare Sub Read3231datetime()
Declare Sub Read3231temp()
'...................................................................................
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32 ' replace [x] with number (0-7)
Const Write_address = &B11010000 'Write address &HD0
Const Read_address = &B11010001 'Read address &HD1
Const Seconds_address = &H00
Const Minutes_address = &H01
Const Hour_address = &H02
Const Weekday_address = &H03
Const Day_address = &H04
Const Month_address = &H05
Const Year_address = &H06
Const Temp_address = &H11
'...................................................................................
Dim Mybyte As Byte
Dim Addrwr As Byte
Dim Weekday As Byte
Dim Weekday_str(7) As String * 5
Dim Temp_h As Byte
Dim Temp_l As Byte
Dim Temp_s As String * 1
Weekday_str(1) = "Sun. "
Weekday_str(2) = "Mon. "
Weekday_str(3) = "Tues."
Weekday_str(4) = "Wed. "
Weekday_str(5) = "Thur."
Weekday_str(6) = "Fri. "
Weekday_str(7) = "Sat. "
'***********************************************************************************
'初始化日期
Date$ = "20-02-27"
Time$ = "15:42:55"
Weekday = 5 ' Fur.
Write3231_date
Write3231_time
Waitms 10
Cls
Do
Read3231datetime
Locate 1 , 1
Lcd "20" ; Date$
Locate 2 , 1
Lcd Time$
Locate 1 , 12
Lcd Weekday_str(weekday)
Read3231temp
Locate 2 , 10
Lcd Temp_s ; Str(temp_h) ; "." ; Str(temp_l) ; " "
Locate 2 , 16
Lcd Chr(0)
Waitms 500
Loop
End
'***********************************************************************************
Sub Write3231_date()
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year) : Weekday = Makebcd(weekday)
I2cstart
I2cwbyte Write_address ' Send write address
I2cwbyte Weekday_address ' Starting address in 3231
I2cwbyte Weekday ' Weekday
I2cwbyte _day ' Send data to day
I2cwbyte _month ' Send data to month
I2cwbyte _year ' Send data to year
I2cstop
End Sub
'-----------------------------------------------------------------------------------
Sub Write3231_time()
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate start code
I2cwbyte Write_address ' Send write address
I2cwbyte Seconds_address ' Starting address in 3231
I2cwbyte _sec ' Send data to seconds
I2cwbyte _min ' Send data to minutes
I2cwbyte _hour ' Send data to hours
I2cstop
End Sub
'-----------------------------------------------------------------------------------
Sub Read3231datetime()
I2cstart ' Generate start code
I2cwbyte Write_address ' Send write address
I2cwbyte Seconds_address ' Start address in 3231
I2cstart ' Generate start code
I2cwbyte Read_address ' Send read address
I2crbyte _sec , Ack ' Seconds
I2crbyte _min , Ack ' Minutes
I2crbyte _hour , Ack ' Hours
I2crbyte Weekday , Ack ' Weekday
I2crbyte _day , Ack ' Day of Month
I2crbyte _month , Ack ' Month of Year
I2crbyte _year , Nack ' Year
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour) : Weekday = Makedec(weekday)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
End Sub
'-----------------------------------------------------------------------------------
Sub Read3231temp()
'(
DS3231的温度数据是存于地址为0X11,0X12的两个8位存储器中的,其中0x11中存放着温度数据的
高8位(其中含有一位正负温度标志位),0x12中高两位存放着数据的小数位(0,0.25,0.5,0.75)。
')
I2cstart ' Generate start code
I2cwbyte Write_address ' Send address
I2cwbyte Temp_address ' Start address in 3231
I2cstart ' Generate start code
I2cwbyte Read_address ' Send address
I2crbyte Temp_h , Ack ' MSB of Temp
I2crbyte Temp_l , Nack ' LSB of Temp
I2cstop
Shift Temp_l , Right , 6
Temp_l = Temp_l * 25
If Temp_h.7 = 1 Then Temp_s = "-"
If Temp_h.7 = 0 Then Temp_s = " "
End Sub
'-----------------------------------------------------------------------------------
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
|