Code:
' ________________________ Chip Setup ___________________________
@ __config _XT_OSC & _WDT_OFF & _LVP_OFF & _CPD_OFF & _DEBUG_OFF
' ___________________ Definitions & LCD Definitions _____________
DEFINE OSC 4 ' Tell PBP using a 4 MHZ Crystal
DEFINE I2C_HOLD 1 '
define LCD_DREG PORTB ' Declare data bus port
define LCD_DBIT 0 ' Declare data bus starting address
define LCD_RSREG PORTC ' Declare Register Select
define LCD_RSBIT 7 ' port and bit
define LCD_EREG PORTC ' Declare Enable port and bit
define LCD_EBIT 6 ' Declare Enabit bit
define LCD_BITS 4 ' Declare no. of Bits
define LCD_LINES 2 ' Declare no. of lines
' _________________________ Variables ______________________________
BCDsecs var byte '
BCDmins var byte '
BCDHours var byte ' Conversion Variables
BCDday var byte '
BCDdate var byte '
BCDmon var byte '
BCDyear var byte '
' ______________________ Clock Variables ___________________________
ClkSec var byte '$00 ' Seconds Register
ClkMin var byte '$01 ' Minutes Register
ClkHour var byte '$02 ' Hours Register
ClkDay var byte '$03 ' Days Register
ClkDate var byte '$04 ' Date Register
ClkMonth var byte '$05 ' Month Register
ClkYear var byte '$06 ' Year Register
ClkCont var byte '$07 ' Control
ClkCal var byte '$08 ' Calibration
ClkBuffer var byte[9] ' Time Buffer
' ______________________ Alarm0 Variables ___________________________
Alm0Secs var byte '$0A ' Seconds Register
Alm0Mins var byte '$0B ' Minutes Register
Alm0Hour var byte '$0C ' Hours Register
Alm0Day var byte '$0D ' Days Register
Alm0Date var byte '$0E ' Date Register
Alm0Month var byte '$0F ' Month Register
Alm0Buff var byte[6]
' ______________________ Alarm0 Variables ___________________________
Alm1Secs var byte '$11 ' Seconds Register
Alm1Mins var byte '$12 ' Minutes Register
Alm1Hour var byte '$13 ' Hours Register
Alm1Day var byte '$14 ' Days Register
Alm1Date var byte '$15 ' Date Register
Alm1Month var byte '$16 ' Month Register
Alm1Buff var byte[6]
' _____________________ Pin Definitions _________________________
SDA var PORTC.4 ' Serial Data Pin RC.4 ( pin )
SCL var PORTC.3 ' Serial Data Pin RC.3 ( pin )
SetButt var PORTB.0 '
UpButt var PORTB.1
DownButt var PORTB.1
' ____________________ Inital time setup ________________________
ClkSec = %10000000;$00
ClkMin = $00
ClkHour = $00
ClkDay = $01
ClkDate = $17
ClkMonth = $10
ClkYear = $78
ClkCont = %10000000;$00
clkcal = $00
' _______________________ Main Program __________________________
'
pause 500
' Allow LCD to Wake Up !
gosub settime
goto Main
Main :
gosub gettime
gosub disptime
goto main
end
' _________________________ Subrountines ________________________
SetTime : ;$DE = write
i2cwrite sda, scl, $DE,$00,[str clkbuffer\9]
'i2cwrite sda, scl, $DE,$00,[clksec,clkmin,clkhour,clkday,clkdate,clkmonth,clkyear,clkcont,clkcal]
'i2cwrite sda, scl, $DE,$00,[clksec]
return
GetTime : ;$DF = read 11011111
i2cread sda, scl, $DF,$00,[str clkbuffer\9]
'i2cread sda, scl, $DF,$00,[clksec,clkmin,clkhour,clkday,clkdate,clkmonth,clkyear]
bcdsecs = (clksec>>4*10) + (clksec & %00001111) ; convert BCD to Decemal ??
bcdmins = (clkmin>>4*10) + (clkmin & %00001111) ;
bcdhours = (clkhour>>4*10) + (clkhour & %00001111) ;
BCDday = (clkday>>4*10) + (clkday & %00001111) ;
bcddate = (clkdate>>4*10) + (clkdate & %00001111) ;
bcdmon = (clkmonth>>4*10)+ (clkmonth & %00001111) ;
bcdyear = (clkyear>>4*10) + (clkyear & %00001111) ;
return
DispTime :
lcdout $FE,1,dec bcdhours,":",dec bcdmins,":",dec bcdsecs
lcdout $FE,$c0,dec bcddate,"/",dec bcdmon,"/",dec bcdyear
pause 100
' lcdout $FE,1,dec clkhour,":",dec clkmin,":",dec clksec
' lcdout $FE,$c0," ",dec clkdate,"/",dec clkmonth,"/",dec clkyear
' pause 100
return
Bookmarks