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

📄 main.c

📁 基于LPC2134的在ucos2操作系统下的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
uint16    xifen8[48]={                // 可以转动(300ms 32细分)

  4354,967,4354,3898,1880,3898,
  3493,2691,3493,3154,3368,3154,
  2888,3900,2888,2688,4299,2688,
  2540,4596,2540,2419,4838,2419,
  2298,5080,2298,2150,5377,2150,
  1950,5776,1950,1684,6309,1684,
  1345,6986,1345,940,7796,940,
  4839,8709,483,   0,9677,   0,
};

uint16    xifen9[96]={                 // 可以转动(600ms 64细分)


  4522,479, 4522,4285,952, 4285,
  4056,1411,4056,3836,1850,3836,
  3629,2264,3629,3437,2648,3437,
  3262,2999,3262,3104,3314,3104,
  2964,3594,2964,2842,3838,2842,
  2736,4050,2736,2646,4231,2646,
  2568,4387,2568,2500,4524,2500,
  2438,4646,2438,2381,4761,2381,
  2323,4877,2323,2262,4999,2262,
  2193,5136,2193,2115,5292,2115,
  2025,5473,2025,1919,5685,1919,
  1797,5929,1797,1657,6209,1657,
  1499,6524,1499,1324,6875,1324,
  1132,7260,1132,925, 7674,925,
  706, 8112,706, 476, 8572,476,
  240, 9044,240,   0, 9524,   0
};

uint16    xifen10[96]={               // 可以转动(300ms 64细分)            
      
  2261,239, 2261,2142,476, 2142,
  2028,705, 2028,1918,925, 1918,
  1814,1132,1814,1718,1324,1718,
  1631,1499,1631,1552,1657,1552,
  1482,1797,1482,1421,1919,1421,
  1368,2025,1368,1323,2115,1323,
  1284,2193,1284,1250,2262,1250,
  1219,2323,1219,1190,2381,1190,
  1161,2438,1161,1131,2499,1131,
  1096,2568,1096,1057,2646,1057,
  1012,2736,1012,959, 2842,959,
  898, 2964,898, 828, 3104,828,
  749, 3262,749, 662, 3437,662,
  566, 3629,566, 462, 3836,462,
  352, 4056,352, 238, 4285,238,
  120, 4522,120, 0,   4762,0
};

uint16   xifen12[96]={              // 83 85  可以转动(64细分)

  2264,234,2264,2148,466,2148,
  2032,698,2032,1917,928,1917,
  1803,1156,1803,1690,1382,1690,
  1579,1604,1579,1470,1822,1470,
  1363,2036,1363,1259,2244,1259,
  1157,2448,1157,1058,2644,1058,
  963,2836,963,871,3020,871,
  783,3196,783,698,3366,698,
  617,3528,617,541,3680,541,
  469,3824,469,402,3958,402,
  339,4084,339,282,4198,282,
  230,4302,230,182,4398,182,
  140,4482,140,103,4556,103,
  72,4618,72,46,4670,46,
  26,4710,26,12,4738,12,
  3,4756,3,0,4762,0
};
uint16   xifen11[192]={             // 188 190 可以转动(300ms 128细分,不产生振动但是产生啸叫)
  1151,60, 1151,1122,118,1122,
  1092,178,1092,1063,236,1063,
  1034,294,1034,1006,350,1006,
  978,406, 978,952,458, 952,
  925,510, 925,900,562, 900,
  876,610, 876,853,656, 853,
  830,702, 830,809,744, 809,
  789,784, 789,770,822, 770,
  752,858, 752,735,892, 735,
  720,922, 720,705,952, 705,
  691,980, 691,679,1004,679,
  667,1028,667,656,1050,656,
  646,1070,646,637,1088,637,
  628,1106,628,620,1122,620,
  612,1138,612,605,1152,605,
  598,1166,598,590,1182,590,
  583,1196,583,576,1210,576,
  569,1224,569,561,1240,561,
  553,1256,553,544,1274,544,
  535,1292,535,525,1312,525,
  514,1334,514,502,1358,502,
  490,1382,490,476,1410,476,
  461,1440,461,446,1470,446,
  429,1504,429,411,1540,411,
  392,1578,392,372,1618,372,
  356,1660,356,328,1706,328,
  305,1752,305,281,1800,281,
  255,1852,255,229,1904,229,
  203,1956,203,175,2012,175,
  147,2068,147,118,2126,118,
  89, 2184,89, 59, 2243,59,
  29, 2302,29, 0,  2362,0
};
uint16 xifenbiao[360]={

  377,30, 377,372,40, 372,367,50, 367,
  363,59, 363,358,69, 358,353,78, 353,
  348,88, 348,343,98, 343,339,107,339,
  334,116,334,329,126,329,325,134,325,
  320,144,320,316,152,316,312,161,312,
  307,170,307,303,178,303,299,186,299,
  295,194,295,291,202,291,287,210,287,
  283,218,283,279,226,279,276,233,276,
  272,240,272,269,247,516,265,254,265,
  262,260,262,259,266,259,256,273,256,
  252,279,252,250,285,250,247,290,247,
  244,296,244,241,302,241,239,306,239,
  236,312,236,234,316,234,232,320,232,
  229,326,229,227,330,227,225,334,225,
  223,338,223,221,342,221,220,345,220,
  218,348,218,216,352,216,214,356,214,
  213,358,213,211,363,211,210,364,210,
  209,367,209,207,370,207,206,372,206,
  204,376,204,203,378,203,202,380,202,
  201,382,201,200,385,200,198,388,198,
  197,390,197,196,392,196,194,395,194,
  193,398,193,192,400,192,191,402,191,
  190,404,190,189,406,189,187,410,187,
  186,412,186,185,414,185,183,418,183,
  182,420,182,181,423,181,179,426,179,
  177,430,177,176,432,176,174,430,174,
  172,440,172,171,443,171,169,446,169,
  167,450,167,165,455,165,162,460,162,
  160,464,160,158,468,158,156,473,156,
  153,478,153,151,483,151,148,488,148,
  145,493,145,142,500,142,139,506,139,
  136,512,136,133,518,133,130,524,130,
  127,530,127,123,537,123,120,544,120,
  116,552,116,113,558,113,109,566,109,
  105,574,105,101,582,101,97 ,590,97,
  93 ,598,93, 89 ,606,89, 85 ,614,85,
  81 ,623,81, 76 ,632,76, 72 ,640,72,
  67 ,650,67, 63 ,659,63, 58 ,668,58,
  53 ,678,53, 49 ,687,49, 44 ,696,44,
  39 ,706,39, 34 ,716,34, 30 ,725,30
};



OS_STK	TaskPJ1AStk [TaskStkLengh];         
OS_STK	TaskPJ1BStk [TaskStkLengh];      
OS_STK	TaskPJ3Stk [TaskStkLengh];        


void 	TaskPJ1A(void *pdata);		     
void 	TaskPJ1B(void *pdata);		    
void 	TaskPJ3(void *pdata);		     

OS_EVENT  *Sem;                          
OS_EVENT  *Sem1;                         

int main (void)
{
	OSInit ();																							
	OSTaskCreate (TaskPJ3,(void *)0, &TaskPJ3Stk[TaskStkLengh - 1], 3);	
	OSStart ();
	return 0;															
}
 void Timer1Init()
{
  
    T1IR   = 0xffffffff;                                // 复位中断源
	T1TC   = 0;			                                // 定时器设置为0							
	T1PR   = 0;			                                // 时钟不分频											
	T1MCR  = 0x03;		                                // 设置T0MR0匹配后复位T0TC,并产生中断标志				
										
 }	
	
   
  void PWMInit()
{
  
    PWMIR   = 0x01;                                     // 复位中断源
	PWMTC   = 0;			                            // 定时器设置为0							
	PWMPR   = 0;			                            // 时钟不分频											
	PWMMCR  = 0x03;		                                // 设置T0MR0匹配后复位T0TC,并产生中断标志				
									
 }	
	
   
/*********************************************************************************************************
**                                           TaskPJ1B
                                     等待消息,并改变PWM占空比
********************************************************************************************************/
void TaskPJ1B(void *pdata)
{
   uint32  i,j;
   uint8   b=1,err;
   pdata = pdata;
  
  	                      
while(1)
 { 
     
    for(i=0;i<100;i++)
     { 
        for(j=0;j<=54;j=j+3)
          {
             IO0CLR = (tab1[b]&0x0000000f)<<20;
             T1MR0  = TT*(xf9s[j])*200000;         
             T1TC   = 0;			                 
             T1TCR  = 0x01;	  	                               
            
             OSSemPend(Sem,0,&err);                 
             T1TCR  = 0x00;	  	                   
             IO0SET = (tab1[b]&0x0000000f)<<20;
             T1MR0  =  TT*(xf9s[j+1])*200000;       
             T1TC   = 0;			                 	
             T1TCR  = 0x01;	  	                     
             OSSemPend(Sem,0,&err);                  
             T1TCR  = 0x00;	  	                       
             IO0CLR = (tab1[b]&0x0000000f)<<20;
            
             T1MR0  =  TT*(xf9s[j+2])*200000;      
             T1TC   = 0;			               
             T1TCR  = 0x01;	  	                     
             OSSemPend(Sem,0,&err);                 
             T1TCR  = 0x00;	  	                 
          }
        b++;
        if(b==4)b=0;
     }
  } 
 }   
/*********************************************************************************************************
**                                           TaskPJ1A
                                     等待消息,并改变PWM占空比
********************************************************************************************************/

void TaskPJ1A(void *pdata)
{
   uint32  i,j;
   uint8   a=0,err;
   pdata = pdata;
  
   OSTaskCreate (TaskPJ1B,(void *)0, &TaskPJ1BStk[TaskStkLengh - 1], 7);	                      
while(1)
 { 
     
    for(i=0;i<100;i++)
     { 
        for(j=0;j<=54;j=j+3)
          {
             IO0CLR = (tab1[a]&0x0000000f)<<20;
             PWMMR0  = TT*(xf9x[j])*200000;                  
             PWMTC   = 0;			               
             PWMTCR  = 0x01;	  	                          
            
             OSSemPend(Sem1,0,&err);                  
             PWMTCR  = 0x00;	  	                     
             IO0SET = (tab1[a]&0x0000000f)<<20;
             PWMMR0  =  TT*(xf9x[j+1])*200000;            
             PWMTC   = 0;			                 
             PWMTCR  = 0x01;	  	                    
             OSSemPend(Sem1,0,&err);                 
             PWMTCR  = 0x00;	  	                 
             IO0CLR = (tab1[a]&0x0000000f)<<20;
            
             PWMMR0  =  TT*(xf9x[j+2])*200000;                   
             PWMTC   = 0;			                
             PWMTCR  = 0x01;	  	                    
             OSSemPend(Sem1,0,&err);                 
             PWMTCR  = 0x00;	  	                    
          }
        a++;
        if(a==4)a=0;
     }
  } 
 }   
        
      
void TaskPJ3(void *pdata)
{
   uint32  i,j;
   uint8  b=0,err;
   pdata = pdata;
   TargetInit ();
   PINSEL2= 0x00000000; 
   IO1DIR = 0x00000000;
   IO0DIR = 0xffffffff;  
   Timer1Init();
   PWMInit();                                 
   Sem=OSSemCreate(0);                       
   Sem1=OSSemCreate(0);   
   OSTaskCreate (TaskPJ1A,(void *)0, &TaskPJ1AStk[TaskStkLengh - 1], 5);	
  while(1)
  {     
   for(i=0;i<100;i++)
    { 
     IO0SET = (tab2[b]&0x0000000f)<<28;
     OSTimeDlyHMSM(0,0,0,300);
     IO0CLR = (tab2[b]&0x0000000f)<<28;    
     b++;
     if(b==4)b=0;
    }
  }

}	

void  Timer1_Exception(void)
{  
   OS_ENTER_CRITICAL();  
   T1IR=0x01;           
   VICVectAddr=0;       
   OS_EXIT_CRITICAL();  
   OSSemPost(Sem);  
}
    			
void  PWM_Exception(void)
{  
   OS_ENTER_CRITICAL();   
   PWMIR=0x01;            
   VICVectAddr=0;        
   OS_EXIT_CRITICAL();  
   OSSemPost(Sem1);  
}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

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