📄 +
字号:
#include <c8051f410.h>
#include<intrins.h>
sbit KEY0=P2^0; //开关
sbit KEY1=P2^1; //加速
sbit KEY2=P2^2; //减速
sbit KEY3=P2^3;//正反转
bit flag=1; //正反
bit flag1=0; //开关
unsigned int zhoushu=5;
//八拍方式驱动,顺序为A AB B BC C CD D DA
unsigned char code fanzhuan[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
unsigned char code zhengzhuan[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};
unsigned int quanshu[]={29907,14953,9969,7476,5981,4984,4272,3738,3323,2990};
void Time0_Init()
{
TMOD=0x01;
CKCON=0x00;
}
void Time0_On()
{
TH0=(65536-quanshu[zhoushu-1])/256;
TL0=(65536-quanshu[zhoushu-1])%256;
TR0=1;
while(!TF0);
TF0=0;
}
void zhuan()
{
unsigned int i;
if(flag){ //flag==1,正转
for(i=0;i<8;i++)
{
P1=zhengzhuan[i];
Time0_On();
}
}
else{
for(i=0;i<8;i++)
{
P1=fanzhuan[i];
Time0_On();
}
}
}
void start_stop()
{
if(!flag1){
while(KEY0);
}
if(!KEY0){
while(!KEY0);
flag1=!flag1; //flag1=1,转,0,不转
}
zhuan();
}
void zhengfan()
{
if(!KEY3){
while(!KEY3);
flag=!flag; //flag2=1 zhengzhuan,,0 fanzhuan
}
}
void speed_up()
{
if(!KEY1){
while(!KEY1);
zhoushu++;
if(zhoushu>10)
zhoushu=10;
}
}
void speed_down()
{
if(!KEY2){
while(!KEY2);
zhoushu--;
if(zhoushu<1)
zhoushu=1;
}
}
void main()
{
PCA0MD &= ~0x40;
PCA0MD = 0x00;
OSCICN = 0x87;
XBR1 = 0x40;
P1MDOUT = 0xFF;
Time0_Init();
while(1)
{
start_stop();
zhengfan();
speed_up();
speed_down();
zhuan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -