📄 master-all.c
字号:
#include<all.h>
uchar timeflag,dplay;
uchar tf,flag,fflag;
uint time,needdisplay,disy;
uchar disx;
uchar i=0;
uchar stopflag=0;
sbit beer=P2^4; //蜂鸣器
unsigned char code Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x7f};//数码显示
uint Tab_data[5]={0};//数据池
void displayl(uchar dula,uchar wela )//显示
{
uchar i;
P2=0xff;
i=dula;
P0=Tab[i];
P2=wela;
}
void display(uint num)//显示
{
switch(tf)
{
case 0:displayl(num/100,0xfe);
break;
case 1:displayl((num%100)/10,0xfd);
break;
case 2:displayl(16,0xfb);
break;
case 3:displayl((num%100%10),0xf7);
break;
}
}
void beerring()//蜂鸣器响
{
// if(timeflag%2)beer=~beer;
beer=0;
}
void sendmsg(uchar sbuf)//发指令
{
uchar x;
TI=0;
SBUF=sbuf;
for(x=50;x>>0;x--);
}
void delay5s() //停车5s
{
uint i;
i=time+50;
while(i!=time)
{
display(i-time);
beerring();
}
flag=0x22;
sendmsg(flag);
}
void stoprun()
{
Tab_data[3]=disy;
Tab_data[4]=time;
stopflag=1;
ES=0;
EX1=0;
EX0=1;
}
void stop() //停车
{
uchar u=0;
flag=0x88;
sendmsg(flag);
while(1)
{
// if(!(time%50))
// {
// u++;
// if(u==5)u=0;
// }
// needdisplay=Tab_data[u];
display(Tab_data[4]);
}
}
void main()
{
TMOD=TMOD|0x21;
TH0=0xee;
TL0=0x00;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON=0;
PS=1;
PT0=1;
EA=1;
ET0=1;
ES=1;
PX0=1;
IT0=1;
IT1=1;
EX0=1;
EX1=1;
TR0=1;
TR1=1;
time=0;
timeflag=0;
flag=0x11;
sendmsg(flag);
while(1)
{
if(stopflag==1)stop();
else if(i==0)needdisplay=time;
else if(i<4)needdisplay=i*10;
else if(i==6)needdisplay=time;
display(needdisplay);
// display(Tab_data[i-1]);
if(i==4)
{
flag=0x88;
sendmsg(flag);
delay5s();
i=6;
}
else if(time==900)stoprun();
// {
// flag=0x88;
// sendmsg(flag);
// while(1)stop();
//}
}
while(1);
}
void timer0int() interrupt 1 //定时器中断,系统时间
{
TR0=0;
TH0=0xf6;
TL0=0xf0;
timeflag++;
TR0=1;
if(tf==3)tf=0;
else tf++;
if(timeflag==40)
{
timeflag=0;
time++;
// if(time==901)
// {
//flag=0x88;
// time=time-1;
// }
}
}
void uartint() interrupt 4//通信中断,传输数据
{
TI=0;
while(RI)
{
switch(SBUF)
{
case 0x55:break;
case 0x88:stoprun();
break;
// default:sendmsg(flag);
}
RI=0;
}
}
void intin0() interrupt 0 //外0中断,距离检测
{
disx++;
if(disx==7)
{
disy++;
disx=0;
}
//if(disy==8)disz++;
}
void intin1() interrupt 2 //外1中断,金属检测
{
uchar ja,jb;
ja=disy;
while(INT1==0)beerring();
jb=disy;
Tab_data[i]=(ja+jb)/2;
i++;
if(i==4)
EX1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -