📄 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 + -