Alarme de tempo (picbasic pro, PIC16F877, pcf8583)

sábado, 24 de outubro de 2009 0 comentários

 alarm-saat-picbasic-pro-pic16f877-pcf8583
Tempo para a criação: o botão SET. 00 faixas do lado esquerdo e com o tempo determinado pelo botão MODE depois de definir o botão MODE com atlayın.Saati minutos e durante os meses e as configurações anos fazem-dia. Sair no final do modo de configuração, pressione SET.

Nota: [00] mode é para acertar o relógio. [01] e [10] entre os modos de o alarme é destinado a SET.

abertura Kululması do alarme: Pressione o botão SET. Suportes para o 1 alarme para 1, 10 Defina o alarme para a 10 ». Botão MODE e hora, minuto, dia, mês, ano com as configurações e ver o botão SET e gravar.

Alamlarının Desligando: Pressione o botão SET. Suportes para o 1 alarme para o encerramento dos 11 `e 10 a «programar o alarme para desligar 20. Botão MODE e hora, minuto, dia, mês, ano com as configurações e salvá-lo, pressionando o SET

O cancelamento do Relógio One-Touch: o alarme, se você tiver aberto na tela do tempo normal, prima uma das Aumentar ou diminuir o alarme desligado para impressão.

Implementação de um despertador e isis proteus picbasic pro arquivo: despertador-picbasic-pro-PIC16F877-pcf8583.ZIP

Isis diagrama do circuito de um despertador
 picbasic-pro-pic16f877-pcf8583
ALRM-SAAT.bas conteúdo do software
'****************************************************************
'* Name : ALARM-SAAT.BAS *
'* Author : [ETE] *
'* Notice : Copyright (c) 2005 [ETE] *
'* : All Rights Reserved *
'* Date : 11.05.2005 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************

'INCLUDE "modedefs.bas"
@ DEVICE pic16F877 'işlemci 16F877
@ DEVICE pic16F877, WDT_on 'Watch Dog timer AÇIK
@ DEVICE pic16F877, PWRT_ON 'Power on timer açık
@ DEVICE pic16F877, PROTECT_OFF 'Kod KORUMA kapalı
@ DEVICE pic16F877, HS_OSC 'HS osilatör kullanılacak
'------------------------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 2 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
'------------------------------------------------------------------------------
Define osc 10
ADCON1=7 'ADC GİRİŞLERİ DİGİTAL
OPTION_REG.7=1 'Dahili pull-up lar iptal edildi
PortA=0
TrisA=101111
PortB=0
TrisB=000010
PORTD=0
TRISD=0
PORTC=0
TRISC=0
'------------------------------------------------------------------------------
SYMBOL SET=PORTA.0
SYMBOL MODE=PORTA.1
SYMBOL DOWN=PORTA.2
SYMBOL UP=PORTA.3
Symbol SCL=PORTB.0
SYMBOL SDA=PORTB.1
SYMBOL ISIK=PORTC.0
symbol BUZER=PORTC.1
SIMDI VAR WORD
ZAMAN VAR WORD
SN var byte
Y_SN VAR BYTE
DAK var byte
Y_DAK VAR BYTE
ESKIDAK VAR BYTE
SAAT var byte
Y_SAAT VAR BYTE
GUN VAR BYTE
Y_GUN VAR BYTE
HGUN VAR BYTE 'HAFTANIN GÜNÜ
Y_HGUN var byte
AY var byte
Y_AY VAR BYTE
YIL var BYTE
Y_YIL VAR BYTE
ESKYIL VAR BYTE
TAMYIL var BYTE
TEMP VAR BYTE
ARA VAR BYTE
ONLAR VAR BYTE
BIRLER VAR BYTE
SURE VAR BYTE
SIRA VAR BYTE
YER VAR BYTE
AKTIFA VAR BYTE
AKTIFB VAR BYTE
LED var byte
'------------------------------------------------------------------------------
LCDOUT $FE,$68,$0E,$11,$10,$10,$10,$15,$0E,$4 'Ç dataları Numarası 5
LCDOUT $FE,$70,$00,$0E,$10,$0E,$02,$1C,$0C,$00 'ş dataları NUMARSI 6 DİR
LCDOUT $FE,$78,$0,$0,$0C,$4,$4,$4,$e,$0 'ı dataları NUMARSI 7 DİR
clear
lcdout $FE,1
PAUSE 200
SURE=180
'WRITE 0,255
READ 0,TAMYIL
IF TAMYIL=255 THEN
TAMYIL=8
WRITE 0,TAMYIL
ENDIF
READ 2,SIRA
IF SIRA=255 THEN
SIRA=1:WRITE 2,SIRA
ENDIF
Y_SN=0
rEAD 5,AKTIFA
READ 6,AKTIFB
IF AKTIFA=255 THEN
AKTIFA=0:WRITE 5,AKTIFA:PAUSE 10
ENDIF

IF AKTIFB=255 THEN
AKTIFB=0:WRITE 6,AKTIFB:PAUSE 10
ENDIF

'------------------------------------------------------------------------------
'------------------------------------------------------------------------------

BASLA: 'PAUSE 100
GOSUB SAAT_OKU
GOSUB EKRAN
PAUSE 200
IF PORTD>0 or (PORTC & %11000000)>63 then
IF UP=0 or DOWN=0 then
PORTC=0:PORTD=0
ENDIF
endif
IF SET=0 THEN AYAR
IF (ESKIDAK=DAK) THEN TEKRAR
ESKIDAK=DAK
GOSUB ALARM_KONTROL
PORTD=AKTIFA:PORTC=AKTIFB
TEKRAR:
GOTO BASLA

'-------------------------ALT PROGRAMLAR---------------------------------------
AYAR: YER=0:ISIK=0
lcdout $FE,$0E
GOSUB SAAT_OKU
Y_DAK=DAK
Y_SAAT=SAAT
Y_GUN =GUN
Y_HGUN=HGUN
Y_AY =AY
Y_YIL =YIL
GOSUB EKRAN1
WHILE SET=0
WEND
PAUSE SURE

SIRA_BELIRLE:
IF MODE=0 THEN HOURA
IF SET=0 THEN SONA
IF UP=0 THEN
YER=YER+1
IF YER=21 THEN YER=20
ENDIF
IF DOWN=0 THEN
YER=YER-1
IF YER=255 THEN YER=0 'SIRA=0 İSE GERÇEK ZAMAN SAATİ 8583'E KAYIT EDİLECEK
ENDIF
IF YER>0 THEN GOSUB ALARM_OKU
GOSUB EKRAN1:LCDOUT $FE,$82 'SIRA>0 İSE ALARM EEPROME KAYIT EDİLECEK.
PAUSE SURE
GOTO SIRA_BELIRLE

HOURA: WHILE MODE=0
WEND
HOUR:
IF MODE=0 THEN MINA
IF SET=0 THEN SONA
IF UP=0 THEN

Y_SAAT=Y_SAAT+1
IF Y_SAAT=24 THEN Y_SAAT=0
ENDIF

IF DOWN=0 THEN
Y_SAAT=Y_SAAT-1
IF Y_SAAT=255 THEN Y_SAAT=23
ENDIF
GOSUB EKRAN1:LCDOUT $FE,$86
PAUSE SURE
GOTO HOUR

MINA: WHILE MODE=0
WEND

MINUTE:IF MODE=0 THEN TAKA
IF SET=0 THEN SONA
IF UP=0 THEN
Y_DAK=Y_DAK+1
IF Y_DAK=60 THEN Y_DAK=0
ENDIF
IF DOWN=0 THEN
Y_DAK=Y_DAK-1
IF Y_DAK=255 THEN Y_DAK=59
ENDIF
GOSUB EKRAN1:LCDOUT $FE,$89
PAUSE SURE
GOTO MINUTE

TAKA: WHILE MODE=0
WEND
TAKVIM:
IF MODE=0 THEN AYA
IF SET=0 THEN SONA
IF UP=0 THEN
Y_GUN=Y_GUN+1
IF Y_GUN=32 THEN Y_GUN=1
ENDIF
IF DOWN=0 THEN
Y_GUN=Y_GUN-1
IF Y_GUN=0 THEN Y_GUN=31
ENDIF
GOSUB EKRAN1:LCDOUT $FE,$C1
PAUSE SURE
GOTO TAKVIM

AYA: WHILE MODE=0
WEND
MONTH:
IF MODE=0 THEN YILA
IF SET=0 THEN SONA
IF UP=0 THEN
Y_AY=Y_AY+1
IF Y_AY=13 THEN Y_AY=1
ENDIF
IF DOWN=0 THEN
Y_AY=Y_AY-1
IF Y_AY=0 THEN Y_AY=12
ENDIF
GOSUB EKRAN1:LCDOUT $FE,$C4
PAUSE SURE
GOTO MONTH

YILA: WHILE MODE=0
WEND
YEAR: IF MODE=0 THEN GUNA
IF SET=0 THEN SONA
IF UP=0 THEN
Y_YIL=Y_YIL+1
IF Y_YIL=100 THEN Y_YIL=0
ENDIF
IF DOWN=0 THEN
Y_YIL=Y_YIL-1
IF Y_YIL=0 THEN Y_YIL=99
ENDIF
GOSUB EKRAN1:LCDOUT $FE,$C7
PAUSE SURE
GOTO YEAR

GUNA: WHILE MODE=0
WEND
HAFGUN:IF MODE=0 THEN SONA
IF SET=0 THEN SONA
IF UP=0 THEN
Y_HGUN=Y_HGUN+1
IF Y_HGUN=8 THEN Y_HGUN=1
ENDIF
IF DOWN=0 THEN
Y_HGUN=Y_HGUN-1
IF Y_HGUN=255 THEN Y_HGUN=7
ENDIF
GOSUB EKRAN1:LCDOUT $FE,$CA
PAUSE SURE
GOTO HAFGUN

SONA:IF YER=0 THEN KAYIT
GOSUB ALARM_KAYIT
GOTO BASLA
'-------------------------------------------------------------------------------
EKRAN:
LCDOUT $FE,2," "
LCDOUT DEC2(SAAT),":",DEC2(DAK),":", dec2(SN)," "
' LCDOUT DEC2 (SAAT),":",DEC2 (DAK)," S=",DEC2 SIMDI,"Z=",DEC2 ZAMAN
LCDOUT $FE,192,dec2(GUN),"-",dec2(AY),"-",dec2(YIL+TAMYIL)
ARA=HGUN
DORT: select case ARA
case 1
lcdout $fe,$c9,"Pazar "
case 2
lcdout $fe,$c9,"Pazrtsi"
case 3
lcdout $fe,$c9,"Sal",7," "
case 4
lcdout $fe,$c9,5,"ar",6,"amb"
case 5
lcdout $fe,$c9,"Per",6,"emb"
case 6
lcdout $fe,$c9,"Cuma "
case 7
lcdout $fe,$c9,"Cumarts"
end select
RETURN

EKRAN1: 'BU EKRAN SAAT AYARINDA KULLANILAN İLK EKRAN
LCDOUT $FE,2,"[",dec2 YER,"]"
LCDOUT $FE,$0C," "
LCDOUT DEC2(Y_SAAT),":",DEC2(Y_DAK),":", DEC2(SN)
LCDOUT $FE,192,dec2(Y_GUN),"-",dec2(Y_AY),"-",dec2(Y_YIL+TAMYIL) ,$FE,$0E
ARA=Y_HGUN
GOTO DORT

'-------------------------------------------------------------------------------
KAYIT:WHILE set=0
wend
LCDOUT $FE,$0C 'REG_2 'SANIYE <0:5>
TEMP=Y_YIL+TAMYIL 'REG_3 'DAKİKA <0:5>
TAMYIL=4*(TEMP/4 ) 'REG_4 'SAAT <0:5>
Y_YIL=TEMP-TAMYIL 'REG_5 'GUN <0:5> ; YIL <6:7>
WRITE 0,TAMYIL 'REG_6 'AY <0:4> ; HAFTANIN GUNU <5:7>

DAKHESAP:
TEMP=Y_DAK:GOSUB HESAP
Y_DAK=ONLAR+BIRLER

SAATHESAP:
TEMP=Y_SAAT:GOSUB HESAP
Y_SAAT=ONLAR+BIRLER
IF TEMP>12 THEN Y_SAAT.6=1

GUNHESAP:
TEMP=Y_GUN:GOSUB HESAP
Y_YIL=Y_YIL<<6
Y_GUN=Y_YIL+ONLAR+BIRLER

AYHESAP:
TEMP=Y_AY:GOSUB HESAP
Y_HGUN=Y_HGUN<<5
Y_AY=Y_HGUN + ONLAR + BIRLER

I2CWRITE SDA,SCL,160,2,[Y_SN,Y_DAK,Y_SAAT,Y_GUN,Y_AY]
GOSUB SAAT_OKU
lcdout $fe,1
GOTO BASLA
HESAP:
ARA=(TEMP/10)
ONLAR=ARA<<4 BIRLER=TEMP-(ara*10) RETURN '-------------------------------------------------------------------------------

SAAT_OKU:ESKYIL=YIL I2CREAD SDA,SCL,161,2,[SN,DAK,SAAT,GUN,AY] YIL.1=GUN.7 YIL.0=GUN.6 IF ESKYIL=3 AND YIL=0 THEN TAMYIL=TAMYIL+4 WRITE 0,TAMYIL ENDIF TEMP=AY HGUN=TEMP>>5
SN=SN&111111
TEMP=DAK:gosub BUL:DAK=TEMP
TEMP=SAAT&111111:GOSUB BUL:SAAT=TEMP
TEMP=GUN&111111:GOSUB CEVIR:GUN=TEMP
TEMP=AY&011111:GOSUB IKI:AY=TEMP
RETURN

CEVIR:
ONLAR=TEMP & 48
UC: ONLAR=(onlar>>4)*10
BIR: BIRLER=TEMP & %1111
TEMP=ONLAR+BIRLER
RETURN
BUL:ONLAR=(TEMP>>4)*10
GOTO BIR
IKI: ONLAR=ay & 16
GOTO UC

'-------------------------------------------------------------------------------
ALARM_KONTROL: '------------------Alarm açma kontrolu--------------------------
SIMDI=YIL+AY+GUN+SAAT+DAK
YER=1
GOSUB ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | 000001
YER=2
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | 000010
YER=3
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | 000100
YER=4
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | 001000
YER=5
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | 010000
YER=6
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | 100000
YER=7
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | %01000000
YER=8
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD | %10000000
YER=9
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTC | %01000000
YER=10
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTC | %10000000

'--------------------ALARM KAPATMA KONTROLU ----------------------------------
YER=11
GOSUB ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %11111110
YER=12
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %11111101
YER=13
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %11111011
YER=14
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %11110111
YER=15
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %11101111
YER=16
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %11011111
YER=17
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %10111111
YER=18
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTD & %01111111
YER=19
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTC & %10111111
YER=20
gosub ALARM_OKU
IF SIMDI=ZAMAN THEN PORTD=PORTC & %01111111
IF (PORTD=AKTIFA) AND (PORTC=AKTIFB) THEN CIK
AKTIFA=PORTD:AKTIFB=PORTC
WRITE 5,AKTIFA:PAUSE 10:WRITE 6,AKTIFB:PAUSE 10
CIK: RETURN

ALARM_KAYIT:
IF YER>SIRA THEN
WRITE 2,YER:PAUSE 10
ENDIF
temp=yer*8
WRITE TEMP,Y_SAAT:PAUSE 10
WRITE TEMP+1,Y_DAK:PAUSE 10
WRITE TEMP+2,Y_GUN:PAUSE 10
WRITE TEMP+3,Y_AY :P AUSE 10
WRITE TEMP+4,Y_YIL:PAUSE 10
RETURN

ALARM_OKU:
temp=yer*8
READ TEMP,Y_SAAT:IF Y_SAAT>23 THEN Y_sAAT=0
READ TEMP+1,Y_DAK:IF Y_DAK>59 THEN Y_DAK=0
READ TEMP+2,Y_GUN:IF Y_GUN>31 THEN y_GUN=1
READ TEMP+3,Y_AY :IF Y_AY>12 THEN Y_AY=1
READ TEMP+4,Y_YIL:IF Y_YIL>99 THEN Y_YIL=0
ZAMAN=Y_YIL+Y_AY+Y_GUN+Y_SAAT+Y_DAK
RETURN

end
Share this article :

Postar um comentário

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. kvolts - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger