📄 xssy.c
字号:
#include <REG54.H>
#include <absacc.h>
#define unchar unsigned char
#define unint unsigned int
//定义地址
//定义p8155
unchar xdata p8155con _at_ 0x7ff8;
unchar xdata p8155a _at_ 0x7ff9;
unchar xdata p8155b _at_ 0x7ffa;
unchar xdata p8155c _at_ 0x7ffb;
unint xdata p8155ram[100] _at_ 0x7e00;
//
//定义8253
unchar xdata p8253_0_con _at_ 0xefff;//p24
unchar xdata p8253_0_0 _at_ 0xeffc;
unchar xdata p8253_0_1 _at_ 0xeffd;
unchar xdata p8253_0_2 _at_ 0xeffe;
unchar xdata p8253_1_con _at_ 0xdfff;//p25
unchar xdata p8253_1_0 _at_ 0xdffc;
unchar xdata p8253_1_1 _at_ 0xdffd;
unchar xdata p8253_1_2 _at_ 0xdffe;
//8253 end
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p15=P1^5;//AB
sbit p16=P1^6;//CD
sbit p17=P1^7;//泵
sbit p30=P3^0;
sbit p31=P3^1;
sbit p33=P3^3;
sbit p34=P3^4;
bit lu_flag;
bit hong_flag;
bit time_flag;
bit tjcd_flag;
bit ydbz_flag;
unchar code number[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //number0-9
unchar code number1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unchar sj[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
unchar dlz[2]={0x00,0x00};
unchar jshu[2]={0x00,0x00};
unint dlzh;
unint jshuh;
unchar channel;
unchar count;
unchar i;
unchar j;
//delay begin
void delayus(unchar i)//delay 3+2*i uS
{
unchar uscanshu;
uscanshu=i;
while (--uscanshu);
return;
}
void delayms(unsigned int n_milisecond) //mS delayms
{
unsigned char i;
while(--n_milisecond)
{
i=37;
while(--i);
}
return;
}
void delays(unsigned char timers) //dalay s
{
unsigned char i;
for (i=0; i<timers; i++)
{
delayms(200);
delayms(200);
delayms(200);
delayms(200);
delayms(200);
}
return;
}
//delay end
void setp8253(void)
{
p8253_0_con=0x30;
p8253_0_con=0x70;
p8253_0_con=0xb0;
p8253_1_con=0x30;
p8253_1_con=0x70;
p8253_1_con=0xb0;
p8253_0_con=0xb0;//out2=0
p8253_1_1=0x05;
p8253_1_1=0x05;
p8253_1_2=0x06;
p8253_1_2=0x06;
p8253_1_0=0x04;
p8253_1_0=0x04;
p8253_0_con=0xb8;//out2=1
p8253_0_con=0xb0;//out2=0
p8253_1_con=0x70;//out1=0
p8253_0_1=0x02;
p8253_0_1=0x02;
p8253_0_2=0x03;
p8253_0_2=0x03;
p8253_0_0=0x01;
p8253_0_0=0x01;
p8253_1_con=0x78;//out=1
p8253_1_con=0x70;//out=0
p8253_1_1=0x05;
p8253_1_1=0x05;
p8253_1_2=0x06;
p8253_1_2=0x06;
p8253_1_0=0x04;
p8253_1_0=0x04;
p8253_0_1=0x02;
p8253_0_1=0x02;
p8253_0_2=0x03;
p8253_0_2=0x03;
p8253_0_0=0x01;
p8253_0_0=0x01;
}
void dup8253_1(void)
{
unchar i;
unint temp;
p8253_0_con=0x00;
dlz[0]=p8253_0_0;
delayus(1);
dlz[1]=p8253_0_0;
dlzh=dlz[1]*256+dlz[0];
temp=dlzh;
for(i=0;i<=4;i++)
{
sj[i]=temp%10;
temp=temp/10;
}
}
void dup8253_2(void)
{
unchar i;
unint temp;
p8253_0_con=0x40;
dlz[0]=p8253_0_1;
delayus(1);
dlz[1]=p8253_0_1;
dlzh=dlz[1]*256+dlz[0];
temp=dlzh;
for(i=0;i<=4;i++)
{
sj[i]=temp%10;
temp=temp/10;
}
}
void dup8253_3(void)
{
unchar i;
unint temp;
p8253_0_con=0x80;
dlz[0]=p8253_0_2;
delayus(1);
dlz[1]=p8253_0_2;
dlzh=dlz[1]*256+dlz[0];
temp=dlzh;
for(i=0;i<=4;i++)
{
sj[i]=temp%10;
temp=temp/10;
}
}
void dup8253_4(void)
{
unchar i;
unint temp;
p8253_0_con=0x00;
dlz[0]=p8253_1_0;
delayus(1);
dlz[1]=p8253_1_0;
dlzh=dlz[1]*256+dlz[0];
temp=dlzh;
for(i=0;i<=4;i++)
{
sj[i]=temp%10;
temp=temp/10;
}
}
void dup8253_5(void)
{
unchar i;
unint temp;
p8253_0_con=0x40;
dlz[0]=p8253_1_1;
delayus(1);
dlz[1]=p8253_1_1;
dlzh=dlz[1]*256+dlz[0];
temp=dlzh;
for(i=0;i<=4;i++)
{
sj[i]=temp%10;
temp=temp/10;
}
}
void dup8253_6(void)
{
unchar i;
unint temp;
p8253_0_con=0x80;
dlz[0]=p8253_1_2;
delayus(1);
dlz[1]=p8253_1_2;
dlzh=dlz[1]*256+dlz[0];
temp=dlzh;
for(i=0;i<=4;i++)
{
sj[i]=temp%10;
temp=temp/10;
}
}
void int_display(void) interrupt 3//1mS
{
// EA=0;
TR1=0;//停止计数
ET1=1;//允许T1中断
TH1=0xf0;
TL1=0x0c;
i=0;
i=count%8;
count=count+1;
j=j+1;
switch(i)
{
case 0:
{
p8155a=0x01;
p8155b=number[sj[0]];
break;
}
case 1:
{
p8155a=0x02;
p8155b=number[sj[1]];
break;
}
case 2:
{
p8155a=0x04;
p8155b=number[sj[2]];
break;
}
case 3:
{
p8155a=0x08;
p8155b=number[sj[3]];
break;
}
case 4:
{
p8155a=0x10;
p8155b=number[sj[4]];
break;
}
case 5:
{
p8155a=0x20;
p8155b=number[sj[5]];
break;
}
case 6:
{
p8155a=0x40;
p8155b=number1[sj[6]];
break;
}
case 7:
{
p8155a=0x80;
p8155b=number[sj[7]];
break;
}
}
if (time_flag==1)
{
if (count>=89)
{
sj[7]=sj[7]+1;
if (sj[7]>=10)
{
sj[7]=0;
sj[6]=sj[6]+1;
}
if (sj[6]>=10)
{
sj[6]=0;
sj[5]=sj[5]+1;
}
if (sj[5]>=10) sj[5]=0;
count=0;
}
}
TR1=1;
EA=1;
}
void int_honglu(void) interrupt 0
{
EA=0;
if(p13==0&p14==1)
{
if(lu_flag==0)
{
EX1=0;
lu_flag=1;
}
}
else
{
if(p13==1&p14==0)
{
EX1=0;
hong_flag=1;
}
}
EX1=1;
EA=1;
}
void int_select(void) interrupt 2
{
unchar i;
// unchar j;
// EA=0;
if (p33==0)
{ delayus(5);
if(p33==0)
{
channel=channel+1;
if(ydbz_flag==0)
{
i=channel%6;
switch(i)
{
case 0:
{
p8155c=0x04;
// for(j=0;j<=7;j++)sj[j]=0x01;
break;
}
case 1:
{
p8155c=0x02;
// for(j=0;j<=7;j++)sj[j]=0x02;
break;
}
case 2:
{
p8155c=0x01;
// for(j=0;j<=7;j++)sj[j]=0x03;
break;
}
case 3:
{
p8155c=0x20;
// for(j=0;j<=7;j++)sj[j]=0x04;
break;
}
case 4:
{
p8155c=0x10;
// for(j=0;j<=7;j++)sj[j]=0x05;
break;
}
case 5:
{
p8155c=0x08;
// for(j=0;j<=7;j++)sj[j]=0x06;
break;
}
}
}
else
{
i=channel%2;
switch(i)
{
case 0:
{
yy:
p8155c=0x02;
delays(1);
p8155c=0x00;
goto yy;
break;
}
case 1:
{
yy1:
p8155c=0x10;
delays(1);
p8155c=0x00;
goto yy1;
break;
}
}
}
}
}
loop1://等待按键抬起?
if(p33==0)
{
goto loop1;
}
else
{
if(p33==1)
delayus(5);
if(p33==0)
goto loop1;
}
}
void ydbz(void)
{
unchar i;
// for(i=0;i<=2;i++)fivetest();
}
//体积测定
void tjcd(void)
{
unchar i;
EA=1;
ET1=1;
lu_flag=0;
hong_flag=0;
time_flag=0;
for (i=0; i<8; i++) sj[i]=0x00;
p11=0;
p12=0;
p13=1;
p14=1;
p15=0;//起泵
tjloop1:
if(p31==0) goto tjloop1;
else
{
p15=1;//停泵
p17=0;//AB打开
p16=1;//CD关闭
time_flag=1;
while(1)
{
if(lu_flag==1)
{
goto tjloop2;
}
}
}
tjloop2:
time_flag=0;
p11=1;p12=0;//体积测试灯亮
p17=1;p16=1;//abcd关闭
EA=0;//检测体积测定按键
tjkey1:
EA=1;
delayms(20);
EA=0;
p8155a=0x00;
if(p30==1)goto tjkey1;
EA=1;
delayms(20);
EA=0;
p8155a=0x00;
if(p30==0)
{
p8155a=0xfe;
if(p30==0) tjcd_flag=1;
else tjcd_flag=0;
}
if(tjcd_flag==0) goto tjloop2;
EA=1;
EX1=1;
p17=0;//继续进样
p16=1;
while(1)
{
time_flag=1;
if(hong_flag==1)goto tjloop3;
}
tjloop3:
time_flag=0;
p16=1;
p17=1;
delayus(1);
p16=0;
p17=1;
delays(4);
p16=1;
p17=1;
}
//体积测定end
void fivetest(void)
{
unchar i;
EA=1;
ET1=1;
lu_flag=0;
hong_flag=0;
for (i=0; i<8; i++) sj[i]=0x00;
p11=0;
p12=0;
p13=1;
p14=1;
p15=0;//起泵
loop2:
if(p31==0) goto loop2;
else
{
p15=1;//停泵
p17=0;//AB打开
p16=1;//CD关闭
while(1)
{
if(lu_flag==1)
{
goto loop3;
}
}
loop3:
time_flag=1;
for(i=0;i<=4;i++)sj[i]=0x01;
// delays(1);
while(1)
{
for(i=0;i<=4;i++)sj[i]=0x02;
if(hong_flag==1)
goto loop4;
}
loop4:
time_flag=0;
// delays(1);
p16=0;//cd打开
p17=1;//AB关闭
delays(2);
p16=1;
p17=1;
for(i=0;i<=4;i++)sj[i]=0x03;
}
}
void key_check(void)
{
unchar key;
unchar i;
EA=0;
key1:
EA=1;
delayms(20);
EA=0;
p8155a=0x00;
if(p30==1)goto key1;
EA=1;
delayms(20);
EA=0;
p8155a=0x00;
if(p30==0)
{
p8155a=0xfe;
if(p30==0) key=0;//体积测定
p8155a=0xfd;
if(p30==0) key=1;//打印
p8155a=0xfb;
if(p30==0) key=2;//空
p8155a=0xf7;
if(p30==0) key=3;//5ml测试
p8155a=0xef;
if(p30==0) key=4;//药典标准
p8155a=0xdf;
if(p30==0) key=5;//针剂测试
p8155a=0xbf;
if(p30==0) key=6;//暂停
p8155a=0x7f;
if(p30==0) key=7;//500ml
}
else
{
EA=1;
goto key1;
}
switch(key)
{
case 0://体积测定
{
tjcd();
break;
}
case 1://打印
{
for(i=0;i<=7;i++)sj[i]=0x02;
break;
}
case 2://空
{
for(i=0;i<=7;i++)sj[i]=0x03;
break;
}
case 3://5ml测试
{
for(i=0;i<=7;i++)sj[i]=0x04;
fivetest();
break;
}
case 4://药典标准
{
if(ydbz_flag==0)
{
ydbz_flag=1;
p8155c=0x02;
}
else
{
ydbz_flag=0;
}
break;
}
case 5://暂停
{
for(i=0;i<=7;i++)sj[i]=0x06;
break;
}
case 6://结束
{
for(i=0;i<=7;i++)sj[i]=0x07;
break;
}
case 7://针剂测试
{
loop5:
p15=0;
if(p31==0)goto loop5;
else
{
p15=1;
p16=0;
p17=1;
delays(5);
p16=1;
p17=1;
}
for(i=0;i<=7;i++)sj[i]=0x08;
break;
}
}
}
void main(void)
{
IE=0x00;//中断允许控制寄存器
IP=0x0b;//中断优先级控制寄存器
TMOD=0x06;//T1为定时方式13位计数器不受中断1的控制
IT0=0;//外部中断0为电平触发
IT1=0;//外部中断1为电平触发
TCON=0x00;//定时器控制寄存器
TL1=0x0c;//定时1ms
TH1=0xf0;
TL0=0xff;
TH0=0xff;
EX0=1;//外部中断0允许位 =1 允许 =0 禁止
EX1=1;//外部中断1允许位 =1允许 =0禁止
TR0=1;//定时器0开始定时控制位
ET0=1;//定时器0溢出中断允许位 =0 禁止溢出中断 =1 允许溢出中断
TR1=1;//定时器1开始定时控制位
ET1=1;//定时器1溢出中断允许位 =0 禁止溢出中断 =1 允许溢出中断
EA=1;//中断允许位
P1=0xff;
p8155con=0x0f;
p8155a=0x00;
p8155b=0x00;
p8155c=0x04;//开机通道指示灯在通道0上
count=0;
time_flag=0;
lu_flag=0;
hong_flag=0;
i=0;
setp8253();
/*kk:
for(i=0;i<=7;i++) sj[i]=0x00;
delays(3);
dup8253_1();
delays(3);
dup8253_2();
delays(3);
dup8253_3();
delays(3);
dup8253_4();
delays(3);
dup8253_5();
delays(3);
dup8253_6();
delays(3);
goto kk;*/
// fivetest();
while(1) key_check();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -