⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 step4.c

📁 51单片机对步进电机的控制程序,可实现步进电机的正反转
💻 C
字号:
/*
实验接线:
1、P1口的P1.0---P1.3分别接模块上的A、B、C、D。
2、CS244接CS0,244的输入IN0--IN7接平推开关KK1--KK8的输入K1--K8
3、P1.7接单脉冲输出P-。
实验说明:
  全速运行程序后,在数码管的左两位显示设定的步数(16进制),
此数值可通过与244输入端相连的7个平推开关kk1---kk7设定,kk8设定电机转动的方向,
当kk8在(L)侧时,电机将顺时针方向转动,否则将逆时针方向转动。在数码管的显示上,
如果显示的数值位的小数点点亮,表示将逆时针方向转动,否则如果没有点亮,
表示将顺时针方向转动。当设置完成后,按动单脉冲开关Pulse,步进电机开始按照设定
的步数和方向开始转动,同时在数码管的右两位显示电机此次已运行的步数,显示的格式同
左两位。
*/
#include    <reg51.h>
#include    <absacc.h>

#define		input			XBYTE[0xcfa0]
#define		Led_dat			XBYTE[0xcfe8]
#define		Led_ctl			XBYTE[0xcfe9]

bit dir;
void Display_byte(unsigned char loc,unsigned char dat)
  {
   unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
   loc &=0xf;
   Led_ctl = loc|0x80;
   if(dat==0xaa) Led_dat = table[16];
   else if(dir) Led_dat = table[dat>>4]|0x80;     /*显示高4位*/
   else Led_dat = table[dat>>4];
   loc++;
   Led_ctl = loc|0x80;
   if(dat==0xaa) Led_dat = table[16];
   else if(dir) Led_dat = table[dat&0xf]|0x80;     /*显示低4位*/
   else Led_dat = table[dat&0xf]; 
  }
void delay(unsigned int time)
  {
   for(;time>0;time--);
  }
void drv(void)
  {
   unsigned char table[]={6,7,3,11,9,13,12,14};
   unsigned char num;
   for(num=0;num<63;num++)
     {
	  if(!dir) P1=table[num%8];
      else P1=table[7-(num%8)];
	  delay(100);
	 }
  }
void main(void)
  {
   unsigned char dat,tmp;
   Led_ctl = 0xd1;
   while((Led_ctl&0x80)==0x80);
   Led_ctl = 0x31;
   Display_byte(2,0xaa);
   while(1)
     {
      P1=0xff;
	  while((P1&0x80)==0x80)
	    {
		 dat = input;
	     if((dat&0x80)==0x80) dir=1;
	     else dir=0;
	     dat &=0x7f;
	     Display_byte(0,dat);
		}
 	  tmp=0;
	  while(tmp<=dat)
	    {
		 Display_byte(4,tmp);
         drv();
		 delay(6000);
		 tmp++;
		}
	 }
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -