📄 main.c
字号:
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 TaskPJ1Stk [TaskStkLengh]; // 定义用户任务0的堆栈
OS_STK TaskPJ3Stk [TaskStkLengh]; // 定义用户任务0的堆栈
void TaskPJ1(void *pdata); // PJ任务
void TaskPJ3(void *pdata); // PJ任务
OS_EVENT *Sem; // 定义信号量
int main (void)
{
OSInit ();
OSTaskCreate (TaskPJ3,(void *)0, &TaskPJ3Stk[TaskStkLengh - 1], 3);
OSStart ();
return 0;
}
void Timer1Init()
{
/*进行T1定时器模块的设置*/
T1IR = 0xffffffff; // 复位中断源
T1TC = 0; // 定时器设置为0
T1PR = 0; // 时钟不分频
T1MCR = 0x03; // 设置T0MR0匹配后复位T0TC,并产生中断标志
//T1MR0 = (Fpclk/1000000)*x; // 10m秒钟定时
}
/*********************************************************************************************************
** TaskPJ
等待消息,并改变PWM占空比
********************************************************************************************************/
void TaskPJ1(void *pdata)
{
uint32 i,j;
uint8 a=0,err;
pdata = pdata;
/*TargetInit ();
PINSEL2= 0x00000000;
IO1DIR = 0x00000000;
IO0DIR = 0xffffffff;
Timer1Init();
GUI_Initialize(); // 初始化LCM
GUI_SetColor(1, 0); // 设置前景色和背景色
Sem=OSSemCreate(0); // 创建信号量*/
VICIntEnable=1<<5; // 开T1的中断
while(1)
{
for(i=0;i<100;i++)
{
for(j=0;j<=45;j=j+3)
{
IO0CLR = (tab1[a]&0x0000000f)<<20;
T1MR0 = TT*(xf6[j])*100000; // 10m秒钟定时
T1TC = 0; // 定时器设置为0
T1TCR = 0x01; // 开定时器T1
OSSemPend(Sem,0,&err); // 等待信号量
T1TCR = 0x00; // 开定时器T1
IO0SET = (tab1[a]&0x0000000f)<<20;
T1MR0 = TT*(xf6[j+1])*100000; // 10m秒钟定时
T1TC = 0; // 定时器设置为0
T1TCR = 0x01; // 开定时器T1
OSSemPend(Sem,0,&err); // 等待信号量
T1TCR = 0x00; // 关定时器T1
IO0CLR = (tab1[a]&0x0000000f)<<20;
T1MR0 = TT*(xf6[j+2])*100000; // 10m秒钟定时
T1TC = 0; // 定时器设置为0
T1TCR = 0x01; // 开定时器T1
OSSemPend(Sem,0,&err); // 等待信号量
T1TCR = 0x00; // 关定时器T1
}
a++;
if(a==4)a=0;
}
/* for(j=0;j<=93;j=j+3)
{
IO0CLR = (tab1[a]&0x0000000f)<<20;
T1MR0 = TT*(xf6[j])*600000; // 10m秒钟定时
T1TC = 0; // 定时器设置为0
T1TCR = 0x01; // 开定时器T1
OSSemPend(Sem,0,&err); // 等待信号量
T1TCR = 0x00; // 开定时器T1
IO0SET = (tab1[a]&0x0000000f)<<20;
T1MR0 = TT*(xf6[j+1])*600000; // 10m秒钟定时
T1TC = 0; // 定时器设置为0
T1TCR = 0x01; // 开定时器T1
OSSemPend(Sem,0,&err); // 等待信号量
T1TCR = 0x00; // 关定时器T1
IO0CLR = (tab1[a]&0x0000000f)<<20;
T1MR0 = TT*(xf6[j+2])*600000; // 10m秒钟定时
T1TC = 0; // 定时器设置为0
T1TCR = 0x01; // 开定时器T1
OSSemPend(Sem,0,&err); // 等待信号量
T1TCR = 0x00; // 关定时器T1
}
//OSTaskDel(5);*/
}
}
void TaskPJ3(void *pdata)
{
uint32 i,j;
uint8 b=0,err;
pdata = pdata;
TargetInit ();
PINSEL2= 0x00000000;
IO1DIR = 0x00000000;
IO0DIR = 0xffffffff;
Timer1Init();
GUI_Initialize(); // 初始化LCM
GUI_SetColor(1, 0); // 设置前景色和背景色
Sem=OSSemCreate(0); // 创建信号量
OSTaskCreate (TaskPJ1,(void *)0, &TaskPJ1Stk[TaskStkLengh - 1], 5);
while(1)
{
for(i=0;i<100;i++)
{
IO0SET = (tab2[b]&0x0000000f)<<28;
OSTimeDlyHMSM(0,0,0,60);
IO0CLR = (tab2[b]&0x0000000f)<<28;
b++;
if(b==4)b=0;
}
}
}
/*触发ISR的事件是包含数据的低频事件;
将数据采集的工作放在关联任务中完成,因为
为10ms产生一次中断所以处理事件的程序放
在关联任务中就可以*/
void Timer1_Exception(void)
{
OS_ENTER_CRITICAL(); // 关中断
T1IR=0x01; // 清除中断源
VICVectAddr=0; // 通知中断控制器中断结束
OS_EXIT_CRITICAL(); // 开中断
OSSemPost(Sem);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -