Vous êtes sur la page 1sur 2

'ejemplo tomado del amigo xocas, modificado (gracias amigo)

'Pic 16f877A
Define
Define
Define
Define

CONF_WORD = 0x3f71
CLOCK_FREQUENCY = 4
LCD_LINES = 4
LCD_CHARS = 20

'-------------------------------------Puertos del LCD---------------------------------------------Define LCD_BITS = 4 'indicamos que el bus de datos del lcd sera de 8bit
Define LCD_DREG = PORTB 'el bus de datos sera el puerto B
Define LCD_DBIT = 4 '(0/4) indiferente en bus de 8 bits
Define LCD_RSREG = PORTB 'el bit RS est en el puerto A
Define LCD_RSBIT = 1 'se usa RA0 RS
Define LCD_EREG = PORTB 'el bit E est en el puerto A
Define LCD_EBIT = 2 'se usa RA1 para E
Define LCD_COMMANDUS = 2000 'Tiempo de espera despues de ejecutar un comand del
lcd en uSeg.
Define LCD_DATAUS = 100 'Tiempo de espera despues de enviar un dato al LCD en u
Seg.
Define LCD_INITMS = 100 'Tiempo de espera despues de inicializar el Display, so
lo se ejecuta una vez en mSeg.
Lcdinit
'-----------------------------------Puerto I2C---------------------------------------------------Symbol sda = PORTC.4 'asignamos nombre al pin que hara de SDA del puerto I2C
Symbol scl = PORTC.3 'asignamos nombre al pin que hara de SCL del puerto I2C
'***********************************DEFINICION DE VARIABLES*********************
*****************
'--------------------------------------Variables Programa--------------------------------------Dim addr(7) As Byte
Dim data As Byte
Dim escribe As Byte
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim

sec As Byte
min As Byte
hour As Byte
day As Byte
daym As Byte
month As Byte
year As Byte
d_hi As Byte
d_lo As Byte

WaitMs 1000
'bucle que escribe los datos iniciales en DS1307
For addr = 0 To 6
escribe = LookUp(0x00, 0x15, 0x16, 0x01, 0x22, 0x06, 0x08), addr
I2CWrite sda, scl, 0xd0, addr, escribe 'escribe los datos al DS1307
Next addr
'bucle para lectura de datos desde el DS1307
loop:
addr = 0

I2CRead sda,
addr = 1
I2CRead sda,
addr = 2
I2CRead sda,
addr = 3
I2CRead sda,
addr = 4
I2CRead sda,
addr = 5
I2CRead sda,
addr = 6
I2CRead sda,

scl, 0xd1, addr, sec


scl, 0xd1, addr, min
scl, 0xd1, addr, hour
scl, 0xd1, addr, daym
scl, 0xd1, addr, day
scl, 0xd1, addr, month
scl, 0xd1, addr, year

'escribimos resultado en el lcd


Lcdcmdout LcdClear
Lcdcmdout LcdLine3Home
Lcdout " Hora: "
data = hour
Gosub print
Lcdout "."
data = min
Gosub print
Lcdout "."
data = sec
Gosub print
Lcdcmdout LcdLine4Home
Lcdout "Fecha: "
data = day
Gosub print
Lcdout "/"
data = month
Gosub print
Lcdout "/0", #year
WaitMs 100
Goto loop
End
'subrutina de conversin
print:
d_hi = data / 16
d_lo = data Mod 16
If d_hi < 10 Then
Lcdout #d_hi
Else
Lcdout "X"
Endif
If d_lo < 10 Then
Lcdout #d_lo
Else
Lcdout "X"
Endif
Return

Vous aimerez peut-être aussi