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

📄 main.c

📁 一款挂面机的自动化控制源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
{
 //external interupt on INT0
 next_gan=1;
 next_ganwei=0-juli_jcd;
}

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
 //external interupt on INT1
 unsigned char tmp;
 unsigned int time0_jsq;   //可控硅触发计时
// Place your code here
if (pidai_yunxing==1)  //如果处于皮带运行状态,则继续。
   {
   TCNT0=0;  //time0初始化计时值
   TCCR0=2;  //time0开始计时
   time0_jsq=pre_jsq;  //计算上一次的触发时间
   if ((P_speed>(set_speed*1.01)) || (P_speed<(set_speed*0.99)) )  //发果速度波动超过1%,则进行速度调整
      {   
      switch(dj_jibie)  //逐步逼近法进行速度加减调整,tmp为速度调整的加减量
         {
         case 0: tmp=64;  break;   //依据逼近度确定加减量
         case 1: tmp=32;  break;
         case 2: tmp=16;  break;
         case 3: tmp=8;   break;
         case 4: tmp=4;   break;
         case 5: tmp=2;   break;
         case 6: tmp=1;   break;
         }
      if (P_speed<set_speed)    // 如果小于设定速度,则减少触发时间     
         {
         if (dj_fangxi==1)       
            {
            time0_jsq=time0_jsq-tmp;
            }
         else
            { 
            time0_jsq=time0_jsq-tmp;   
            dj_jibie++; 
            dj_fangxi=1;
            }
         }
      else       //反之,则增大触发时间
         { 
         if (dj_fangxi==1)
            { 
            time0_jsq=time0_jsq+tmp;
            dj_jibie++;
            dj_fangxi=0;
            }
         else
            {
            time0_jsq=time0_jsq+tmp;
            }
         }
      }
   else
      {
      dj_jibie=0; 
      dj_fangxi=0;
      }
   pre_jsq=time0_jsq;
   time0_chi=(unsigned char)(time0_jsq/256-1);    //计时量计算
   time0_yu=(unsigned char)(256-time0_jsq % 256);
   time0_fen=0;
   if (time0_yu>100)        //如果余数太小,则从次数中分出一次来,和余数加在一起分担剩余的时间
      {
	  time0_chi--;
	  time0_yu=156;
	  time0_fen=time0_yu-156;
	  }
   }
}

#pragma interrupt_handler int2_isr:19
void int2_isr(void)
{
 //external interupt on INT2
 step_num=0;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 timer0_init();
 timer1_init();
 timer2_init();
 twi_init();
 adc_init();

 MCUCR = 0x0C;
 GICR  = 0xE0;
 TIMSK = 0x45; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

void read_eeprom(void)   //读取eeprom中的关键参数
{
EEPROM_READ(10,set_speed);
EEPROM_READ(14,dw_speed);
EEPROM_READ(18,juli_jcd);
EEPROM_READ(22,longth_guamian);
EEPROM_READ(26,ganju);
EEPROM_READ(30,longth_zongmian);
EEPROM_READ(34,caogan_speed);
EEPROM_READ(38,max_ganshu);
}

//
unsigned char check_gan=0;
void main(void)
{
 unsigned int i,m;
 char *tttt="1231231";
 unsigned int n;
 init_devices();

 //insert your functional code here...
 //开始全局变量的初始化
 read_eeprom();
  //结束全局变量的初始化
M_state=8;
PORTB &=0xef; //亮电源指示灯
for (i=0;i<10000;i++)
{
for (m=0;m<500;m++);
}
disstring(tttt);
while (1)
{
 if (PORTD & 0b01000000)
    {
     check_gan=1;
    } 
 if ((check_gan==1) && ((PORTD & 0x01000000)==0))
    {
	check_gan=0;
	jileigan++;
	}
 if ((jileigan>max_ganshu) & (caoshu==0))
    {
    caoshu=1;
    current_speed=set_speed;
    set_speed=caogan_speed;
//亮超速指示灯
    PORTB &=0xbf;
    }
    if ((jileigan<=3) & (caoshu==1))
    {
    caoshu=0;
    set_speed=current_speed; 
//关超速指示灯
    PORTB |=0x40;
    }
if (on_key==1)
   {
   on_key=0;
   key=ZLG7290_GetKey();
   if (key>0)
      {
	  if (menu_jb==0)
	     switch (key)
      {
      case START : 
         {
         pidai_yunxing=1;
         guogan=1; 
         //亮运行指示灯
         disstring(string1);
         } break;
      case INC_SPEED : 
         {
         set_speed=set_speed+50;
         if (set_speed>500) set_speed=500;
         } break;
      case DEC_SPEED :
         { 
         set_speed=set_speed-50;
         if (set_speed<100) set_speed=100;
         } break;
      case SET :
         { 
         menu_gn=1;
         menu_jb=1;
         disstring(string2);
         } break;
      case STOP :
         { 
         pidai_yunxing=0;
         guogan=0;
         //灭运行指示灯
         disstring(string1);
         } break;
      case SPEED :
         {
         menu_gn=2;
         
         ftoa(set_speed,8,str_dis);      //给set_speed乘以一个数值,便于显示出来
         disstring(str_dis);
         } break;
//      case COUNT :
//         {
//         
//         } break;
//      case SUM :
//         {
//         } break;
//      case CLEAR :
//         {
//         } break;
      case MIAN_LENGTH :
         {
         menu_gn=3;
         menu_jb=1;
         ftoa(longth_guamian,8,str_dis);
         disstring(str_dis);
         } break;
      case CUT_NUM :
         {
         n=jidao;
         menu_gn=4;
         menu_jb=1;
         itoa(n,str_dis);
         disstring(str_dis);
         } break;
      case JIGAN :
         {
         n=max_ganshu;
         menu_gn=5;
         menu_jb=1;
         itoa(n,str_dis);
         disstring(str_dis);
         } break;            
      }
if (menu_jb==1)
   switch (key)
      {
      case K0: 
         { 
         tmp_string[cs_num]='0';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K1:
         {
         tmp_string[cs_num]='1';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K2:
         {
         tmp_string[cs_num]='2';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K3:
         { 
         tmp_string[cs_num]='3';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K4:
         {
         tmp_string[cs_num]='4';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K5:
         { 
         tmp_string[cs_num]='5';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K6:
         {  
         tmp_string[cs_num]='6';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K7:
         { 
         tmp_string[cs_num]='7';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K8:
         {
         tmp_string[cs_num]='8';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case K9:
         { 
         tmp_string[cs_num]='9';
         tmp_string[cs_num+1]=0;
         cs_num++;
         disstring(tmp_string);
         } break;
      case ENTER:
         {
         cs_num=0; 
         disstring(string1);
         switch (menu_gn)
            {
            case 1:    //SET
               { 
               n=atoi(tmp_string);
               menu_gn=(unsigned char)(n+12);
               } break;
            case 2:
               { 
               set_speed=atof(tmp_string);      //除以一个数值,使结果准确 
               menu_jb=0;
               } break;
            case 3: 
               { 
               longth_guamian=atof(tmp_string);
               menu_jb=0;
               } break;
            case 4:
               {
               jidao=(unsigned char)(atoi(tmp_string));
               menu_jb=0;
               } break;
            case 5:
               {
               max_ganshu=(unsigned char)(atoi(tmp_string));
               menu_jb=0;
               } break;
            case 12:
               {
               longth_zongmian=atof(tmp_string);
               menu_jb=0;
               } break;
            case 13:
               {
               juli_jcd=atof(tmp_string);
               menu_jb=0;
               } break;
            case 14:
               {
               dw_speed=atof(tmp_string);
               menu_jb=0;
               } break;
            case 15:
               {
               ganju=atof(tmp_string);
               menu_jb=0;
               } break;
            case 16:
               {
              // min_ganshu=(unsigned char)(atoi(tmp_string));
               menu_jb=0;
               } break;
            case 17:
               {
               caogan_speed=atof(tmp_string);
               menu_jb=0;
               } break;
            }
         } break;
      case RETURN:
         { 
         cs_num=0; 
         disstring(string1);
         menu_jb=0;
         } break;                  
      }
	  }
   } 
} 
}

⌨️ 快捷键说明

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