功能:按數字鍵 1~9,按下回車開始轉動,上下鍵配合表示正反轉,按下上鍵表示正轉,下鍵表示反轉;左鍵固定正轉 90 度,右鍵固定反轉 90;esc 鍵終止轉動。中斷服務函式中每隔1ms掃瞄一次按鍵,每間隔2ms將節拍碼送入p1口(beats不為0的情況下);主函式中呼叫keydriver。呼叫關係如圖:
unsigned char code keycodemap[4][4] = , //數字鍵 1、數字鍵 2、數字鍵 3、向上鍵
, //數字鍵 4、數字鍵 5、數字鍵 6、向左鍵
, //數字鍵 7、數字鍵 8、數字鍵 9、向下鍵
//數字鍵 0、esc 鍵、 回車鍵、 向右鍵
};
unsigned char keysta[4][4] = , , ,
};signed long beats = 0; //電機轉動總拍數
unsigned char thr0,tlr0;
void keydriver();
void configtimer(unsigned long ms);
void main()
}void configtimer(unsigned long ms)
void startmotor(signed long angle)
void stopmotor()
void keyaction(unsigned char keycode)
else if(keycode == 0x26) //上鍵,正轉
else if(keycode == 0x28) //下鍵,反轉
else if(keycode == 0x25) //左鍵,正轉90度
else if(keycode == 0x27) //右鍵,反轉90度
else if(keycode == 0x0d) //回車鍵,電機轉動
else //正轉
}else if(keycode == 0x1b) //esc鍵,清零 }
void keydriver()
, ,,
}; for(i=0;i<4;i++)
backup[i][j]=keysta[i][j]; //儲存當前按鍵狀態
}} }
}void keyscan()
,,, };
keybuf[keyout][0] = (keybuf[keyout][0]<<1)| key_in_1;
keybuf[keyout][1] = (keybuf[keyout][1]<<1)| key_in_2;
keybuf[keyout][2] = (keybuf[keyout][2]<<1)| key_in_3;
keybuf[keyout][3] = (keybuf[keyout][3]<<1)| key_in_4;
for(i=0;i<=3;i++)
else if((keybuf[keyout][i]&0x0f)==0x0f)
else
{}} keyout++;
if(keyout>=4)
switch(keyout) //掃瞄下一行
}void turnmotor() //電機轉動函式,在中斷中進行,2ms執行一次
; static signed char index=0; //節拍角標,必須定義成signed型別
unsigned char temp;
if(beats != 0) //全域性變數beats不為0,則轉動
}else //反轉
}temp = p1;
temp = temp&0xf0;
temp = temp|beatcode[index];
p1 = temp;
} else }
void interrupttimer0() interrupt 1
}
Arduino A4988 步進電機
初識arduino,有什麼錯漏的地方請指正.學會使用a4988驅動電機對於diy3d印表機,雕刻機很有幫助。6線一般是兩組,先用萬用表接其中一根線,然後一次點其他線,凡是不同的都是另外一組,每一組有三根線,兩兩測試,電阻最大的是線圈的兩頭抽頭,剩下一根是中心抽頭。實驗目的 arduino與a4988...
28BYJ 48步進電機
今天練習了一下步進電機,看過資料後開始進行程式設計測試,程式設計後能順利讓電機轉動起來,並且數度可調,但是當我想讓電機只轉一圈時問題來了。這款步進電機的減速比為1 64,步進角為5.625 64度。那麼要轉一圈需要的脈衝多少呢,我自己算了算。乙個脈衝轉5.625 64 0.087890625度,所以...
9 4 28BYJ 48步進電機
28byj 48 是 4 相永磁式減速步進電機,其外觀如圖 9 3 所示 圖 9 3 步進電機外觀 我們先來解釋 4 相永磁式 的概念,28byj 48 的內部結構示意圖 9 4 所示。先看裡圈,它上面有 6 個齒,分別標註為 0 5,這個叫做轉子,顧名思義,它是要轉動的,轉子的每個齒上都帶有永久的...