📄 main.c
字号:
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 + -