⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 CC100和ML2724的控制;自动化控制
💻 C
字号:
#include<reg51.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int  uint;
sbit S1=P1^4;
sbit S2=P1^5;
sbit S3=P1^6;
sbit S4=P1^7;
sbit DO=P1^0;
sbit DI=P1^1;
sbit SK=P1^2;
sbit CS=P1^3;
sbit out=P3^5;
sbit buzzer=P3^4;
uchar bdata w;
sbit w7=w^7;
sbit w0=w^0;
uchar bdata ad;
sbit ad7=ad^7;
bit EXIT,dp;
uchar data disp,hd,h,x,sd,udd,vdd,cdd,mdd,fd,tim,tim_k;
uchar data ary1[4];//匝数00
uchar data ary2[4];//启动速度02
uchar data ary3[4];//减速速度04
uchar data *d;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xc7,0xaf,0xce,0x9f,0xb6,0xa3,0xbf,0xad,0x92,0xff,0xd5,0x8d,0xc1};
void msde(uchar s);/*0,  1,   2,   3,   4,   5,  ,6,   7,   8,   9,   a,   b,   c,   d,   e,   f,  10(P),11(L),12R,13T, 14I,15X, 16O, 17-, 18N, 19S, 1a,  1bV,  1cK,1du*/
void msude(uchar ms);
void key();
void at93c46(bit com,uchar byte,uchar address,uchar data *p);
void sdt46(uchar k);
uchar rdt46();
   void main( )using 0{
   TMOD=0x11;P2=P1=P3=0xff;
   P0=0xff;_nop_();
   IE=0;cdd=0;
   TH0=0x3c;TL0=0xaf;
   mdd=0;TH1=0xea;TL1=0x55;
   CS=SK=DI=0;DO=1;
   at93c46(0,2,0x00,&ary1);
   while(1){
   IE=0x8a;d=ary1;
   TR1=S1=S3=1;TR0=dp=0;
   disp=0;buzzer=out=1;
   if(S1==0){
   msde(10);S1=1;//有键按下延时计数
   if((S1==0)&&(++cdd>=10)){//超过规定时间进入键处理
   cdd=0;ary1[0]=0x0e;
   do{S1=1;}while(S1==0);
   EXIT=0;
   while(EXIT==0){
            d=ary1;
  	        at93c46(0,2,0x00,&ary1);//读长度
	        ary1[0]=0x0a;key();
            d=ary2;at93c46(0,2,0x04,&ary2);//读长度
	        ary2[0]=0xb;key();
			EXIT=0;ary3[1]=0x16;ary3[2]=0x0f;ary3[3]=0x0f;ary3[0]=0x1a;
            do{S1=S4=S3=1;d=ary3;
		      if(S3==0){EXIT=1;ary3[0]=0x1a;ary3[1]=0x1a;ary3[2]=0x16;ary3[3]=0x18;}//on
 			  else if(S4==0){EXIT=0;ary3[1]=0x16;ary3[2]=0x0f;ary3[3]=0x0f;}//off
                   }while(S1==1);
		         do{S1=1;}while(S1==0);}
				 at93c46(1,2,0x00,&ary1);
	             at93c46(1,2,0x04,&ary2);
 		              }
                 }
  else  {if(S3==0){
   msude(0x32);
   S1=1;if(S3==0){
   do{S3=1;}while(S3==0);
   at93c46(0,2,0x00,&ary1);
   ary3[0]=0x0c;ary3[1]=ary3[2]=ary3[3]=tim=tim_k=0;
      do{
      out=0;buzzer=TR0=S4=1;d=ary3;
	 if(tim>=20){dp=!dp;
     tim=0;if(++tim_k>=60){
     tim_k=0;
     if(++(ary3[3])>=10){
     ary3[3]=0;
     if(++(ary3[2])>=6){
     ary3[2]=0;
     if(++(ary3[1])>=10){
     ary3[1]=9;}
              }
           }
	    }
      }
	}while(((ary1[1]>ary3[1])||(ary1[2]>ary3[2])||(ary1[3]>ary3[3]))&&(S4==1));
    TR0=0;
    at93c46(0,2,0x04,&ary2);
    ary3[0]=0x0c;ary3[1]=ary3[2]=ary3[3]=tim=tim_k=0;
     do{
     out=TR0=S4=1;;buzzer=0;d=ary3;
	 if(tim>=20){dp=!dp;
     tim=0;if(++tim_k>=60){
     tim_k=0;
     if(++(ary3[3])>=10){
     ary3[3]=0;
     if(++(ary3[2])>=6){
     ary3[2]=0;
     if(++(ary3[1])>=10){
     ary3[1]=9;}
              }
            }
		 }
      }
	}while(((ary2[1]>ary3[1])||(ary2[2]>ary3[2])||(ary2[3]>ary3[3]))&&(S4==1));
	 out=buzzer=1;TR1=dp=0; }
                 }
	         }
         }
   }//结束

void at93c46(bit com,uchar byte,uchar address,uchar data *p){
if(com==0){//读命令
for(;byte>0;byte--){
SK=DI=CS=1;
msude(2);
SK=0;msude(2);
sdt46(0x80+address);
*p++=rdt46();
*p++=rdt46();
address++;
CS=0;_nop_();
    }
  }
else {//写命令
for(;byte>0;byte--){
SK=DI=CS=1;
msude(2);
SK=0;msude(2);
sdt46(0x30);
CS=0;
SK=DI=CS=1;
msude(2);
SK=0;msude(2);
sdt46(0x40+address);
sdt46(*p++);
sdt46(*p++);
CS=0;
_nop_();
SK=DI=CS=1;
msude(2);
SK=0;msude(2);
sdt46(0x00);
CS=0;_nop_();
address++;
_nop_();}
    }
  }
void sdt46(uchar k){//写操作
uchar i;
w=k;
for(i=0;i<8;i++){
DI=w7;w<<=1;
SK=1;msude(2);
SK=0;msude(2);  }
     }
uchar rdt46(){     //读操作
uchar i;
for(i=0;i<7;i++){
SK=1;msude(2);
SK=0;msude(2);
w0=DO;w<<=1;
    }
SK=1;msude(2);
SK=0;msude(2);
w0=DO;
return(w);
}

void key(){
uchar v=0;disp=0x10;
do{
S1=S2=S3=S4=1;
msde(30);
if(S2==0){
if(++v>=3)v=0;
else v=v;
do{S2=1;}while(S2==0);}
switch(v){
case 0:{
disp=0x10;
if(S3==0){
if(++(*(d+3))>=10){
*(d+3)=0;
if(++(*(d+2))>=6){
*(d+2)=0;
if(++(*(d+1))>=10){
*(d+1)=9;*(d+2)=5;*(d+3)=9;
             }
    	   }
         }
	   }
else if(S4==0){
if(*(d+3)==0){
if(*(d+2)==0){
if(*(d+1)==0)*(d+2)=*(d+1)=*(d+3)=0;
else {(*(d+1))--;*(d+3)=9;*(d+2)=5;}
      }
else {(*(d+2))--;*(d+3)=9;}
      }
else (*(d+3))--;}
}break;
case 1:{
disp=0x20;
if(S3==0){
if(++(*(d+2))>=6){
*(d+2)=0;
if(++(*(d+1))>=10){
*(d+2)=5;*(d+1)=9;
            }
		 }
      }
else if(S4==0){
if(*(d+2)==0){
if(*(d+1)==0)*(d+2)=*(d+1)=0;
else {(*(d+1))--;*(d+2)=5;}
}
else {(*(d+2))--;}
  }
}break;
case 2:{
disp=0x40;
if(S3==0){
if(++(*(d+1))>=10)
*(d+1)=9;
}
else if(S4==0){
if(*(d+1)==0);
else (*(d+1))--;}
 }break;
  default:
  break;
      }
    }while(S1==1);
 do{S1=1;}while(S1==0);
 disp=0;
 }


 void timer1()interrupt 3 using 1 {
 P0=P2=0xff;
 if(vdd>=4){
 sd=0xfe;vdd=0;
 ad=disp;}
 fd=*(d+vdd++);P2=sd;
 if((vdd==2)&&(dp==1))P0=tab[fd]&0x7f;
 else P0=tab[fd];sd=_crol_(sd,1);
 if(ad7==1){TH1=0xea;TL1=0x55;}
 else {TH1=0xf9;TL1=0x55;}
 ad<<=1;TR1=1;
   }

 void timer0()interrupt 1 {
      tim++;
	  TH0=0x3c;TL0=0xb6;}
  void msde(uchar s)
   {
   while(s--)msude(0xfa);
   }
void msude(uchar ms){
uchar i;
    while(ms--)
   {
   for(i=0;i<=0x05;i++)
      i=i ;
    }
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -