📄 people-counter.c
字号:
#include<pic.h>
#define DIN RB5
#define LOAD RB6
#define CLK RB7
#define P1_1 RA0
#define P1_2 RA3
#define P1_3 RC0
#define P1_4 RC3
#define P1_5 RD0
#define P1_6 RD3
#define P2_1 RA1
#define P2_2 RA4
#define P2_3 RC1
#define P2_4 RC4
#define P2_5 RD1
#define P2_6 RD4
#define P3_1 RA2
#define P3_2 RA5
#define P3_3 RC2
#define P3_4 RC5
#define P3_5 RD2
#define P3_6 RD5
#define key1 RB0
#define key2 RB1
#define key3 RB2
#define key4 RB3
#define alarm RB4
#define on 0
#define off 1
#define uchar unsigned char
#define try_in 1
#define in_middle 2
#define in_room 3
#define try_out 4
#define out_middle 5
#define out_room 6
void display(int n);
void translate();
void ADD(uchar k);
void Writeword(uchar addr,uchar num);
void Sendchar(uchar ch);
void send();
void sciint();
int sum=0;
int max=0;
bank2 unsigned char max_low;
bank2 unsigned char max_hig;
uchar state[6]={0,0,0,0,0,0};
uchar Disbuf[8]={0,0,0,0,0,0,0,0};
uchar Tran_Disbuf[8]={0,0,0,0,0,0,0,0};
uchar D[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
uchar flag1=0;
uchar flag2=0;
uchar flag3=0;
uchar flag4=0;
uchar psend[2]={0,0};
uchar receive;
uchar s;
main()
{
TRISA=0Xff;
TRISB=0X0f;
TRISC=0Xff;
TRISD=0Xff;
alarm=0;
LOAD=1;
CLK=0;
Writeword(0x0b,0x07);//设置扫描界限
Writeword(0x09,0x00);//设置译码模式
Writeword(0x0a,0x0a);//设置亮度
Writeword(0x0c,0x01);//设置为正常工作模式
Writeword(D[0],0x7e);
Writeword(D[1],0x7e);
Writeword(D[2],0x7e);
Writeword(D[3],0x7e);
max_low=eeprom_read(0x01);
max_hig=eeprom_read(0x02);
max=max_hig*100+max_low;
if(max>9999)
max=0;
Disbuf[4]=max%10;
Disbuf[5]=(max/10)%10;
Disbuf[6]=(max/100)%10;
Disbuf[7]=max/1000;
while(1)
{
//---------------------------第一个门-------------------------------
//------------------进门-------------------------------------------
if(P1_1==off&&P2_1==off&&P3_1==off&&(state[0]==try_in||state[0]==in_middle||state[0]==try_out||state[0]==out_middle))
state[0]=0;
if(P1_1==on&&P2_1==off&&P3_1==off&&state[0]==0)
state[0]=try_in;
if(P2_1==on&&state[0]==try_in)
state[0]=in_middle;
if(P3_1==on&&state[0]==in_middle)
state[0]=in_room;
if(P3_1==off&&P2_1==on&&state[0]==in_room)
state[0]=in_middle; //-----------回马枪,虚进----------
if(state[0]==in_room&&P2_1==off&&P3_1==off)
{
sum++;
display(sum);
state[0]=0;
}
//------------------出门-------------------------------------------
if(P3_1==on&&P2_1==off&&P1_1==off&&state[0]==0)
state[0]=try_out;
if(P2_1==on&&state[0]==try_out)
state[0]=out_middle;
if(P1_1==on&&state[0]==out_middle)
state[0]=out_room;
if(P1_1==off&&P2_1==on&&state[0]==out_room)
state[0]=out_middle; //-----------回马枪,虚出----------
if(state[0]==out_room&&P2_1==off&&P1_1==off)
{
sum--;
display(sum);
state[0]=0;
}
//---------------------------第二个门-------------------------------
//------------------进门-------------------------------------------
if(P1_2==off&&P2_2==off&&P3_2==off&&(state[1]==try_in||state[1]==in_middle||state[1]==try_out||state[1]==out_middle))
state[1]=0;
if(P1_2==on&&P2_2==off&&P3_2==off&&state[1]==0)
state[1]=try_in;
if(P2_2==on&&state[1]==try_in)
state[1]=in_middle;
if(P3_2==on&&state[1]==in_middle)
state[1]=in_room;
if(P3_2==off&&P2_2==on&&state[1]==in_room)
state[1]=in_middle; //-----------回马枪,虚进----------
if(state[1]==in_room&&P2_2==off&&P3_2==off)
{
sum++;
display(sum);
state[1]=0;
}
//------------------出门-------------------------------------------
if(P3_2==on&&P2_2==off&&P1_2==off&&state[1]==0)
state[1]=try_out;
if(P2_2==on&&state[1]==try_out)
state[1]=out_middle;
if(P1_2==on&&state[1]==out_middle)
state[1]=out_room;
if(P1_2==off&&P2_2==on&&state[1]==out_room)
state[1]=out_middle; //-----------回马枪,虚出----------
if(state[1]==out_room&&P2_2==off&&P1_2==off)
{
sum--;
display(sum);
state[1]=0;
}
//---------------------------第三个门-------------------------------
//------------------进门-------------------------------------------
if(P1_3==off&&P2_3==off&&P3_3==off&&(state[2]==try_in||state[2]==in_middle||state[2]==try_out||state[2]==out_middle))
state[2]=0;
if(P1_3==on&&P2_3==off&&P3_3==off&&state[2]==0)
state[2]=try_in;
if(P2_3==on&&state[2]==try_in)
state[2]=in_middle;
if(P3_3==on&&state[2]==in_middle)
state[2]=in_room;
if(P3_3==off&&P2_3==on&&state[2]==in_room)
state[2]=in_middle; //-----------回马枪,虚进----------
if(state[2]==in_room&&P2_3==off&&P3_3==off)
{
sum++;
display(sum);
state[2]=0;
}
//------------------出门-------------------------------------------
if(P3_3==on&&P2_3==off&&P1_3==off&&state[2]==0)
state[2]=try_out;
if(P2_3==on&&state[2]==try_out)
state[2]=out_middle;
if(P1_3==on&&state[2]==out_middle)
state[2]=out_room;
if(P1_3==off&&P2_3==on&&state[2]==out_room)
state[2]=out_middle; //-----------回马枪,虚出----------
if(state[2]==out_room&&P2_3==off&&P1_3==off)
{
sum--;
display(sum);
state[2]=0;
}
//---------------------------第四个门-------------------------------
//------------------进门-------------------------------------------
if(P1_4==off&&P2_4==off&&P3_4==off&&(state[3]==try_in||state[3]==in_middle||state[3]==try_out||state[3]==out_middle))
state[3]=0;
if(P1_4==on&&P2_4==off&&P3_4==off&&state[3]==0)
state[3]=try_in;
if(P2_4==on&&state[3]==try_in)
state[3]=in_middle;
if(P3_4==on&&state[3]==in_middle)
state[3]=in_room;
if(P3_4==off&&P2_4==on&&state[3]==in_room)
state[3]=in_middle; //-----------回马枪,虚进----------
if(state[3]==in_room&&P2_4==off&&P3_4==off)
{
sum++;
display(sum);
state[3]=0;
}
//------------------出门-------------------------------------------
if(P3_4==on&&P2_4==off&&P1_4==off&&state[3]==0)
state[3]=try_out;
if(P2_4==on&&state[3]==try_out)
state[3]=out_middle;
if(P1_4==on&&state[3]==out_middle)
state[3]=out_room;
if(P1_4==off&&P2_4==on&&state[3]==out_room)
state[3]=out_middle; //-----------回马枪,虚出----------
if(state[3]==out_room&&P2_4==off&&P1_4==off)
{
sum--;
display(sum);
state[3]=0;
}
//---------------------------第五个门-------------------------------
//------------------进门-------------------------------------------
if(P1_5==off&&P2_5==off&&P3_5==off&&(state[4]==try_in||state[4]==in_middle||state[4]==try_out||state[4]==out_middle))
state[4]=0;
if(P1_5==on&&P2_5==off&&P3_5==off&&state[4]==0)
state[4]=try_in;
if(P2_5==on&&state[4]==try_in)
state[4]=in_middle;
if(P3_5==on&&state[4]==in_middle)
state[4]=in_room;
if(P3_5==off&&P2_5==on&&state[4]==in_room)
state[4]=in_middle; //-----------回马枪,虚进----------
if(state[4]==in_room&&P2_5==off&&P3_5==off)
{
sum++;
display(sum);
state[4]=0;
}
//------------------出门-------------------------------------------
if(P3_5==on&&P2_5==off&&P1_5==off&&state[4]==0)
state[4]=try_out;
if(P2_5==on&&state[4]==try_out)
state[4]=out_middle;
if(P1_5==on&&state[4]==out_middle)
state[4]=out_room;
if(P1_5==off&&P2_5==on&&state[4]==out_room)
state[4]=out_middle; //-----------回马枪,虚出----------
if(state[4]==out_room&&P2_5==off&&P1_5==off)
{
sum--;
display(sum);
state[4]=0;
}
//---------------------------第六个门-------------------------------
//------------------进门-------------------------------------------
if(P1_6==off&&P2_6==off&&P3_6==off&&(state[5]==try_in||state[5]==in_middle||state[5]==try_out||state[5]==out_middle))
state[5]=0;
if(P1_6==on&&P2_6==off&&P3_6==off&&state[5]==0)
state[5]=try_in;
if(P2_6==on&&state[5]==try_in)
state[5]=in_middle;
if(P3_6==on&&state[5]==in_middle)
state[5]=in_room;
if(P3_6==off&&P2_6==on&&state[5]==in_room)
state[5]=in_middle; //-----------回马枪,虚进----------
if(state[5]==in_room&&P2_6==off&&P3_6==off)
{
sum++;
display(sum);
state[5]=0;
}
//------------------出门-------------------------------------------
if(P3_6==on&&P2_6==off&&P1_6==off&&state[5]==0)
state[5]=try_out;
if(P2_6==on&&state[5]==try_out)
state[5]=out_middle;
if(P1_6==on&&state[5]==out_middle)
state[5]=out_room;
if(P1_6==off&&P2_6==on&&state[5]==out_room)
state[5]=out_middle; //-----------回马枪,虚出----------
if(state[5]==out_room&&P2_6==off&&P1_6==off)
{
sum--;
display(sum);
state[5]=0;
}
//------------------按键扫描-------------------------------------------
if(flag1==0&&key1==1)
{ADD(4);
flag1=1;
}
if(flag1==1&&key1==0)
flag1=0;
if(flag2==0&&key2==1)
{ADD(5);
flag2=1;
}
if(flag2==1&&key2==0)
flag2=0;
if(flag3==0&&key3==1)
{ADD(6);
flag3=1;
}
if(flag3==1&&key3==0)
flag3=0;
if(flag4==0&&key4==1)
{ADD(7);
flag4=1;
}
if(flag4==1&&key4==0)
flag4=0;
//--------------------警报-------------------------------------
max=Disbuf[7]*1000+Disbuf[6]*100+Disbuf[5]*10+Disbuf[4];
max_hig=max/100;
max_low=max%100;
eeprom_write(0x01,max_low);
eeprom_write(0x02,max_hig);
if(sum>=max)
alarm=1;
else
alarm=0;
}
}
//-------------------显示子程序-------------------------------------
void display(int n)
{
if(n>=10000)
n=9999;
Disbuf[0]=n%10;
Disbuf[1]=(n/10)%10;
Disbuf[2]=(n/100)%10;
Disbuf[3]=(n/1000)%10;
translate();
Writeword(D[0],Tran_Disbuf[3]);
Writeword(D[1],Tran_Disbuf[2]);
Writeword(D[2],Tran_Disbuf[1]);
Writeword(D[3],Tran_Disbuf[0]);
}
void translate()
{ int i;
for(i=0;i<8;i++)
{ switch(Disbuf[i])
{ case 0:
{ Tran_Disbuf[i]=0x7e;
break;
}
case 1:
{ Tran_Disbuf[i]=0x30;
break;
}
case 2:
{ Tran_Disbuf[i]=0x6d;
break;
}
case 3:
{ Tran_Disbuf[i]=0x79;
break;
}
case 4:
{ Tran_Disbuf[i]=0x33;
break;
}
case 5:
{ Tran_Disbuf[i]=0x5b;
break;
}
case 6:
{ Tran_Disbuf[i]=0x5f;
break;
}
case 7:
{ Tran_Disbuf[i]=0x70;
break;
}
case 8:
{ Tran_Disbuf[i]=0x7f;
break;
}
case 9:
{ Tran_Disbuf[i]=0x7b;
break;
}
default:break;
}
}
}
void Writeword(uchar addr,uchar num)
{
LOAD=0;
asm("nop");
Sendchar(addr);
asm("nop");
Sendchar(num);
asm("nop");
LOAD=1;
}
void Sendchar(uchar ch)
{
uchar j,temp;
asm("nop");
for(j=0;j<8;j++)
{
temp=ch&0x80;
ch=ch<<1;
if(temp)
{ DIN=1;
CLK=0;
CLK=1;
}
else
{ DIN=0;
CLK=0;
CLK=1;
}
}
}
void ADD(uchar k)
{
int tmp;
tmp=Disbuf[k]++;
if(tmp>=10)
Disbuf[k]=0;
translate();
Writeword(D[k],Tran_Disbuf[11-k]);
}
void send()//----------------------------发送数据----------------------------
{
sciint();
di();//------------------------------中断禁止------------------------------
psend[0]=sum%100;
psend[1]=sum/100;
CREN=1;
TXEN=1;
while(1)
{
if(RCIF==1)
break;
}
receive=RCREG;
if(receive==0xff)
for(s=0;s<2;s++)
{
TXREG=psend[s];
while(1)
{
if(TXIF==1)
break;
}
while(1)
{
if(RCIF==1)
break;
}
RCREG=RCREG;
}
}
void sciint()//-------------------初始化程序---------------------------
{
SPBRG=0X19;
TXSTA=0X04;
RCSTA=0X80;
TRISC6=1;
TRISC7=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -