📄 clcd.c
字号:
else if((Step<30)&&(Step>9))
{
x=ceil(Step/10-0.5);
LCD_WrCHr6x16(4,8,x);
x=Step-(x*10);
LCD_WrCHr6x16(4,16,x);
}
else if(Step>=30)
{
LCD_WrCHr6x16(4,8,0);
LCD_WrCHr6x16(4,16,0);
}
}
//------------ 进制转换 ------------//
unsigned int D2H(unsigned int x)
{
unsigned char y;
unsigned int z;
z=x&0x0F00;
z>>=8;
z*=100;
y=x&0x00F0;
y>>=4;
z=(y*10)+z+(x&0x000F);
return z;
}
//------------ 键盘扫描 ------------//
unsigned int keyscan(void)
{
unsigned int ke=0;
// SO=1;
// SOC=0;
// KO=0;
// KOC=1;
// delay_ms(2);
if (Key_In != old_Key)
{
delay_ms(20);
if (Key_In != old_Key)
{
ke=Key_In^old_Key;
ke<<=8;
old_Key=Key_In;
}
}
ke=ke+(255-Key_In);
return ke;
}
/*
//------------ 状态扫描 ------------//
unsigned char st_scan(void)
{
unsigned char St;
// KO=1;
// KOC=0;
// delay_us(200);
// SO=0;
// SOC=1;
// delay_ms(5);
St=255-PIND;
KO=0;
SO=1;
return St;
}
void MotoKey(void)
{
unsigned char SC;
Time[8]= 0x0096 ; //about 15S
#asm("sei") //开总中断
while((Time[8])&&(SC&0x03))
{
// SC=st_scan();
Err_Msg=Step;
if(SC&0x01)
{
RD8=0;
RD9=1;
Step=0x9D;
}
else if(SC&0x02)
{
RD9=0;
RD8=1;
Step=0x9C;
}
}
#asm("cli") //关总中断
R_OFF();
}
*/
//------ Turn Off all relay -----//
void R_OFF(void)
{
RD0=1;
RD1=1;
RD2=1;
RD3=1;
RD4=1;
RD5=1;
RD6=1;
RD7=1;
RD8=1;
RD9=1;
}
//------------ 电机位置状态初始化 ------------//
void MotoIni(void)
{
Time[8]= 0x0096 ; //about 10S
Step=0xFF;
while(!sdown&&(Time[8])) //回到低位置
{
RD9=0;
if(Key0==0)
{
Time[8]=0;
}
}
RD9=1;
Time[8]= 0x0096 ; //about 30S
if (!sdown)
{
Err_Msg=0xFB;
}
else
{
while(!ssp&&(Time[8]))//回到停止位置
{
RD7=0;
if(Key0==0)
{
Time[8]=0;
}
}
RD7=1;
if (!ssp)
{
Err_Msg=0xFE;
}
}
}
void Rolling(void)
{
if(roll==0)
{
RD9=s_down;
roll=1;
Time[8]=0x0096; //about 10S
}
else if((s_down)&&(roll==1))
{
RD9=1;
RD7=0;
roll=2;
}
else if ((!s_sp)&&(roll==2))
{
roll=3;
delay_ms(10);
}
else if ((roll==3)&&(s_sp))
{
RD7=1;
roll=4;
Time[8]=0x0096; //about 10S
RD8=0;
}
else if((s_up)&&(roll==4))
{
RD8=1;
roll=5;
}
else if((roll<5)&&(Time[8]==0))
{
roll=8;
}
}
/*---------- 执行程序: ----------*/
/*-- RD0..RD6 ==KA..KG 共7个,其余3个:旋转、升高、降低 RD 7、8、9 --*/
/*------- 转盘位置:低、高、A、B、C、D点分别对应触点开关0..5 -------*/
void execute(void)
{
if (!test)
{
s_up=sup;
s_down=sdown;
s_sp=ssp;
}
if(Step==0xFF) //开始
{
Step=0;
}
if(Step==0) //1 //处理溶液A
{
RD0=0;
RD5=0;
RD8=0;
Time[0] = D2H(Timeset[0]);
Time[8]=0x0096; //about 15S
roll=10;
Step=1;
}
if(Step==1)
{
if(((s_up)||(roll==11))&&(Time[0]==0))
{ Step=2;
R_OFF();
}
else if(s_up)
{
RD8=1;
roll=11;
}
else if( Time[0]==0)
{
RD0=1;
RD5=1;
}
if(Time[8]==0)
{
roll=8;
}
}
if (Step==2) //2
{
RD4=0;
RD6=0;
Time[1]=D2H(Timeset[1]);
Step=3;
}
if((Step==3)&&(Time[1]==0)) //3
{
RD4=1;
RD6=1;
RD1=0;
RD5=0;
Time[2]=D2H(Timeset[2]);
Step=4;
roll=0;
}
if(Step==4) //处理溶液B
{
Rolling();
if(Time[2]==0)
{
RD1=1;
RD5=1;
}
if((roll==5)&&(Time[2]==0))
{
RD4=0;
RD6=0;
Time[3]=D2H(Timeset[3]);
Step=5;
}
}
if((Step==5)&&(Time[3]==0))
{
RD4=1;
RD6=1;
RD2=0;
RD5=0;
Time[4]=D2H(Timeset[4]);
Step=6;
roll=0;
}
if(Step==6) //5 //处理溶液C
{
Rolling();
if(Time[4]==0)
{
RD2=1;
RD5=1;
}
if((roll==5)&&(Time[4]==0))
{
RD4=0;
RD6=0;
Time[5]=D2H(Timeset[5]);
Step=7;
}
}
if((Step==7)&&(Time[5]==0))//9
{
RD4=1;
RD6=1;
// RD9=0;
RD3=0;
RD5=0;
Time[6]=D2H(Timeset[6]);
Step=8;
roll=0;
}
if(Step==8) //5 //处理溶液D
{
Rolling();
if(Time[6]==0)
{
RD3=1;
RD5=1;
}
if((roll==5)&&(Time[6]==0))
{
RD4=0;
RD6=0;
Time[7]=D2H(Timeset[7]);
Step=9;
}
}
if(Step==9&&(Time[7]==0))
{
R_OFF();
Step=10;
}
if(Step==10)
{
MotoIni();
roll=9;
test=0;
}
s_up=0;
s_down=0;
s_sp=0;
}
/*---------- 执行程序: ----------*/
/*-- RD0..RD6 ==KA..KG 共7个,其余3个:旋转、升高、降低 RD 7、8、9 --*/
/*------- 转盘位置:低、高、A、B、C、D点分别对应触点开关0..5 -------*/
/*
void execute(void)
{
if (!test)
{
s_up=sup;
s_down=sdown;
s_sp=ssp;
}
if(Step==0xFF) //开始
{
Step=0;
}
if(Step==0) //1 //处理溶液A
{
RD0=0;
RD5=0;
RD8=0;
Step=1;
}
if((s_up)&&(Step==1))
{
Time[0] = D2H(Timeset[0]);
Step=2;
RD8=1;
}
if ((Step==2)&&(Time[0]==0)) //2
{
RD0=1;
RD5=1;
RD4=0;
RD6=0;
Time[1]=D2H(Timeset[1]);
Step=3;
}
if((Step==3)&&(Time[1]==0)) //3
{
RD4=1;
RD6=1;
RD9=0;
Step=4;
}
if((Step==4)&&(s_down))
{
RD9=1;
RD7=0;
delay_ms(800);
Step=5;
}
if((Step==5)&&(s_sp)) //处理溶液B
{
RD7=1;
Step=6;
// RD9=1;
// RD7=1;
// delay_ms(10);
RD1=0;
RD5=0;
RD8=0;
// Step=7;
}
if((s_up)&&(Step==6))
{
Time[2]=D2H(Timeset[2]);
Step=7;
RD8=1;
}
if((Time[2]==0)&&(Step==7)) //5
{
RD1=1;
RD5=1;
RD4=0;
RD6=0;
Time[3]=D2H(Timeset[3]);
Step=8;
}
if((Step==8)&&(Time[3]==0)) //6
{
RD4=1;
RD6=1;
RD9=0;
Step=9;
}
if((Step==9)&&(s_down))
{
RD9=1;
RD7=0;
delay_ms(800);
Step=10;
}
if((Step==10)&&(s_sp)) //处理溶液C
{
RD7=1;
Step=11;
// RD9=1;
// RD7=1;
// delay_ms(10);
RD2=0;
RD5=0;
RD8=0;
// Step=13;
}
if((s_up)&&(Step==11))
{
Time[4]=D2H(Timeset[4]);
Step=12;
RD8=1;
}
if((Time[4]==0)&&(Step==12)) //8
{
RD2=1;
RD5=1;
RD4=0;
RD6=0;
Time[5]=D2H(Timeset[5]);
Step=13;
}
if((Step==13)&&(Time[5]==0))//9
{
RD4=1;
RD6=1;
RD9=0;
Step=14;
}
if((Step==14)&&(s_down))
{
RD9=1;
RD7=0;
delay_ms(800);
Step=15;
}
if((Step==15)&&(s_sp)) //10 //处理溶液D
{
RD7=1;
Step=16;
// RD9=1;
// RD7=1;
// delay_ms(10);
RD3=0;
RD5=0;
RD8=0;
// Step=19;
}
if((s_up)&&(Step==16))
{
Time[6]=D2H(Timeset[6]);
Step=17;
RD8=1;
}
if((Time[6]==0)&&(Step==17)) //11
{
RD3=1;
RD5=1;
RD4=0;
RD6=0;
Time[7]=D2H(Timeset[7]);
Step=18;
}
if((Step==18)&&(Time[7]==0))//12
{
RD4=1;
RD6=1;
RD9=0;
Step=19;
}
if((Step==19)&&(s_down))
{
RD9=1;
RD7=0;
delay_ms(800);
Step=20;
}
if((Step==20)&&(s_sp))
{
RD7=1;
Step=21;
}
if((Step==21)&&(s_down)&&(s_sp)) //回到初始位置
{
R_OFF();
Step=22;
}
s_up=0;
s_down=0;
s_sp=0;
}
*/
//------------ 设 置 时 间 参 数 ------------//
void F_TimeSet(unsigned char mark, unsigned char ud)
{
unsigned char ii,jj,kk;
jj=ceil(mark/3-0.5);
ii=mark-jj*3;
if (ii==0)
{
kk = tset[jj]>>8;
kk = kk&0x0F;
if (ud==1)
{
if(kk<9)
{ tset[jj]+=0x0100;}
}
else if(ud==0)
{
if(kk>0)
{ tset[jj]-=0x0100;}
}
}
if (ii==1)
{
kk= tset[jj]>>4;
kk&=0x0F;
if (ud==1)
{
if(kk<9)
{ tset[jj]+=0x0010;}
}
else if(ud==0)
{
if(kk>0)
{ tset[jj]-=0x0010;}
}
}
if (ii==2)
{
kk= tset[jj]&0x0F;
if (ud==1)
{
if(kk<9)
{ tset[jj]+=0x0001;}
}
else if(ud==0)
{
if(kk>0)
{ tset[jj]-=0x0001;}
}
}
}
//---- Timer 0 overflow interrupt service routine ----//
//-------- 定时溢出中断 4ms ---------------//
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
unsigned char i;
TCNT0=0x05;
if (!(T25--))
{
T25=24;
for(i=0;i<9;i++)
{
if (Time[i]!=0)
{
Time[i]--;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -