Mas bem antes de tudo o BASCOM usa a linguagem basic, o que facilita um pouco pra quem ja é familiarizado com a mesma....
Esse código eu ocupei praticamente o espaço inteiro de 4kb para versão gratuita,rs, mas ficou show!Se tivesse uma versão paga dava para incluir os dias da semana.
Utilizei um display lcd para mostrar as informações e mais 5 botoes de acionamento que ajustam os minutos, as horas , os dias da semana, meses e anos.
Sem mais delongas aqui vai o código em BASCOM
--------------------------------
$regfile = "m328Pdef.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Portd = Output
Config Portb.0 = Input
Config Portb.1 = Input
Config Portb.2 = Input
Config Portb.3 = Input
Config Portc.0 = Input
Config Portc.1 = Input
Config Portc.2 = Input
Config Portb.4 = Input
Config Portb.5 = Output
Dim Hora As Integer
Dim Minuto As Integer
Dim Segundo As Integer
Dim Ajuste As Integer
Dim Vai As Integer
Dim Dia As Integer
Dim Mes As Integer
Dim Ano As Integer
Dim Limite As Integer
Dim Alarmehora As Integer
Dim Alarmeminuto As Integer
Alarmehora = 10
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Sinal Alias Portb.5
Sinal = 0
Botaohora Alias Pinb.0
Botaominuto Alias Pinb.1
Botaovetor Alias Pinb.2
Botaoalarme Alias Pinb.3
Botaocronometro1 Alias Pinb.4
Ano = 16
Dia = 1
Config Lcdpin = Pin , E = Portd.2 , Rs = Portd.3 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcd = 16 * 2
Config Timer1 = Timer , Prescale = 256 ,
Timer1 = 3036
Enable Interrupts
Enable Timer1
On Timer1 Pulso
Do
Start Timer1
If Segundo >= 60 Then
Segundo = 0
Minuto = Minuto + 1
End If
If Minuto >= 60 Then
Minuto = 0
Hora = Hora + 1
End If
If Hora >= 24 Then
Dia = Dia + 1
Hora = 0
End If
If Segundo < 0 Then
Segundo = 0
End If
If Minuto < 0 Then
Minuto = 0
End If
If Hora < 0 Then
Hora = 0
End If
Locate 1 , 1
Lcd "hora:"
Lcd Hora ; ":" ; Minuto ; ":" ; Segundo
Locate 2 , 1
Lcd "d:"
Lcd Dia ; "/" ; Mes ; "/20" ; Ano
If Botaohora = 0 And Ajuste = 1 Then
Waitms 300
Hora = Hora + 1
End If
If Botaominuto = 0 And Ajuste = 1 Then
Waitms 300
Hora = Hora - 1
End If
If Botaohora = 0 And Ajuste = 2 Then
Waitms 300
Minuto = Minuto + 1
End If
If Botaominuto = 0 And Ajuste = 2 Then
Waitms 300
Minuto = Minuto - 1
End If
If Botaohora = 0 And Ajuste = 3 Then
Waitms 300
Mes = Mes + 1
End If
If Botaominuto = 0 And Ajuste = 3 Then
Waitms 300
Mes = Mes - 1
End If
If Botaohora = 0 And Ajuste = 4 Then
Waitms 300
Dia = Dia + 1
End If
If Botaominuto = 0 And Ajuste = 4 Then
Waitms 300
Dia = Dia - 1
End If
If Dia > Limite Then
Dia = 1
Mes = Mes + 1
End If
If Dia < 1 Then
Dia = Limite
End If
If Botaohora = 0 And Ajuste = 5 Then
Waitms 300
Ano = Ano + 1
End If
If Botaominuto = 0 And Ajuste = 5 Then
Waitms 300
Ano = Ano - 1
End If
If Botaohora = 1 And Ajuste = 6 Then
Locate 1 , 14
Lcd "ALH"
Locate 2 , 14
Lcd Alarmehora
End If
If Botaohora = 1 And Ajuste = 7 Then
Locate 1 , 14
Lcd "ALM"
Locate 2 , 14
Lcd Alarmeminuto
End If
If Botaohora = 0 And Ajuste = 6 Then
Waitms 300
Alarmehora = Alarmehora + 1
End If
If Botaominuto = 0 And Ajuste = 6 Then
Waitms 300
Alarmehora = Alarmehora - 1
End If
If Botaohora = 0 And Ajuste = 7 Then
Waitms 300
Alarmeminuto = Alarmeminuto + 1
End If
If Botaominuto = 0 And Ajuste = 7 Then
Waitms 300
Alarmeminuto = Alarmeminuto - 1
End If
If Alarmehora = Hora And Alarmeminuto = Minuto Then
Sinal = 1
Waitms 300
Sinal = 0
End If
If Botaoalarme = 0 Then
Waitms 300
Alarmeminuto = Alarmeminuto - 2
End If
If Alarmehora > 24 Then
Alarmehora = 0
End If
If Alarmehora < 0 Then
Alarmehora = 24
End If
If Alarmeminuto >= 60 Then
Alarmeminuto = 0
End If
If Alarmeminuto < 0 Then
Alarmeminuto = 59
End If
If Ano < 16 Then
Ano = 16
End If
If Ano > 36 Then
Ano = 16
End If
If Mes > 12 Then
Mes = 0
End If
If Mes < 0 Then
Mes = 12
End If
If Mes = 1 Then
Limite = 31
End If
If Mes = 3 Then
Limite = 31
End If
If Mes = 5 Then
Limite = 31
End If
If Mes = 7 Then
Limite = 31
End If
If Mes = 8 Then
Limite = 31
End If
If Mes = 10 Then
Limite = 31
End If
If Mes = 12then
Limite = 31
End If
If Mes = 2 Then
Limite = 28
End If
If Mes = 4 Then
Limite = 30
End If
If Mes = 6 Then
Limite = 30
End If
If Mes = 11 Then
Limite = 30
End If
If Mes = 9 Then
Limite = 30
End If
If Botaovetor = 0 Then
Waitms 300
Ajuste = Ajuste + 1
End If
If Ajuste >= 8 Then
Waitms 300
Cls
Ajuste = 1
End If
Loop
Pulso:
Segundo = Segundo + 1
Return
'--------------------
Umas considerações: Os botões são conectados do pino 8 ao 12; O botão do pino 10 vai alternando os ajustes de minuto, hora,dia,meses anos. O pino 8 ajusta para mais e o pino 9 ajusta para menos. O botão do pino 12 ele desliga o alarme previamente configurado para 10 horas, mas pode ser ajustado para o horário que desejar. Devido a um erro no cristal o arduino, nao contabilizo os segundos. Mas os minutos e as horas são contabilizados com uma precisão de erro de 1 minuto a cada 2 semanas. Feito absurdamente incrível para quem não está usando módulo ou biblioteca específico...
E é isso ahe pessoal, nessa imagem vocês podem ver o esquema elétrico. Ta meio bagunçado mas e sacoisa mermo, da pra entender:
E em breve um vídeo dele funcionando, aguardem...
2 comentários:
Muito bom seu relogio,e ja fiz um desse para controlar duas maquinas ,lavadoras industriais,rotacao ,reversao ,e centrifugacao,O Bascom tem um controle de alta precisao,aceita a waitms,e waitus ,para fracao menor de segundo..
Poxa bacana cara. Vi que você e da Abel tecnologia. Sempre quis trabalhar numa empresa seria neste ramo.
Ps:Sou o dono do blog.
Postar um comentário