
 
/*--------------------------------------------------------------------------------
      MCU:             STC15W408AS 注意其没有T1,但是有T2
      开发板:             STC15W408AS最小系统板
      晶振:              内部时钟11.0592M,波特率38400
      扩展模块:        -
      软件:            Keil.C51.V9.01
 -------------------------------------------------------------------------------------*/
 #include "STC15.h"
#define u8 unsigned char
 #define u16 unsigned int    
 sbit StepperPin1=P1^2;
 sbit StepperPin2=P1^3;
 sbit StepperPin3=P1^4;
 sbit StepperPin4=P1^5;
void StepmotorDelay(u8 n){
   u16 i;
     for(;n>0;n--)
       for(i=2000;i>0;i--) //不要小于2000
             ;
 }
void Step(void);
 //----------------------------------------------------------   
 //  函数名称:void IniSerialPort(void)   
 //  函数功能:串口初始化   
 //----------------------------------------------------------   
void InitSerialPort(void)
 {
         SCON = 0x50;            //8位数据,可变波特率
     AUXR = 0x14;                //T2为1T模式, 并启动定时器2
     AUXR |= 0x01;               //选择定时器2为串口1的波特率发生器
         T2L = 0xB8;        //设置定时初始值
       T2H = 0xFF;        //设置定时初始值
       ES=1;                     //串口中断开关,采用查询法时不用打开中断   
     EA=1;    
       //PS=1;//高优先级
     REN=1;                  //串口为工作方式1,允许接收数据
 }
 //----------------------------------------------------------   
 //  函数名称:void SerialPortInte(void)
 //  函数功能:串口中断方式接收一个字符
 //----------------------------------------------------------   
 #define Download_command 0xf1 //功能码
void SerialPortInte(void) interrupt 4
 {
     unsigned char dat;
     unsigned int ISP_i,ISP_j;
     
     if(TI==1)
     {
         TI=0;
     }
     else
     {
         RI=0;
         dat=SBUF;
         SBUF=dat;
         if(dat==Download_command)
         {
             for(ISP_j=1000;ISP_j>0;ISP_j--)
               for(ISP_i=123;ISP_i>0;ISP_i--);
             IAP_CONTR =0x60;//软件复位
         }
     }
 }
/************************主函数******************************************************/
 void main()  
 {
   InitSerialPort();
      while(1)
      {
       Step();
             StepmotorDelay(10);
      }
 }  
u8 StepN=1;
 void Step(void) //4 相8 拍
 {
     switch(StepN){
         case 1: StepperPin1=1;
                         StepperPin2=0;
                         StepperPin3=0;
                         StepperPin4=0;
                         break;
         case 2: StepperPin1=1;
                         StepperPin2=1;
                         StepperPin3=0;
                         StepperPin4=0;    
                         break;
         case 3: StepperPin1=0;
                         StepperPin2=1;
                         StepperPin3=0;
                         StepperPin4=0;    
                         break;
         case 4: StepperPin1=0;
                         StepperPin2=1;
                         StepperPin3=1;
                         StepperPin4=0;
                         break;
         case 5: StepperPin1=0;
                         StepperPin2=0;
                         StepperPin3=1;
                         StepperPin4=0;
                         break;
         case 6: StepperPin1=0;
                         StepperPin2=0;
                         StepperPin3=1;
                         StepperPin4=1;
                         break;
         case 7: StepperPin1=0;
                         StepperPin2=0;
                         StepperPin3=0;
                         StepperPin4=1;
                         break;
         case 8: StepperPin1=1;
                         StepperPin2=0;
                         StepperPin3=0;
                         StepperPin4=1;        
                         StepN=0;
                         break;
     default:break;                        
     }
     StepN++;
     StepmotorDelay(1);
}













![[一篇读懂]C语言九讲:线性表应用](https://img-blog.csdnimg.cn/0f1ccad3966d4d979c2d23b88b57256e.png#pic_center)





