📄 danpianji.txt
字号:
#include "STC89C5x.H"
#define LedData P2 //数码管段码输出端
#define KeyPort P3 //键码输入端
sbit Ledsw1=P3^2; //数码管1选通端
sbit Ledsw2=P3^3; //数码管2选通端
sbit StepDir1=P1^0;
sbit StepClk1=P1^1;
sbit StepFH1=P1^2;
sbit StepDir2=P1^5;
sbit StepClk2=P1^6;
sbit StepFH2=P1^7;
sbit WorkLed1=P1^3;
sbit WorkLed2=P1^4;
unsigned char tmr0_r1,tmr0_r2; //脉冲频率控制变量
unsigned char speed1,speed2; //步进电机速度档位
unsigned char led1,led2; //数码管显示的数据
unsigned char keyval,oldkeyval,key_r;
unsigned char code LedTab[10]={
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/ 0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/ 0x80,/*8*/
0x90,/*9*/
};
void hardinit();
void disp(unsigned char dat1,unsigned char dat2);
void delay1ms(unsigned int time);
void key1();
void key2();
void key3();
void key4();
void main()
{
hardinit();
key_r=0;
while(1)
{
delay1ms(2);
keyval=(~(KeyPort|0x0f))>>4;
if((keyval!=oldkeyval)&&(oldkeyval==0))
{
if(key_r==10)
{
key_r=0;
if(keyval==(~(KeyPort|0x0f))>>4)
{
switch(keyval)
{
case 0x01:{key1();break;} //步进电机1的转速
case 0x02:{key2();break;} //步进电机1的方向
case 0x04:{key3();break;} //步进电机2的转速
case 0x08:{key4();} //步进电机2的方向
}
}
}
else
{
key_r++;
}
}
keyval=oldkeyval;
disp(led1,led2);
}
}
void disp(unsigned char dat1, unsigned char dat2)
{
LedData=LedTab[dat1];
Ledsw1=1;
Ledsw2=0;
delay1ms(2);
LedData=LedTab[dat2];
Ledsw2=1;
Ledsw1=0;
}
void hardinit()
{
TMOD=0x01;
TH0=0xff; //定时1ms,f=11.0592Mhz
TL0=0xa3;
ET0=1;
EA=1;
TR0=1;
StepDir1=0;
StepFH1=0;
StepClk1=0;
StepDir2=0;
StepFH2=0;
StepClk2=0;
speed1=0;
speed2=0;
led1=0;
led2=0;
WorkLed1=1; //关工作指示灯1
WorkLed2=1; //关工作指示灯2
tmr0_r1=0;
tmr0_r2=0;
}
void delay1ms(unsigned int time) //f=11.0592mhz
{
unsigned int i;
for(i=0;i<3*time;i++);
}
void T0_inter() interrupt 1
{
TH0=0xff;
TL0=0xa3;
if(speed1!=0)
{
tmr0_r1++;
if(tmr0_r1==(10-speed1)*20){tmr0_r1=0;StepClk1=~StepClk1;}
}
else
{
tmr0_r1=0;
}
if(speed2!=0)
{
tmr0_r2++;
if(tmr0_r2==(10-speed2)*20){tmr0_r2=0;StepClk2=~StepClk2;}
}
else
{
tmr0_r2=0;
}
}
//////////////////////按键事件处理///////////
void key1()
{
led1++;
if(led1==10) led1=0;
if(led1!=0) WorkLed1=0; else WorkLed1=1;
speed1=led1;
}
void key2()
{
StepDir1=~StepDir1;
}
void key3()
{
led2++;
if(led2==10) led2=0;
if(led2!=0) WorkLed2=0; else WorkLed2=1;
speed2=led2;
}
void key4()
{
StepDir2=~StepDir2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -