资源描述
/***************************************************************************************
;步进电机驱动程序
;步进电机型号:70BC340-D ,步距角1.5/3
*********************************************************************************************/
#include <AT892051.H>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit dj_a = P1^0;
sbit dj_b = P1^1;
sbit dj_c = P1^2;
sbit gd_s = P3^3;
sbit key_s = P3^4;
sbit key_j = P3^5;
sbit dog = P3^0;
uchar bdata flg;
sbit s_bit = flg^0;
sbit j_bit = flg^1;
uchar data bzjs=0; //计时单元
uchar data dqdjbz=0; //当前电机步骤
uchar data djzt=0; //电机状态01==升 10==降 00==保
uchar data dqdjabc=0x06;
uchar data key=0x30; //键值
//定时单元
uchar data sh=0;
uchar data sl=0;
//脉冲宽度
uchar code s_sj=5; // 升时每拍时间为5毫秒
uchar code j_sj=7; // 降时每拍时间为7毫秒
//电机步骤代码
uchar code dj[6]={0x06,0x04,0x05,0x01,0x03,0x02};
//===================================================
void delay10ms(void)
{
uchar i,j;
for(i=0;i<12;i++)
{
for(j=0;j<200;j++)
{
dog = ~dog;
}
}
}
void timer0() interrupt 1
{
TH0=sh; //
TL0=sl;
if(s_bit)
{
bzjs++;
if(bzjs>(s_sj-1))
{
bzjs = 0;
dqdjbz++;
if(dqdjbz>5)
{
dqdjbz = 0;
}
djzt = 0x01;
dqdjabc = dj[dqdjbz];
}
}
if(j_bit)
{
bzjs++;
if(bzjs>(j_sj-1))
{
bzjs = 0;
if(dqdjbz>0)
{
dqdjbz--;
}
else
{
dqdjbz = 5;
}
djzt = 0x10;
dqdjabc = dj[dqdjbz];
}
}
if((s_bit==0)&&(j_bit==0))
{
bzjs = 0;
if(djzt==0x01)
{
switch(dqdjbz)
{
case 1:dqdjbz = 2;
break;
case 3:dqdjbz = 4;
break;
case 5:dqdjbz = 0;
break;
}
}
if(djzt==0x10)
{
switch(dqdjbz)
{
case 1:dqdjbz = 0;
break;
case 3:dqdjbz = 2;
break;
case 5:dqdjbz = 4;
break;
}
}
djzt = 0;
dqdjabc = dj[dqdjbz];
djzt = 0x00;
}
P1 = dqdjabc;
}
void main(void)
{
P1 = 0xff;
P3 = 0xff;
TMOD = 0x11;
TH0 = 0xfc;
TL0 = 0x73;
TR0 = 1;
ET0 = 1;
dqdjbz = 0x00;
P1 = 0x06;
dqdjabc = 0x06;
flg = 0;
EA = 1;
while(1)
{
key = P3 & 0x30;
if(key != 0)
{
delay10ms();
key = P3 & 0x30;
//key = 0x20;
}
switch(key)
{
case 0x20:s_bit = 1;
j_bit = 0;
break;
case 0x10:j_bit = 1;
s_bit = 0;
break;
case 0x30:s_bit = 0;
j_bit = 0;
break;
}
if(gd_s)
{
sh = 0xfc; //1毫秒
sl = 0x7b;
}
else
{
sh = 0xf8; //2毫秒
sl = 0xe0;
}
}
}
展开阅读全文