📄 daodan.c
字号:
#include<stdio.h>
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#include <string.h>
unsigned char black = 0;
unsigned char speed = 10;
unsigned char input_char[6];
unsigned char state;
unsigned int jiaodu_step=0;
float jiaodu=180;
float yangjiao;
int tempa;
bit to_up; //直流电机是否向上运动,1为向上0为向下
unsigned char counter; //左电机步进数
unsigned int sum_counter;
unsigned int yangjiao_step; //直流电机一次调整步数,
unsigned int second_counter;
unsigned int stop_counter;
unsigned char temp_counter;
unsigned char timer_num = 0;
unsigned char code jin[8]={0xe0,0xc0,0xd0,0x90,0xb0,0x30,0x70,0x60};//{0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
unsigned char code tui[8]={0x60,0x70,0x30,0xb0,0x90,0xd0,0xc0,0xe0};//{0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};
sbit csb=P0^3;
sbit msi=P0^2;
sbit mso=P0^1;
sbit sck=P0^0;
sbit led= P1^0;
sbit key= P1^5;
sbit INT_1=P0^0;
sbit INT_2=P0^1;
void delay(unsigned int num)
{
unsigned int i;
for(i=0;i<10*num;i++);
}
unsigned int init61t()
{
data unsigned char i,m;
data unsigned int j,k;
EA =0;
sck=0;
_nop_();
_nop_();
csb=0;
m=0x10;
for(i=0;i<8;i++)
{
msi=m&0x80;
m=m<<1;
sck=1;
_nop_();
_nop_();
sck=0;
}
k=0;
for(i=0;i<11;i++)
{
k=k<<1;
j=mso;
k=k|j;
sck=1;
_nop_();
_nop_();
sck=0;
}
csb=1;
EA =1;
return k;
}
void fangxiang_proc()
{
float temp_jiaodu=0;
unsigned char i=0;
while(1)
{
if(temp_jiaodu<=jiaodu&&temp_jiaodu+0.9>jiaodu)
{
P2=0XFF;
break;
}
P2=jin[i];
i++;
if(i==8)
i=0;
jiaodu_step++;
temp_jiaodu=temp_jiaodu+0.9;
delay(20);
}
}
yangjiao_proc()
{
float temp_yangjiao=0;
delay(1000);
while(1)
{
EA=1;
if(abs(yangjiao-temp_yangjiao)<2)
{
EA=0;
break;
}
if(abs(yangjiao-temp_yangjiao)<6)
speed=10;
else if(abs(yangjiao-temp_yangjiao)<12)
speed=15;
if(abs(yangjiao-temp_yangjiao)<18)
speed=20;
if(abs(yangjiao-temp_yangjiao)>18)
speed=30;
if(yangjiao_step>500)
{
EA=0;
delay(1000);
temp_yangjiao=0;//init61t();
}
}
}
void reset_proc()
{
unsigned int i;
while(key==0)
{
INT_1=0;
INT_2=1;
delay(30);
}
for(i=0;i<jiaodu_step;i++)
{
P2=tui[i%8];
delay(20);
if(i==jiaodu_step-1)
P2=0xff;
}
}
void adjust_proc()
{
;
}
void t0_int() interrupt 1
{
TR0=1;
TH0=64565/256;
TL0=64565%256;
timer_num ++;
if(to_up)
{
if(timer_num==speed)
{
INT_1=0;
INT_2=0;
}
else if(timer_num==30)
{
yangjiao_step++;
timer_num=0;
INT_1=1;
INT_2=0;
}
}
else
{
if(timer_num==speed)
{
INT_1=0;
INT_2=0;
}
else if(timer_num==30)
{
yangjiao_step++;
timer_num=0;
INT_1=0;
INT_2=1;
}
}
}
main()
{
int k;
k=init61t();
k=k-1024;
TMOD=0x01;
ET0=1;
TH0=64536/256;
TL0=64536%256;
TR0=1;
state=0;
while(1)
{
switch(state)
{
case 0:
led=1;
fangxiang_proc();
state ++;
delay(100);
break;
case 1:
led=1;
yangjiao_proc();
state ++;
break;
case 2:
led=0;
delay(1000);
state++;
break;
case 3:
led=1;
reset_proc();
state ++;
break;
case 4:
led=1;
adjust_proc();
break;
default:
led=1;
state =0;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -