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