Vous êtes sur la page 1sur 8

#include <16f877a.

h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,PUT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7,stream=com_1)

char
map[31]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x92,0x86,
0x87,0xc1,0x8c,0xe1,0xc0,0xc8,0x86,0xc1,0x88,0x92,0x87,0xa1,0xc8,0x83,0xc0
,0x8c,0xc7,0xcf};
int8 DD1=0, DD2=0, DD3=0, DD4=0 ,A1=0, A2=0,A3=0,A4=0;
//7SEG VARIABLE
int D1,D2,D3,D4,reset=0,sw=0,c=0,setcount=0,upselect=0;
int ent=0,set=0,down=0,up=0,PS,SI,f1,f11=0,f12=0,f13=0,f14=0,f15=0;

void function(int,int,int,int); //7SEGMENT FUNCTION

#int_EXT //PROXIMITY SENSOR INTERUPT


void EXT_isr(void)
{
c++;
if(c==1) //VARIABLE TO START THE SEG FROM 0000
{
DD1=0; DD2=0; DD3=0; DD4=0;
}
if(DD1<10)
{
DD1++;
}
if(DD1==10)
{
DD1=0;
DD2++;
}
if(DD2==10)
{
DD2=0;
DD3++;
}
if(DD3==10)
{
DD3=0;
DD4++;
}
if(DD4==10)
{
DD4=0;
}
function(DD1,DD2,DD3,DD4);
D1=read_eeprom(0X00);
D2=read_eeprom(0X10);
D3=read_eeprom(0X20);
D4=read_eeprom(0X30);
A1=DD1;
A2=DD2;
A3=DD3;
A4=DD4;

PS=(DD4*1000)+(DD3*100)+(DD2*10)+(DD1*1);
SI=(D4*1000)+(D3*100)+(D2*10)+(D1*1);
if(PS==SI) //COMPARING THE SAVED DATA AND THE PROXIMITY INPUT
{
output_high(PIN_C5); //CONTROL OF MOTOR when count reaches its limit
delay_ms(100);
}

clear_interrupt(INT_EXT);
}

#INT_RDA //UART INTERUPT()


void RDA_isr(void)
{
f1=getc(com_1); //RECEIVING DATA

if(f1=='a')
{
f11=1;
}
if(f1=='A')
{
f11=2;
}
if(f1=='b')
{
f12=1;
}
if(f1=='B')
{
f12=2;
}
if(f1=='c')
{
f13=1;
}
if(f1=='C')
{
f13=2;
}
if(f1=='d')
{
f14=1;
}
if(f1=='D')
{
f14=2;
}
if(f1=='e')
{
f15=1;
}
if(f1=='E')
{
f15=2;
}
clear_interrupt(INT_RDA );
}

void main()
{
port_b_pullups(TRUE);
enable_interrupts(global); //GIE=1
enable_interrupts(INT_EXT); //INTE=1
enable_interrupts(INT_RDA);
ext_int_edge(H_TO_L);
enable_interrupts(global);

while(1)
{

if(f11==1)
{
DD1=25; DD2=24; DD3=23; DD4=10;
f12=0; f13=0; f14=0; f15=0;
function(DD1,DD2,DD3,DD4);
output_high(pin_C0);
}

if(f12==1)
{
DD1=23; DD2=27; DD3=26; DD4=10;
f11=0; f13=0; f14=0; f15=0;
function(DD1,DD2,DD3,DD4);
output_high(pin_C0);
}
if(f13==1)
{
DD1=28; DD2=27; DD3=23; DD4=10;
f11=0; f12=0; f14=0; f15=0;
function(DD1,DD2,DD3,DD4);
output_high(pin_C0);

}
if(f14==1)
{
DD1=29; DD2=24; DD3=25; DD4=10;
f11=0; f12=0; f13=0; f15=0;
function(DD1,DD2,DD3,DD4);
output_high(pin_C0);
}

if(f15==1) {
DD1=29; DD2=30; DD3=27; DD4=10;
f11=0; f12=0; f13=0; f14=0;
function(DD1,DD2,DD3,DD4);
output_high(pin_C0);
}

if(f11==2 || f12==2 || f13==2 || f14==2 || f15==2)


{
f11=2;
f12=2;
f13=2;
f14=2;
f15=2;
DD1=A1; DD2=A2; DD3=A3; DD4=A4;
// f12=0; f13=0; f14=0; f15=0;
function(DD1,DD2,DD3,DD4);
output_low(pin_C0);
}

if(!input(PIN_A0)) //SET
{
setcount++;
if(setcount>=3)
{
set++;
}
}

if(!input(PIN_E0)) //up
{
up=1;

if(!input(PIN_E1)) //down
{
down=1;

if(!input(PIN_E2)) //reset
{

setcount=0;
set=0;
DD1=0;DD2=0;DD3=0;DD4=0;up=0;down=0;ent=0;upselect=0,c=0;
}

if(setcount<=2)
{
switch(setcount)
{
case 1: if(up==0 && down==0)
{
DD1=13;DD2=12;DD3=11;DD4=10; //SET Display
}
if(up==1 && down==0)
{
DD1=10;DD2=15;DD3=14;DD4=10; //UP Display
upselect=1;
}
if(up==0 && down==1)
{
DD1=18;DD2=17;DD3=16;DD4=10; //DOWN Display
upselect=1;
}
function(DD1,DD2,DD3,DD4);
break;
case 2: if(upselect==1)
{
up=0;
DD1=0;DD2=0;DD3=0;DD4=0;
//set=1;
}
break;} }

switch(set)
{
case 1: if(up==0 && ent==0)
{
DD1=10;
}
else if(up==1)
{
if(DD1<=9)
{
DD1++;
}
if(DD1>9)
{
DD1=0;
}
ent=1;
up=0;
}
function(DD1,DD2,DD3,DD4);
break;
case 2: if(ent==0)
{
DD1=0;
ent=1;
}
if(up==0 && ent==1)
{
DD2=10;
}
if(up==1)
{
if(DD2<=9)
{
DD2++;
}
if(DD2>9)
{
DD2=0;
}
ent=2;
up=0;
sw=2;
}
function(DD1,DD2,DD3,DD4);
break;
case 3: if(ent==1)
{
DD2=0;
ent=2;
}
if(up==0 && ent==2)
{
DD3=10;
}
if(up==1)
{
if(DD3<=9)
{
DD3++;
}
if(DD3>9)
{
DD3=0;
}
ent=3;
up=0;
sw=3;
}
function(DD1,DD2,DD3,DD4);
break;
case 4: if(ent==2)
{
DD3=0;
ent=3;
}
if(up==0 && ent==3)
{
DD4=10;
}
if(up==1)
{
if(DD4<=9)
{
DD4++;
}
if(DD4>9)
{
DD4=0;
}
ent=4;
up=0;
sw=4;
}
function(DD1,DD2,DD3,DD4);
break;
case 5: if(ent==3)
{
DD4=0;
ent=4;
function(DD1,DD2,DD3,DD4);
}
if(c==0)
{
write_eeprom (0x00,DD1);
write_eeprom (0x10,DD2);
write_eeprom (0x20,DD3);
write_eeprom (0x30,DD4);
}
setcount++;
break;
case 6: if(c==0)
{
DD1=19;DD2=20;DD3=21;DD4=22;
function(DD1,DD2,DD3,DD4);
}
break;} }}

void function(int DD1,int DD2,int DD3,int DD4) //7SEGMENT FUNCTION


{
output_d(0xff);
output_d(map[DD1]);
output_high(PIN_C4);
delay_ms(70);
output_low(PIN_C4);

output_d(map[DD2]);
output_high(PIN_C3);
delay_ms(70);
output_low(PIN_C3);

output_d(map[DD3]);
output_high(PIN_C2);
delay_ms(70);
output_low(PIN_C2);

output_d(map[DD4]);
output_high(PIN_C1);
delay_ms(70);
output_low(PIN_C1);}

Vous aimerez peut-être aussi