- 阅读权限
- 20
- UID
- 488
- 帖子
- 9
- 精华
- 0
- 注册时间
- 2013-8-16
- 在线时间
- 2 小时
- UID
- 488
- 帖子
- 9
- 精华
- 0
- 注册时间
- 2013-8-16
- 在线时间
- 2 小时
|
'*********************************************************************************
'SD2403时钟程序
'软件版本Bascom_version:1.11.8.4
'Windows_:Microsoft Windows XP
'设计 OYT88
'日期2013年5月27日
'-----------------------------------------------------------------------------------------------------------------------------
'///////////////////////////////////////////////////////
$regfile = "m8def.dat" '使用CPU为M8
$crystal = 7372800 '晶体频率
$baud = 9600
Config I2cdelay = 5
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , Rs = Portd.3 , E = Portd.2
Config Lcd = 16 * 2
Config Scl = Portc.5 '定义I2C端口
Config Sda = Portc.4
Declare Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte) '声明过程
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
'定义器件地址 常量
Const Addressw = &H64 '写地址
Const Addressr = &H65 '读地址
Dim B1 As Byte , Adres As Byte , Value(7) As Byte
'/////////////////变量声明///////////////////
Dim S As Byte , M As Byte , H As Byte
Dim Day As Byte , Month As Byte , Week As Byte
Dim Year As Byte
Config Pinb.0 = Input
Portb.0 = 1
'//////////////////主程序////////////////////
Cls
Waitms 50
Locate 1 , 3
Lcd "bascom--time"
Locate 2 , 5
Lcd "start ok"
Waitms 500
Cls
If Pinb.0 = 0 Then 'PB0=0写数据
Gosub Wd_time
End If
Do
Gosub Rd_time
Waitms 20
Gosub Szxs
Waitms 100
Loop
'///////////////时钟显示子程序///////////////
Szxs:
Locate 1 , 4
Lcd 20
Locate 1 , 6
Lcd Hex(year) ; "/" ; Hex(month) ; "/" ; Hex(day)
' Print "20" ; Hex(nian) ; "/" ; Hex(month) ; "/" ; Hex(day)
Locate 2 , 3
Lcd Hex(h) ; ":" '显示时数据
Locate 2 , 6
Lcd Hex(m) ; ":" '显示分数据
Locate 2 , 9
Lcd Hex(s) ; " " '显示秒数据
Locate 2 , 13
Lcd Hex(week) '显示星期数据
Return
'///////////////写入时间子程序///////////////
Wd_time:
Call Write_eeprom(&H10 , &HE9) '打开写保护置WRTC1=1
Call Write_eeprom(&H11 , &HFF) '设置为1秒频率中断
Call Write_eeprom(&H0f , &H84) '设置写地址0FH 置WRTC2,WRTC3=1 ,
Call Write_eeprom(&H00 , &H00) '写入秒数据(地址0)0秒
Call Write_eeprom(&H01 , &H12) '写入分数据(地址1)00分
Call Write_eeprom(&H02 , &H14) '写入小时数据(地址2)8点
Call Write_eeprom(&H03 , &H06) '写入星期数据(地址3)星期1
Call Write_eeprom(&H04 , &H25) '写入日数据(地址4) 01日
Call Write_eeprom(&H05 , &H05) '写入月/世纪数据(地址5)07月
Call Write_eeprom(&H06 , &H13) '写入年数据(地址6) 13年
Cls
Locate 2 , 2
Lcd "Wtime time ok"
Wait 1
Cls
Return
'///////////////读取时间子程序///////////////
Rd_time:
Call Read_eeprom(&H00 , Value(1))
'读秒数据 从指定地址H00读数据给数组Value(1)
S = Value(1)
Call Read_eeprom(&H01 , Value(2))
M = Value(2)
'读分数据
Call Read_eeprom(&H02 , Value(3))
H = Value(3) '读时数据
Call Read_eeprom(&H03 , Value(4))
'读星期数据
Week = Value(4)
Call Read_eeprom(&H04 , Value(5))
'读日数据
Day = Value(5)
'If Week = 0 Then Week = 7 '将星期天转换为week7
Call Read_eeprom(&H05 , Value(6))
Month = Value(6)
'读月数据
Call Read_eeprom(&H06 , Value(7))
Year = Value(7) '读年数据
Return
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte) '写子过程
I2cstart ' 发出起始信号
I2cwbyte Addressw ' 主控器件寻址被控器件,写操作
I2cwbyte Adres ' 指定单元地址ADRES
I2cwbyte Value ' 在现行地址写入变量 VALUE
I2cstop ' 发出停止信号
Waitms 10 ' 写操作等候10毫秒
End Sub
Sub Read_eeprom(byval Adres As Byte , Value As Byte) '读子过程
I2cstart ' 发出起始信号
I2cwbyte Addressw ' 主控器件寻址被控器件,写操作
I2cwbyte Adres ' 向写入指定单元地址ADRES
I2cstart ' 重启动
I2cwbyte Addressr ' 主控器件寻址被控器件,读操作
I2crbyte Value , Nack ' 指定单元地址读出数据给变量VALUE
I2cstop ' 发出停止信号
End Sub |
-
总评分: 金钱 + 20
查看全部评分
|