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

📄 main.c

📁 这是一个简单的步进电机的程序,用C51编写,主要可以定时控制电机进行180度的旋转
💻 C
字号:
#include <reg51.h>
#define uchar unsigned char

sbit key_cycleless=P3^3;
sbit key_start=P3^4;
sbit key_reset=P3^2;
sbit key_set=P1^5;//定义键盘
sbit key_add=P1^6;
sbit key_esc=P1^7;
sbit key_pause=P3^5;

extern bit dir_flag;
extern bit Glint_enable_flag;
extern uchar Dis_bit_p;
extern uchar Counter;
extern void time_set();
extern void run();
extern void step_motor();
uchar Time[5]={0,0,0,0,0,};//秒百位,秒十位,秒个位,循环十位,循环个位
bit Second_flag;
bit Run_mode;
bit volatile Glint_time_flag;
bit Time_set_mode;
bit Pause_flag;
bit reset_flag;
bit reset_mode;
/***********延时程序约10MS****************/

void delay()
{
 unsigned char i,j;
 for(i=0;i<50;i++)

 for(j=0;j<100;j++);
}
  

/*========================T0中断=============================*/
void timer0() interrupt 1 using 1
{
 unsigned int time;
 unsigned int sndacc;  /*秒累加器*/
 sndacc=sndacc+1;
 
 if(sndacc==4000)
 {
  
  Second_flag=1;

  if(Second_flag==1)//一秒时间到
  {
   time=Time[0]*100+Time[1]*10+Time[2];
   time--;
   Time[0]=time/100;
   Time[1]=(time-(time/100)*100)/10;
   Time[2]=(time-(time/100)*100)%10;
   
 /*  
Time[2]--;

   if(Time[2]==0)
   {
    if(Time[1]!=0)
    {
     Time[1]--;
     Time[2]=9;
    }
    else
     if(Time[0]!=0)
     {
      Time[0]--;
      Time[1]=9;
	  Time[2]=9;
     }
     else
      Time[2]=0;
   } 
*/
   Second_flag=0;
  }
  sndacc=0;
 }
}

void reset()//////////////////////////////////////////////////
{
 while(key_reset==0)
 key_reset=1;
reset_mode=1;
 reset_flag=1;
 dir_flag=1;
 TR0=0;
 Second_flag=0;
 Time_set_mode=0;
 Run_mode=0;
 Pause_flag=0;
 Glint_time_flag=0;
 Counter=0;
 Glint_enable_flag=0;
 Dis_bit_p=0;
 Time[0]=10;
 Time[1]=10;
 Time[2]=10;
 Time[3]=10;
 Time[4]=10;//显示"--"
 key_cycleless=1;
 key_start=1;
 key_reset=1;
 key_set=1;
 key_add=1;
 key_esc=1;

 
}

void interrupt_int0 () interrupt 0 using 3
{
 reset();
}


void pause()
{
 Pause_flag=1;
 Glint_enable_flag=1;
 while(Pause_flag==1)
 {
 TR0=0;

 if(key_start==0)
 {
  delay();
  if(key_start==0)
  {
   while(key_start==0)
   key_start=1;
   TR0=1;
   Pause_flag=0;
   Glint_enable_flag=0;
  }
 }



 }
}

main()
{
 key_cycleless=1;
 key_start=1;
 key_reset=1;
 key_set=1;
 key_add=1;
 key_esc=1;


 if(key_cycleless==0)//如果是无限循环,则显示"--"
 {
  Time[4]=10;
  Time[3]=10;
 }
 
 TMOD&=0xf0;
 TMOD|=0x02;
 TH0=0x1a;//250us
 TL0=0x1a;
 ET0=1;


 TMOD&=0x0f;
 TMOD|=0x10;//T1工作方式1
 TH1=0xf8;
 TL1=0xcd;
 ET1=1;
 TR1=1;
 EA=1;

 IT0=1;
 EX0=1;
 //@@@@reset();
 while(1)
 {

  if(key_set==0)
  {
   delay();
   if(key_set==0)
   {
    while(key_set==0)
    key_set=1;
    Counter=1;//@@@@@@@@@@@@@@@@@@@@@@@@@

    //while(key_set==0)
   // key_set=1;
    time_set();
   }
  }
if(reset_mode==0)
 { if(key_start==0)
  {
   delay();
   if(key_start==0)
   {
    while(key_start==0)
    key_start=1;
    TR0=1;
    run();
   }
  }
 }
  
 }
}

⌨️ 快捷键说明

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