PROGRAMADO CON PROTON IDE:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : Miguel Noe Garcia Perez *
'* Notice : Copyright (c) 2010 Iberica 2000 *
'* : All Rights Reserved *
'* Date : 05/05/2010 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 16F877A ' Define el Micro a Utilizar
All_Digital = True ' Configura Puertos como dig.
XTAL = 4 ' Define velocidad resonador
PORTB_PULLUPS = ON ' Resistencia interna Activada
'DEFINICION DE VARIABLES, CONSTANTES Y PUERTOS I/O
'---------------------------------------------------------
'TRISA = $00 ' Define el Puerto A como salidas
TRISB = $FF ' Define el Puerto B como Entradas
TRISC = $FF ' Define el Puerto C como Entradas
TRISd = $00 ' Define el Puerto C como salidas
'************************************ reloj
Symbol CLK = PORTc.3
Symbol DTA = PORTc.7
Symbol RST = PORTc.6
symbol T1= PortA.0
symbol T2= PortA.1
symbol T3= PortA.2
symbol T4= PortA.3
symbol T5= PortA.4
symbol T6= PortA.5
Symbol Punto = Portd.7
Symbol Pul1= Portb.0
symbol Pul2= Portb.1
Symbol Pul3= Portb.2
symbol Pul4= Portb.3
Symbol Pul5= Portb.4
symbol Pul6= Portb.5
Symbol Pul7= Portb.6
symbol Pul8= Portb.7
dim Contador as byte
Dim Numero as dword
dim Unidades as dword
dim Decenas as dword
dim Centenas as dword
dim Millares as dword
dim UniMillar as dword
dim CenMillar as dword
dim Btnvar as byte
dim N As byte
'****************************** reloj *************************
Dim RTCCMD as Byte
Dim TEMP as Byte
Dim TEMP1 as Byte
Dim TIMEDATA[7] as Byte
Dim OLDSECONDS as Byte
Dim SECONDS as timedata#0
Dim MINUTES as timedata#1
Dim HOURS as timedata#2
Dim DATE as timedata#3
Dim MONTH as timedata#4
Dim DAY As Timedata#5
Dim YEAR as timedata#6
dim Seg as byte
' Clear Write Protect bit in control register of DS1302
Temp = $10
RTCCmd = %00111
Gosub DS1302_WRITE
Temp = $00
RTCCmd = $00
Gosub DS1302_WRITE
Temp = $80
RTCCmd = %00111
Gosub DS1302_READ
AGAIN:
Gosub DS1302_READ
'if seconds = 16 then seconds = 10
'if seconds = 10 then
' If oldseconds <> seconds Then n=0'Print at 1,1, "TIME ", Hex2 Hours,":",Hex2 Minutes,":",Hex2 Seconds
' at 2,1, "DATE ", Hex2 Date,"/",Hex2 Month,"/20",Hex2 Year
' At 3,1,$FE,$10,$FE,$10,$FE,$10,$FE,$10,"DAY ", hex2 Day
if seconds > 9 then seconds = seconds - 6
if seconds > 19 then seconds = seconds - 6
if seconds > 29 then seconds = seconds - 6
if seconds > 39 then seconds = seconds - 6
if seconds > 49 then seconds = seconds - 6
if Minutes > 9 then Minutes = Minutes - 6
if Minutes > 19 then Minutes = Minutes - 6
if Minutes > 29 then Minutes = Minutes - 6
if Minutes > 39 then Minutes = Minutes - 6
if Minutes > 49 then Minutes = Minutes - 6
if Hours > 9 then Hours = Hours - 6
if Hours > 19 then Hours = Hours - 6
Unidades = dig Seconds,0
Decenas = dig Seconds,1
centenas = dig Minutes,0
Millares = dig Minutes,1
UniMillar = Dig Hours,0
CenMillar = dig Hours,1
gosub Multiplexacion
'gosub DiaSemana
Gosub Pulsadores
Goto AGAIN
'******************************************* 1
Multiplexacion:
numero = Unidades
gosub Paso_a_7Segmento
low punto
HIGH T1
low T2
low T3
low T4
low T5
low T6
delayms 2
clear portd
delayms 1
'******************************************* 2
numero = decenas
gosub Paso_a_7Segmento
low T1
HIGH T2
low T3
low T4
low T5
low T6
'clear portd
delayms 2
clear portd
delayms 1
'******************************************* 3
'centenas = DIG contador,2
numero = centenas
gosub Paso_a_7Segmento
'low punto
high punto
low T1
low T2
HIGH T3
low T4
low T5
low T6
'clear portd
delayms 2
clear portd
delayms 1
'******************************************* 4
'Millares = DIG contador,3
numero = Millares
gosub Paso_a_7Segmento
low punto
low T1
low T2
low T3
high T4
low T5
low T6
'clear portd
delayms 2
clear portd
delayms 1
'******************************************* 5
numero = UniMillar
gosub Paso_a_7Segmento
high punto
low T1
low T2
low T3
low t4
high t5
low t6
delayms 1
'clear portd
delayms 1
'******************************************* 6
numero = cenMillar
gosub Paso_a_7Segmento
low punto
low T1
low T2
low T3
low t4
low t5
high t6
delayms 2
clear porta
delayms 2
clear portd
delayms 1
return
'*******************************************************************************
'********* transformacion a siete segmentos *********************************
'*******************************************************************************
Paso_a_7Segmento:
select case numero
case 0
portd =$3F
case 1
portd =$06
case 2
portd =$5B
case 3
portd =$4F
case 4
portd =$66
case 5
portd =$6D
case 6
portd =$7D
case 7
portd =$07
case 8
portd =$7F
case 9
portd =$67
case else
portd =$49
endselect
return
'-----------------------------------------------------------------------------------
' Write to DS1302 RTC
DS1302_WRITE:
High RST'______________________________5
Shout Dta, Clk, LSBFIRST, [%0\1,RTCCmd\5,%10\2,Temp\8]
Low RST
Return
'-----------------------------------------------------------------------------------
' Read from the DS1302
DS1302_READ:
High RST'__________________________6
Shout DTA, Clk, LSBFIRST, [%111111\6,%10\2]
oldseconds = seconds
Shin DTA, Clk, LSBPRE, [Seconds,Minutes,Hours,Date,Month,DAY,Year]
Low RST
Return
Pulsadores:
button pul1,0,255,250,Btnvar,0,Bp
goto Setup
Bp:
return
'Bp:
' button Pul2,0,255,250,Btnvar,0,cP
' decenas = decenas +1 :gosub decena
'Cp:
' button Pul3,0,255,250,Btnvar,0,DP
' inc Centenas:gosub centena
'Dp:
' button Pul4,0,255,250,Btnvar,0,Ep
' inc Millares:gosub Millar
'Ep:
' button pul5,0,255,250,Btnvar,0,Fp
' dec unidades :gosub unidad
'Fp:
' button Pul6,0,255,250,Btnvar,0,GP
' dec decenas :gosub decena: if Decenas < 0 then Decenas = 5
'Gp:
' button Pul7,0,255,250,Btnvar,0,HP
' dec Centenas:gosub centena: if centenas < 0 then centenas = 9
'Hp:
' button Pul8,0,255,250,Btnvar,0,IP
' dec Millares:gosub Millar: if millares < 0 then Millares = 5
'Ip: button star,0,255,250,Btnvar,0,Sp
' goto Contar
'Sp:
' return
Setup:
clear porta
gosub MultiMinutos
button Pul2,0,255,250,Btnvar,0,Seti
Minutes = Minutes +1 :if minutes >= 60 then minutes = 0
centenas = dig Minutes,0
Millares = dig Minutes,1
Seti:
button pul1,0,255,250,Btnvar,0,setup
gosub DS1302_WRITE
delayms 500
goto AGAIN
MultiMinutos:
numero = centenas
gosub Paso_a_7Segmento
'low punto
high punto
low T1
low T2
HIGH T3
low T4
low T5
low T6
'clear portd
delayms 2
clear portd
delayms 1
'******************************************* 4
'Millares = DIG contador,3
numero = Millares
gosub Paso_a_7Segmento
low punto
low T1
low T2
low T3
high T4
low T5
low T6
'clear portd
delayms 2
clear porta
delayms 1
return