1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| #include<reg51.h> #include<string.h> #include<stdio.h> #include<intrins.h> #include<stdlib.h>
#define INT8U unsigned char #define INT16U unsigned int
sbit FFW_KEY=P3^0; sbit REV_KEY=P3^1; sbit STOP_KEY=P3^2;
//0000\_0001 A->AB->B->BC->C->CD->D->AD INT8U code FFW_ARR[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09}; //0000\_1001 AD->D->CD->C->BC->B->AB->A INT8U code REV_ARR[]={0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01};
/\*\* \*延时 \* \*@param x 延时时间 \*@return \*/ void delay\_ms(INT16U x) { INT8U t=120; while(x--) while(t--); }
/\*\* \*顺时针旋转 \* \*@param n 旋转圈数 \*@return \*/ void STEP\_FFW(INT8U n) { INT8U i,j; for(i=0; i<5\*n; i++) { for(j=0; j<8; j++) //8\*9=72 { P1=FFW_ARR[j]; delay\_ms(60); if(STOP_KEY==0) return; } } }
/\*\* \*逆时间旋转 \* \*@param n 旋转圈数 \*@return \*/ void STEP\_REV(INT8U n) { INT8U i,j; for(i=0; i<5\*n; i++) { for(j=0; j<8; j++) { P1=REV_ARR[j]; delay\_ms(60); if(STOP_KEY==0) return; } } }
void main() { INT8U n = 1; while(1) { if(FFW_KEY==0) { P0=0xFE; // 1111\_1110 STEP\_FFW(n); } else if(REV_KEY==0) { P0=0xFD; // 1111\_1101 STEP\_REV(n); } else { P0=0xFB; // 1111\_1011 } } }
|