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

📄 acus.c

📁 一个针灸治疗仪源代码,包括记时,显示AD采样程序,开发环境keil.使用的芯片PLC89C935
💻 C
📖 第 1 页 / 共 3 页
字号:
          	 { os_wait(K_TMO,2,0);
			   
		      if(!kb_hit()) 
		        { 
				NewsStr[0]++; 		      //消息加1
                KeyOk=0;}
         
		     }      
}
/*********************************************************
*名称:signalon(void)
*功能:检查系统时钟是否在启动和结束之间
*入口参数:无
*出口参数:位变量,为0则时间到,为1时间未到
*********************************************************/
/*bit signalon(){
    if(memcmp(&start,&end,sizeof(struct time))<0)
       {if((memcmp(&start,&ctime,sizeof(struct time))<=0)&&
           (memcmp(&ctime,&end,sizeof(struct time))<0))  
           return (1);
        }
     else{
          if(memcmp(&end,&ctime,sizeof(struct time))>0	&&
             memcmp(&ctime,&start,sizeof(struct time))>=0  )
           return (1);
        }
     return(0);
      
}
/*********************************************************
*名称:init(void)
*功能:初始化
*入口参数:无
*出口参数:无
*********************************************************/
void init(void)	  _task_ INIT
{
  CPU_init();
  os_create_task(CLOCK);
  os_create_task(LIGHTS);
  os_create_task(KEYREAD);
  os_create_task(TIMESET);///////////////////////
  os_delete_task(INIT) ;
  
} 
/*********************************************************
*名称:Clock()
*功能:定时任务
*入口参数:no
*出口参数:无
*********************************************************/
void clock (void)  _task_ CLOCK  {
uchar Time,ALAMETIME;

  while (1)  {                        /* clock is an endless loop             */
    if (++ctime.msec == 4)  
	   {  
        ctime.msec = 0; 
		 if(ALAMECON)
			{if(ALAMETIME/2)ALAME=~ALAME;
			 if(ALAMETIME++>10)
			    {ALAME=0;ALAMETIME=0;ALAMECON=0;}
			}
		 else ALAMETIME=0;
		watchdog();	
	    if (++ctime.sec == 60)  
		     {         /* calculate the second                 */
               ctime.sec = 0; 
               Time=TimeLimit;
               if(TimeLimit<=1)
               Time=0;
		 	   EEPROMwrite(TIMEADDR, Time-1);/*每分钟记录一次当前剩余时间 */
			   if (++ctime.min == 60)  
			      {               /* calculate the minute                 */
                   ctime.min = 0;
                   if (++ctime.hour == 24)  
				   {         /* calculate the hour                   */
                    ctime.hour = 0;
                   }
                  }
              }
        }
	watchdog();
    os_wait (K_IVL,100, 0);                  /* wait interval:  1 second             */
  }
}

/*********************************************************
*名称:TempControl()
*功能:显示任务
*入口参数:no
*出口参数:无
*********************************************************/
void Lights(void)			  _task_ LIGHTS
{  while (1)  {                                /* endless loop                          */
                 Disp(dispbuff);               /* increment counter 1                   */
                 watchdog();
				 P03=~P03;
				 os_wait (K_TMO, 3, 0);        /* wait for timeout: 10 ticks            */
  }
  } 
    
 /*********************************************************
*名称:KeyRead()
*功能:键盘控制任务
*入口参数:no
*出口参数:无
*********************************************************/
void KeyRead(void)	_task_ 	 KEYREAD
{uchar keytemp ;

 while (1)  
        {
		   if(P13)
			     {  os_create_task(TEMPSET);   //创建温度设置任务
                    os_delete_task (TEMPCON);
				    templed=CLOSE; }            //停止升温
		    else
                 {
                  if(TaskStart==1)	 
				     os_create_task (TEMPCON);//如果已经开始治疗就创建温度控制任务
				     os_delete_task (TEMPSET);//删除温度设置任务
				     
                  }
		    
		  
		  ScanKey();
		  keytemp=DealNews( )	;
	      switch( keytemp)
		  		  { 
				    case 0xff:		          /*时间控制*/
				    {   
					    os_send_signal (TIMESET);
					    TimeCounter=0;
		   				keytemp=0;
						break;}
					 case 0xfd:		          /*时间控制*/
				    {   
					    os_send_signal (TIMESET);
					    TimeCounter=0;
		   				keytemp=0;
						break;}
				    case 0xfe:		         /*温度控制*/
				      {   TimeCounter=0; 
					      keytemp=0;
						  
							break;}
                       
                    default:	
					  {   break;}
				 }
		  
   os_wait (K_TMO, 10, 0);
  
	  }
		
}

  
/*********************************************************
*名称:TempControl()
*功能:温度控制任务
*入口参数:no
*出口参数:无
*********************************************************/
TempControl()		_task_ TEMPCON
{ uchar  deca  ,first;
 while (1)  {  
                  TemperatuerResult();//读18b20温度值
                  deca=Temperature/10;
		          first=Temperature%10;
				  if(P13==0) //如果P13为0显示温度控制
                      {WriteDisp(2,deca);
			           WriteDisp(3,first);}                 
    			 if(TempLimit<Temperature)
				   { templed=CLOSE;
                     watchdog();}
                 else if(TaskStart) 
                      {templed=OPEN ;
                         watchdog();}                
			     
	
	os_wait (K_TMO, 100, 0);           
    
  }
}

 
/*********************************************************
*名称:TempSetup()
*功能:温度设置任务
*入口参数:no
*出口参数:无
*********************************************************/
TempSetup()		 _task_ TEMPSET
{ uchar deca,first,ad1=30,ad2=30;
          
  while (1)  { 	//ad1= MeilanFilter(CHANNEL1);
                 
                 ad1=AD_start(CHANNEL1);
                 TempLimit=ad1;
				 if(TempLimit>=70)TempLimit=70;
				 if(TempLimit<2)TempLimit=0;
                 deca=TempLimit/10;
		         first=TempLimit%10; 
				 if(P13)//如果P13为1显示温度设置
                    {WriteDisp(2,deca);
			         WriteDisp(3,first);
					 templed=CLOSE;}                    
                 watchdog();
			     os_wait (K_TMO, 50, 0);
			  
			 }
  }
/*********************************************************
*名称:PWMControl()
*功能:脉冲控制任务
*入口参数:no
*出口参数:无
*********************************************************/
void  PWMControl(void)		  _task_ PWMCON
{ static uint idata freq,i;
  static uchar idata PWMStop;
  while(1)
        { PWMChang++;
         if(pwmkey) 
		  { if(PWMChang>=6)
			  {   // HLTRN=~HLTRN;
			       HLTRN=0;
			  	   PWMChang=0;
			       i+=1;
				   i&=0x07;
				   freq=PWM128HZ>>i;
				   PWM_start(freq,4);
			       PWMStop=0;
				   
		      }
		   }	
		 else   { HLTRN=0; 
                    if(PWMChang>=2)
                      { 
                        PWM_start(PWM1024HZ,2);
					    PWMChang=0;
                      }
                   else
					    PWM_start(PWM2048HZ-12,2);
                }
        os_wait(K_TMO,30,0);}  //8秒变化一次
    
  }


  


/*********************************************************
*名称:TempSetup()
*功能:时间设置任务
*入口参数:no
*出口参数:无
*********************************************************/
TimeSetup()		 _task_ TIMESET
{ uchar deca,first;
  
          
  while (1)  {   
                 os_wait (K_SIG, 40, 0); 
                 TimeLimit+=10; 
                 if(TimeLimit>60)
                    TimeLimit=0;
                 end.hour=TimeLimit/60+ctime.hour;   //记录结束时间
				 end.min= TimeLimit%60+ctime.min;
				 end.sec= 0;
				 ctime.sec=0;
				 deca =TimeLimit/10;
				 first=TimeLimit%10;
				 WriteDisp(0,deca);
			     WriteDisp(1,first);
				 TimeCounter=0;
                 if(TIMECONRUN==0)
				 os_create_task (TIMECON);
				 watchdog();
			 }

  }
/*********************************************************
*名称:TimeCon()
*功能:温度控制任务
*入口参数:no
*出口参数:无
*********************************************************/
TimeCon()  _task_      TIMECON
{uchar deca,first;
 while(1)
      {TimeCounter++;
	   TimeCounter&=0x1f;
       if(TimeCounter>10&&TaskStart==0)		        //如果3秒后没有按键或调整电压则开始治疗任务
				   {
				    if(P13==0)
				    os_create_task (TEMPCON);       //创建温度控制任务
                    os_create_task (PWMCON);        //创建脉冲控制任务
					EEPROMwrite(TIMEADDR, TimeLimit);
                    EEPROMwrite(TEMPADDR, TempLimit);//保存工作状态
					start.hour=ctime.hour;		    //记录开始时间
                    start.min=ctime.min;
                    start.sec=ctime.sec;
                    timeled=OPEN;  
                    templed=OPEN;
					ALAMECON=CLOSE;                   
					TaskStart=1;
					TimeCounter=0;	
					TIMECONRUN=1;
                   }
        if(TaskStart==1) 
          {  TimeLimit=(end.hour-ctime.hour)*60;
		     TimeLimit+=end.min-ctime.min ;
			 if(TimeLimit>60)TimeLimit=60;
			 deca =TimeLimit/10;
			 first=TimeLimit%10;
			 WriteDisp(0,deca);
			 WriteDisp(1,first);
			  watchdog();
		     if(TimeLimit==0)                        //如果任务开始检查时间是否
	                {TimeCounter=0;
					 TaskStart=0;
                     TimeLimit=0;
                     HLTEN=1;
                     HLTRN=1;	                      //禁止PWM输出
					 ALAMECON=OPEN;
                     timeled=CLOSE;  
                     templed=CLOSE;
                     TIMECONRUN=0;
					 os_delete_task (TEMPCON);
					 os_delete_task (PWMCON);
					 os_delete_task (TIMECON);
                     
					 }
             
			}
                 
			os_wait (K_TMO, 100, 0);
			}
   }
   /*********************************************************
*名称:Blinking()
*功能:闪烁任务
*入口参数:no
*出口参数:无
*********************************************************/
/*Blinking()		 _task_ BLINKING
{ uchar i;
  uchar tempdisp[4];
  timeled=0;
  templed=0;
  for(i=0;i<=4;i++)
       {tempdisp[i]=dispbuff[i];}
  while(1) {
   	  	 if(TempCounter==1)  
	      { os_wait(K_TMO,30,0);
            templed=0;
		    WriteDisp(0,0xff);
			WriteDisp(1,0xff);
			os_wait(K_TMO,100,0);
            templed=1;
            WriteDisp(0,tempdisp[0]);
			WriteDisp(1,tempdisp[1]);
			os_wait(K_TMO,100,0);
			}
           if(TempCounter==2)
           {timeled=0;
            WriteDisp(2,0xff);
			WriteDisp(3,0xff);
			os_wait(K_TMO,100,0);
            timeled=1;
		    WriteDisp(2,tempdisp[2]);
			WriteDisp(3,tempdisp[3]);
			os_wait(K_TMO,100,0);
			}
       	 if(TempCounter==0)
           {WriteDisp(0,0x00);
		    WriteDisp(1,0x00);
			WriteDisp(2,0x00);
			WriteDisp(3,0x00); 
		    os_delete_task (BLINKING);}
	      } 
			
		 }	             
  				*/
     
  
  

⌨️ 快捷键说明

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