?? dianji.c
字號:
/*===============================================================
程序名稱:四相步進電機驅動程序
-----------------------------------------------
( http://www.bluepw.com http://www.bluepw.cn )
Agni 07-EV開發板 步進電機與單片機接線方式:
注:(1):主芯片AT89S52使用11.0592M晶振
(2):Keil uV3 3.30編譯運行通過
(3):本例程在 Agni 07-EV 開發平臺上成功運行通過
(4):藍極風電子技術網版權所有,只供學習參考,不得應用于商業用途.
==================================================================*/
#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
void keyscan(void);
uchar count=0;
uchar k;
uint t=20000;
bit dir=0;
/***以下定義四相步進電機正轉代碼*/
uchar code zheng[]={0x00,0x30,0x20,0x60,0x40,0xc0,0x80,0x90,0x10};
/***以下定義四相步進電機反轉代碼*/
uchar code fan[]={0x10,0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x00};
/*********主函數*************/
void main(void)
{
TMOD=0x01;
TH0=(65536-t)/256;
TL0=(65536-t)%256;
TR0=1;
ET0=1;
EA=1;
P1=0xf0; //初始化鍵盤
P3_0=1;
P3_1=1;
while(1)
{
keyscan();
switch(k)
{
/*****速度調節*********/
case 2: t+=1000; break;
case 8: t-=1000; break;
/*****速度和轉向調節***/
case 4: dir=0; break;
case 6: dir=1; break;
default:break;
}
}
}
/***********鍵盤去抖動**********/
void key_delay(void)
{
int a;
for(a=0;a<500;a++);
}
/***********鍵盤掃描************/
void keyscan(void) //鍵盤掃描函數
{
uchar a;
P1 = 0xf0; //鍵盤初始化
if(P1!=0xf0) //有鍵按下?
{
key_delay(); //延時
if(P1!=0xf0) //確認真的有鍵按下?
{
P1 = 0xfe; //使行線P2.4為低電平,其余行為高電平
key_delay();
a = P1; //a作為緩存
switch (a) //開始執行行列掃描
{
case 0xee:k=0;break;
case 0xde:k=1;break;
case 0xbe:k=2;break;
case 0x7e:k=3;break;
default:P1 = 0xfd; //使行線P2.5為低電平,其余行為高電平
a = P1;
switch (a)
{
case 0xed:k=4;break;
case 0xdd:k=5;break;
case 0xbd:k=6;break;
case 0x7d:k=7;break;
default:P1 = 0xfb; //使行線P2.6為低電平,其余行為高電平
a = P1;
switch (a)
{
case 0xeb:k=8;break;
case 0xdb:k=9;break;
case 0xbb:k=10;break;
case 0x7b:k=11;break;
default:P1 = 0xf7; //使行線P2.7為低電平,其余行為高電平
a = P1;
switch (a)
{
case 0xe7:k=12;break;
case 0xd7:k=13;break;
case 0xb7:k=14;break;
case 0x77:k=15;break;
default:break;
}
}
}
break;
}
}
}
}
/****使用定時器中斷發出驅動信號*****/
void t0(void) interrupt 1
{
EA=0;
TH0=(65536-t)/256;
TL0=(65536-t)%256;
if(dir==0)
{
P2=zheng[count];
}
else
{
P2=fan[count];
}
count++;
if(count==8)
{
count=0;
}
EA=1;
}
/****************** end ***********************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -