C语言程序源代码
#include <REGX51.H> // 51寄存器定义
#include "intrins.h"
#define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相
#define discode P0 //显示代码控制端口
#define uchar unsigned char //定义无符号型变量
#define uint unsigned int
sbit en_dm=P3^0; //显示代码锁存控制
sbit en_wk=P3^1; //位控锁存控制
uchar code corotation[4]= {0x03,0x06,0x0c,0x09};//电机正转
uchar code rollback[4]={0x0c,0x06,0x03,0x09}; //电机反转
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示字段
uint code Levspeed[5]={500,400,300,200,100};//电机速度等级
uchar Hscan,speedcount;//Hscan行扫描,speedcount 速度等级计数
uint uu; //频率计数
uint step,setstep; //step:电机步伐计数,setstep:手动设置电机步伐
uint speed=500; //电机初始速度
uchar count;
uchar flag[5];
uchar butcount; //按键次数
//****************************************
//flag[0] 正转标志
//flag[1] 反转标志
//flag[2] 加速标志
//flag[3] 减速标志
//flag[4] 设置标志
//****************************************
Delay1mS(unsigned int tt) //延时1ms
{
unsigned char i;
while(tt--)
for(i=113;i>0;i--);
}
keyscan() //键盘扫描
{
P2=0xf0; //把oxfe赋值给P2口
if(P2!=0xf0) //如果P2口的值不等于0xfe
{
Delay1mS(150);//调用延时函数
Hscan=0xfe;
P2=Hscan;
while((Hscan&0x10)!=0)
{
P2=Hscan;
if((P2&0xf0)!=0xf0)
return P2;
else Hscan=(Hscan<<1)|0x01;
}
}
else return 0;
}
key_val() //按键处理函数
{
uchar key;
key= keyscan();
switch(key)
{
case 0xee: //按键‘7’
//while(P2==0xee);
setstep=setstep*10+7; //步伐数
step=setstep;
butcount++;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0xde: //按键‘8’
//while(P2==0xde);
setstep=setstep*10+8;
butcount++;
step=setstep;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0xbe: //按键‘9’
//while(P2==0xbe);
setstep=setstep*10+9;
butcount++;
step=setstep;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0x7e: //按键‘正转’
while(P2==0x7e); //等待按键松开
flag[0]=0xff; //开启正转标志,关闭反转
flag[1]=0x00;
butcount=0;
speedcount=0;
speed=500;
if(!flag[4]) step=0;
TR0=1;
break;
case 0xed: //按键‘4’
while(P2==0xed);
setstep=setstep*10+4;
butcount++;
step=setstep;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;
case 0xdd: //按键‘5’
//while(P2==0xdd);
setstep=setstep*10+5;
step=setstep;
butcount++;
if(butcount>=5)
{
butcount=0;
setstep=0;
}
break;