luckstar1
Üye
- Katılım
- 31 Mar 2012
- Mesajlar
- 16
- Puanları
- 1
arkadaşlar c+ ile yazılmış bir programım var fakat bn bunu galıştırmek istiyorum devreyi biraz değiştirerek bilgisayar ontrollu olsun istiyorum vısual basic ile bı arayuz hazırlayacığım.devre role kontrolu için yapılmış bir devre 3devrede 3 adet role bulunmakta bu roleler açıldığını ve kapandığını bılgısayardan gormek istiyorum aynı zamanda acıksa kapatmak,kapalıysa açmak istiyorum bu şekılde bı program yapmama yardımcı olurmusunuz c ile. programı verebılırım üzerine ekleme yaparsanız sevinirim..
// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi
// CM8870'in Q1-Q4 cikislari PIC16F84A'nin RB0-RB3 pinlerine baglidir.
// StD ucu RB4'e baglidir. Hat acma rolesi RA1'e baglidir.
// Sifre onay LED'i RA2'ye baglidir.
// Zil calma sayisi icin pals devresi RA1'e baglidir.
// Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7'ye baglidir.
#include <pic.h>
#include <delay.c>
#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0
// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);
unsigned char kontrol=0;
unsigned int CX;
//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){
CX++;
if(CX>15000)kontrol=1;
T0IF=0; // bayragi temizle
TMR0=131;
}
//----------------------------------------------------------
//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){
unsigned char i,komut,sifre[5],sayac;
//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------
PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk
//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------
// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);
basla:
sayac=0; CX=0;
for(;{ // zil sayisi belirleme dongusu
while(PALS==1);
sayac++;
if(sayac>50){ // Zil sayisi 2
HAT_ROLE=1; // Hatti ac
sifreoku:
for(i=0;i<5;i++){ // sifreyi al
//--------------------------------------
kontrol=0;
TMR0=131; //
T0IE=1; // TIMER ON
//--------------------------------------
while(StD==0){ // tusa basilmadi ise bekle
if(kontrol==1){ // sure>15s ise hatti kapat
HAT_ROLE=0; goto basla; // basa don
}
else {};
}
T0IE=0; CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla
// Boylece yeni bir 15s'lik ek sure kazanilmis olur
sifre=PORTB&0x0F; // sifreyi oku
while(StD==1); // tus basili ise bekle
}
//--------------------------------------
// sifrenin son hanesi * olmalidir
//--------Sifre konrol------------------
if(sifre[0]==1 && sifre[1]==2 && sifre[2]==3 && sifre[3]==4 && sifre[4]==11){
// 11 degeri tus takimindaki * tusuna karsilik gelir.
LED=1; // sifre dogru ise LED'i yak
for(;{
while(StD==0); // cihazlar icin komut bekle
komut=PORTB&0x0F;
if(komut==1)RB5=1; // cihaz 1 ON
if(komut==2)RB6=1;
if(komut==3)RB7=1;
if(komut==4)RB5=0; // cihaz 1 OFF
if(komut==5)RB6=0;
if(komut==6)RB7=0;
if(komut==12){ // # tusuna basildi ise hatti kapat
HAT_ROLE=0; LED=0; goto basla;
// Cihazlarin ON/OFF durumlari degismeden kalir.
}
}
//--------------------------------------
}
else{
goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
}
}
else{ // sayac<50 ise
while(PALS==0);
}
} // for dongusu
}
Program bu arkadaşlar yardımlarınızı eksin görmeyin düşüncelerinizi yazın hiç değilse..
// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi
// CM8870'in Q1-Q4 cikislari PIC16F84A'nin RB0-RB3 pinlerine baglidir.
// StD ucu RB4'e baglidir. Hat acma rolesi RA1'e baglidir.
// Sifre onay LED'i RA2'ye baglidir.
// Zil calma sayisi icin pals devresi RA1'e baglidir.
// Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7'ye baglidir.
#include <pic.h>
#include <delay.c>
#define StD RB4
#define HAT_ROLE RA1
#define LED RA2
#define PALS RA0
// 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);
unsigned char kontrol=0;
unsigned int CX;
//----------------------------------------------------------
// Timer alt programi
// 15 saniye suresince tusa basilmadiysa hatti kapatmak icin
//----------------------------------------------------------
void interrupt kesme(void){
CX++;
if(CX>15000)kontrol=1;
T0IF=0; // bayragi temizle
TMR0=131;
}
//----------------------------------------------------------
//----------------------------------------------------------
// ANA PROGRAM
//----------------------------------------------------------
main(void){
unsigned char i,komut,sifre[5],sayac;
//----------------------------------------------------------
// Port konfigurasyonu
//----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris
TRISA=0x01; // RA0 giris digerleri cikis
//----------------------------------------------------------
PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk
//-------------------------------------------------------------
//Timer islemleri (kesme suresi=1ms)
//-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle
//-------------------------------------------------------------
// resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);
basla:
sayac=0; CX=0;
for(;{ // zil sayisi belirleme dongusu
while(PALS==1);
sayac++;
if(sayac>50){ // Zil sayisi 2
HAT_ROLE=1; // Hatti ac
sifreoku:
for(i=0;i<5;i++){ // sifreyi al
//--------------------------------------
kontrol=0;
TMR0=131; //
T0IE=1; // TIMER ON
//--------------------------------------
while(StD==0){ // tusa basilmadi ise bekle
if(kontrol==1){ // sure>15s ise hatti kapat
HAT_ROLE=0; goto basla; // basa don
}
else {};
}
T0IE=0; CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla
// Boylece yeni bir 15s'lik ek sure kazanilmis olur
sifre=PORTB&0x0F; // sifreyi oku
while(StD==1); // tus basili ise bekle
}
//--------------------------------------
// sifrenin son hanesi * olmalidir
//--------Sifre konrol------------------
if(sifre[0]==1 && sifre[1]==2 && sifre[2]==3 && sifre[3]==4 && sifre[4]==11){
// 11 degeri tus takimindaki * tusuna karsilik gelir.
LED=1; // sifre dogru ise LED'i yak
for(;{
while(StD==0); // cihazlar icin komut bekle
komut=PORTB&0x0F;
if(komut==1)RB5=1; // cihaz 1 ON
if(komut==2)RB6=1;
if(komut==3)RB7=1;
if(komut==4)RB5=0; // cihaz 1 OFF
if(komut==5)RB6=0;
if(komut==6)RB7=0;
if(komut==12){ // # tusuna basildi ise hatti kapat
HAT_ROLE=0; LED=0; goto basla;
// Cihazlarin ON/OFF durumlari degismeden kalir.
}
}
//--------------------------------------
}
else{
goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git
}
}
else{ // sayac<50 ise
while(PALS==0);
}
} // for dongusu
}
Program bu arkadaşlar yardımlarınızı eksin görmeyin düşüncelerinizi yazın hiç değilse..