📄 direct_motor.c
字号:
//p1.0接J16的2脚,p1.1接J16的1脚
#include<reg52.h>
#include<absacc.h>
#include<stdio.h>
#define COM8279 XBYTE[0x8041]
#define DATA8279 XBYTE[0x8040]
#define uchar unsigned char
#define uint unsigned int
#define up 1
#define down 0
sbit p10=P1^0;
sbit p11=P1^1;
sbit StatusBit= ACC^7;
uint time_up=20; //高电平的延时时间
uchar time_down=45;//低电平的延时时间
uchar time_count=0;//计时间个数
bit up_down=up; //控制正反转
uint freqency; //频率
uint speed;//转速
uchar code tab[23]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, // 0 1 2 3 4 5 //
0x7d,0x07,0x7f,0x6f,0x77,0x7c}; // 6 7 8 9 A b //
void delay_up(uint time_up)//高电平的延时
{
uchar j;
for(j=0;j<time_up;j++)
{
;
}
}
void delay_down(uchar time_down) //低电平的延时
{
uchar j;
for(j=0;j<time_down;j++)
{
;
}
}
void deasil(void) //顺时针旋转
{
p10=1;
delay_up(time_up);
p10=0;
delay_down(time_down);
}
void reverse(void)//逆时针旋转
{
p11=1;
delay_up(time_up);
p11=0;
delay_down(time_down);
}
void control(up_down)//控制正反转
{
if(up_down==up)
{
deasil();
p11=1;
}
else
{
reverse();
p10=1;
}
}
void initial_8279(void)//8279初始化
{
COM8279=0x00;
COM8279=0x5c;
COM8279=0x2a;
COM8279=0x94;
COM8279=0xd1;
}
void initial_interrupt(void)//中断初始化
{
TMOD=0x51;
TH0=0X1E;
TL0=0X58;
TH1=0;
TL1=0;
ET1=1;
TR1=1;
ET0=1;
TR0=1;
EX1=1;
EA=1;
}
void disp(uint num,uchar index) //显示
{
uint up_time;
COM8279=0X90+index;
//freqency=TH1*256+TL1;
// speed=freqency*30;
COM8279=0xd1;
do
{
ACC=COM8279;
}while(StatusBit==1);
while(num>0)
{
DATA8279=tab[num%10];
num=num/10;
}
up_time=time_up;
COM8279=0X94;
DATA8279=tab[up_time%10];
up_time=up_time/10;
COM8279=0X95;
DATA8279=tab[up_time%10];
up_time=up_time/10;
COM8279=0X96;
DATA8279=tab[up_time%10];
}
void time_0(void) interrupt 1//内部中断0
{
uchar i;
i++;
if(i==20)
{
ET0=0;
TR1=0;
EA=0;
i=0;
freqency=TH1*256+TL1;
speed=freqency*30;
disp(speed,0);
TH1=0;
TL1=0;
ET0=1;
TR1=1;
EA=1;
}
TH0=0X1E;
TL0=0X58;
}
void int_1(void) interrupt 2//外部中断1
{
EA=0;
switch(DATA8279)
{
case 0xd9: //8键++
{
time_up++;
}break;
case 0xd8://4键--
{
time_up--;
}break;
case 0xc3://13键控制方向
{
up_down=~up_down;
}break;
default:;
}
EA=1;
}
/***********************************************
主程序
***********************************************/
void main(void)
{
initial_8279();
initial_interrupt();
while(1)
{
control(up_down);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -