全国大学生电子设计大赛-两个步进电机画图
来源:互联网 发布:python httpadapter 编辑:程序博客网 时间:2024/05/16 06:49
这是两个步进电机画图的源程序,用keilc51编译,用单片机实现的
#include<reg52.h>
#include<math.h>
sbit cp1 = P1^0;
sbit cw1 = P1^1;
sbit cp2 = P1^2;
sbit cw2 = P1^3;
float step(float x1,float y1,float x2,float y2)
{
float buj;
float chd1;
chd1 = sqrt((x1) * (x1) + y1 * y1) - sqrt((x2) * (x2) + y2 * y2);
buj = chd1 / 0.01;
return buj;
}
void delay(int i)
{
while(i --);
}
void buj(float buj1,float buj2)
{
int i,j,y,b;
if(buj1 < 0)
{
cw1 = 1;
buj1 = -buj1;
}
else
cw1 = 0;
if(buj2 < 0)
{
cw2 = 1;
buj2 = -buj2;
}
else
cw2 = 0;
if(buj1 > buj2){
b = buj1/buj2;
y = buj1 - b * buj2;
for(i = 1; i <= buj2; i ++){
for(j = 1; j <= b; j ++){
cp1 = 0;
delay(100);
cp1 = 1;
delay(100);
}
cp2 = 0;
delay(100);
cp2 = 1;
delay(100);
if(y != 0){
cp1 = 0;
delay(100);
cp1 = 1;
delay(100);
y --;
}
}
}
else{
b = buj2 / buj1;
y = buj2 - buj1 * b;
for(i = 1; i <= buj1; i ++){
for(j = 1; j <= b; j ++){
cp2 = 0;
delay(100);
cp2 = 1;
delay(100);
}
cp1 = 0;
delay(100);
cp1 = 1;
delay(100);
if(y != 0){
cp2 = 0;
delay(100);
cp2 = 1;
delay(100);
y --;
}
}
}
}
void delay10ms()
{
unsigned int i,j;
for(j = 10; j != 0; j --)
for(i = 125; i != 0; i--);
}
void san() //玫瑰线
{
r = 20 * sin(3 * (-1.5707963));
x = 40 + r * cos(-1.5707963);
y = 50 + r * sin(-1.5707963);
for(i = -1.5707963; i <= 1.5707963; i = i + 3.1415926 / 180){
r = 20 * sin(3 * (i));
w = 40 + r * cos(i);
v = 50 + r * sin(i);
buj1 = step(x + 15,115 - y,w + 15,115 - v);
buj2 = step(95 - x,115 - y,95 - w,115 - v);
buj(buj1,buj2);
x = w;
y = v;
}
}
void yuan(){//画圆
r = 20;
x = 40;
y = 30;
for(i = -1.5707963; i <= 4.85; i = i + 3.1415926 / 180){
w = 40 + r * cos(i);
v = 50 + r * sin(i);
buj1 = step(x + 15,115 - y,w + 15,115 - v);
buj2 = step(95 - x,115 - y,95 - w,115 - v);
buj(buj1,buj2);
x = w;
y = v;
}
}
void star()//星形线
{
float a1,b1;
r = 20;
a1 = 60;
b1 = 30;
x = a1 + r * cos(1.7);
y = b1 + r * sin(1.7);
for(i = 1.7; i <= 3.1415926; i = i + 3.1415926 / 180)
{
w = a1 + r * cos(i);
v = b1 + r * sin(i);
buj1 = step(x + 15,115 - y,w + 15,115 - v);
buj2 = step(95 - x,115 - y,95 - w,115 - v);
buj(buj1,buj2);
x = w;
y = v;
}
a1 = 20;
b1 = 30;
for(i = 0; i <= 1.5707963; i = i + 3.1415926 / 180)
{
w = a1 + r * cos(i);
v = b1 + r * sin(i);
buj1 = step(x + 15,115 - y,w + 15,115 - v);
buj2 = step(95 - x,115 - y,95 - w,115 - v);
buj(buj1,buj2);
x = w;
y = v;
}
a1 = 20;
b1 = 70;
for(i = -1.5707963; i <= 0; i = i + 3.1415926 / 180)
{
w = a1 + r * cos(i);
v = b1 + r * sin(i);
buj1 = step(x + 15,115 - y,w + 15,115 - v);
buj2 = step(95 - x,115 - y,95 - w,115 - v);
buj(buj1,buj2);
x = w;
y = v;
}
a1 = 60;
b1 = 70;
for(i = 3.1415926; i <= 4.65; i = i + 3.1415926 / 180)
{
w = a1 + r * cos(i);
v = b1 + r * sin(i);
buj1 = step(x + 15,115 - y,w + 15,115 - v);
buj2 = step(95 - x,115 - y,95 - w,115 - v);
buj(buj1,buj2);
x = w;
y = v;
}
}
void mysin() //y = zhengfu * sin(pinlv * (x - xiangwei)) + pianzhi //正弦线
{
x = 20;
y = 30;
v = 20 + 1 / 0.13 * 6.6;
r = 1 / 0.13 * 6.2831852 /360;
for(i = 20; i <= v; i = i + r)
{
w = 15 * sin(0.13 * (i - 20)) + 30;
buj1 = step(x + 15,115 - y,i + 15,115 - w);
buj2 = step(95 - x,115 - y,95 - i,115 - w);
buj(buj1,buj2);
x = i;
y = w;
}
}
void list() //直线
{
buj1 = step(54 + 15,115 - 50,40 + 15,115 - 30);
buj2 = step(95 - 54,115 - 50,95 - 40,115 - 30);
buj(buj1,buj2);
}
void main()
{
bit flag;
while(1)
{
do{
while(key);
delay10ms();
if(key == 0)
{
flag = 0;
mysin();
}
else
flag = 1;
}while(flag);
do{
while(key);
delay10ms();
if(key == 0)
{
flag = 0;
star();
}
else
flag = 1;
}while(flag);
do{
while(key);
delay10ms();
if(key == 0)
{
flag = 0;
list();
}
else
flag = 1;
}while(flag);
do{
while(key);
delay10ms();
if(key == 0)
{
flag = 0;
yuan();
}
else
flag = 1;
}while(flag);
do{
while(key);
delay10ms();
if(key == 0)
{
flag = 0;
san();
}
else
flag = 1;
}while(flag);
}
}
- 全国大学生电子设计大赛-两个步进电机画图
- 收藏一下(参加全国大学生电子设计大赛)
- 2015全国大学生电子设计大赛校选---spwm波形发生器理论
- 关于全国大学生电子设计竞赛
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 步进电机
- 电子设计大赛
- 电子设计大赛
- 关键字new
- JS-在客户端进行计算的时候应注意
- Oracle增量备份与恢复
- 序列化(serialization) & 反序列化(de-serialization)- 序列化到内存xml
- SQL 2000 中 ‘’,NULL,的区别
- 全国大学生电子设计大赛-两个步进电机画图
- spring 任务调度总结
- 对文件夹右键菜单添加在此打开命令行
- ora-12514错误及解决
- TEST
- 非弹出式的模态对话框的背景遮罩
- CString 的方法(from:http://blog.csdn.net/lijuwen/archive/2006/03/13/623186.aspx)
- 一生要做的50件事(二)
- 制作单键“F11”恢复系统的说明文档