#include<iom8v.h>
#include<macros.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define mclk 7372800
#define pai 3.1415926
#define step_l 0.00375
#define step_r 0.00375
uint a,b,c,d=0;
uint i,rdata,flag,num=0;
uint line_done =0,circularity_done=0;
float right_flag=0,left_flag=0; //正反转标志
uint left_number=0,right_number=0; //脉冲个数
int left_index=0,right_index=0; // 步进八相的索引
const uchar step[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
const uchar fstep[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
/*****************************************************
该模块为串口通讯
*****************************************************/
/****
void uart_init(uint baud)
{
UCSR1B|=(1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1);
baud=mclk/16/baud-1;
UBRR1L=baud;
UBRR1H=baud>>8;
UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);
SEI();
}
void uart_sendbyte(uint sdata)
{
while(!UCSR1A&(1<<UDRE1));
UDR1=sdata;
while(!UCSR1A&(1<<TXC1));
UCSR1A&=~(1<<TXC1);
}
#pragma interrupt_handler uart_RX:31
void uart_RX()
{
UCSR1A&=~(1<<RXCIE1);
rdata=UDR1;
num=num+1;
switch(num)
{
case 1:a=rdata;break;
case 2:b=rdata;break;
case 3:c=rdata;break;
case 4:d=rdata;break;
default:break;
}
flag=1;
UCSR1A|=(1<<RXCIE1);
}
***/
/*********************************************************************/
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<950;j++);
}
void bujin_init(void)
{
DDRB=0XFF;
PORTB=0XFF;
DDRC=0XFF;
PORTC=0XFF;
}
/**********************************************************************
函数名称:deal_data
函数类型:void
函数功能:左边步进动
**********************************************************************/
void left_run(void)
{
if(left_flag > 0)
{
PORTB=step[left_index];
delay(2);
PORTB=0;
}
else
{
PORTB=fstep[left_index];
delay(2);
PORTB=0;
}
left_index+=1;
if(left_index==8)
{
left_index=0;
}
}
/**********************************************************************
函数名称:deal_data
函数类型:void
函数功能:右边步进动
**********************************************************************/
void right_run(void)
{
if(right_flag > 0 )
{
PORTC=fstep[right_index];
delay(1);
PORTC=0;
}
else
{
PORTC=step[right_index];
delay(1);
PORTC=0;
}
right_index+=1;
if(right_index==8)
{
right_index=0;
}
}
/*******画点*******************************************/
void drive_motor(float left_legth,float right_legth)
{
left_flag = left_legth;
right_flag = right_legth;
if(right_legth < 0)
{
right_legth = 0- right_legth;
}
if(left_legth < 0)
{
left_legth = 0 - left_legth;
}
while(1)
{
left_run();
//delay(1);
left_number++;
if(left_number >=(left_legth ))
{
left_number =0;
break;
}
}
while(1)
{
right_run();
//delay(1);
right_number++;
if(right_number >= (right_legth ) )
{
right_number =0;
break;
}
}
}
/**画直线*********************/
void draw_line(float x0,float y0,float x1,float y1) //(x0,y0):起点坐标,(x0,y0):停止点坐标
{
float ll,inc_x,inc_y,xx,yy,L_l0,L_r0,L_l,L_r,inc_Ll,inc_Lr,xxx ;
//kk:斜率 cc:初点始常数(yy=kk*xx+cc)
int count_ll,count_l,count_r,i ; //(x0,y0):画直线起点坐标
ll=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)) ; //ll:斜边长度
count_ll=ll/0.5+0.5 ; //count_ll:步数 0.5为像素
inc_x=(x1-x0)/count_ll ; //inc_x:x方向步长
inc_y=(y1-y0)/count_ll ; //inc_y:y方向步长
L_l0=sqrt((x0)*(x0)+(y0)*(y0)) ;//L_l0为左轮绳子的初始长度
L_r0=sqrt((110-x0)*(110-x0)+(y0)*(y0)) ;//L_r0为右轮绳子的初始长度
for(i=1; i<=count_ll; i++)
{xx=inc_x*i+x0 ; //xxx=xx ;//(xx,yy)为画直线中的动态坐标
yy=inc_y*i+y0 ;
L_l=sqrt((xx)*(xx)+(yy)*(yy)) ;//L_l0为左轮绳子的最后长度
L_r=sqrt((110-xx)*(110-xx)+(yy)*(yy)) ;//L_r0为右轮绳子的最后长度
inc_Ll=L_l-L_l0 ;//左绳长度变化值(一小段弧长)
inc_Lr=L_r-L_r0 ;//右绳长度变化值(一小段弧长)
count_l=inc_Ll/step_l+(inc_Ll>=0 ?0.5:-0.5) ;//步进电机每步弧长(厘米)
count_r=inc_Lr/step_r+(inc_Lr>=0 ?0.5:-0.5) ;//右步进电机每步弧长(厘米)
drive_motor(count_l,count_r) ;
delay(50) ; //延时50ms test: x0,y0,x1,y1=10,10,40,40
L_l0=L_l ;
L_r0=L_r ;
}
line_done =1; //直线画完标志
}
/**画圆*********************/
void draw_circularity(float rr,float x0,float y0) //rr:半径,(x0,y0):圆心坐标
{
float L_l,L_r,L_l0,L_r0,inc_Ll,inc_Lr,xx,yy,xxx ;
int count_l,count_r,i ;
L_l0=sqrt((x0+rr)*(x0+rr)+(y0)*(y0)) ;//(x0+rr,y0):画圆起点坐标
L_r0=sqrt((110-x0-rr)*(110-x0-rr)+(y0)*(y0)) ;
for(i=1;i<=360;i++)
{xx=rr*cos(pai*i/180)+x0 ;
//xxx=xx;
yy=rr*sin(pai*i/180)+y0 ;
L_l=sqrt((xx)*(xx)+(yy)*(yy)) ;
L_r=sqrt((110-xx)*(110-xx)+(yy)*(yy)) ;
inc_Ll=L_l-L_l0 ;
inc_Lr=L_r-L_r0 ;
count_l=inc_Ll/step_l+(inc_Ll>=0 ?0.5:-0.5) ; // 左步进电机每步弧长(厘米)
count_r=inc_Lr/step_r+(inc_Lr>=0 ?0.5:-0.5) ; // 右步进电机每步弧长(厘米)
drive_motor(count_l,count_r) ;
delay(3) ; //延时50ms
L_l0=L_l ;
L_r0=L_r ;
}
circularity_done = 1; // 圆画完标志
}
/**********************************************************************
函数名称:deal_data
函数类型:void
函数功能:左边步进动
**********************************************************************/
void main(void)
{
//uart_init(19200);
bujin_init();
while(1)
{
/* if(line_done !=1)
{
draw_line(80,35,60,15) ; //(x0,y0):起点坐标,(x0,y0):停止点坐标
//draw_circularity( a,b,c);
//draw_line(50,45,60,35) ; //(x0,y0):起点坐标,(x0,y0):停止点坐标
//draw_line(60,15,40,35) ; //(x0,y0):起点坐标,(x0,y0):停止点坐标
//draw_line(40,35,60,55) ; //(x0,y0):起点坐标,(x0,y0):停止点坐标
//draw_line(60,55,80,35) ; //(x0,y0):起点坐标,(x0,y0):停止点坐标
}
*/
if(circularity_done != 1)
{
draw_circularity(20,80,35);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
AVR.rar_avr 异步
共548个文件
c:19个
_c:19个
prj:17个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 20 浏览量
2022-09-24
20:58:25
上传
评论
收藏 693KB RAR 举报
温馨提示
基于avr8单片机悬挂系统,两个异步电机控制笔在平面上画图形,开发环境 iccavr
资源详情
资源评论
资源推荐
收起资源包目录
AVR.rar_avr 异步 (548个子文件)
005 0B
010 1KB
chengxu.c.100311194328 1KB
suspension.c.130724115018 6KB
l.c.140509163304 0B
l.c.140509163316 1KB
l.c.140509163350 1KB
l.c.140509163854 1KB
l.c.140509164120 1KB
l.c.140509164452 917B
l.c.140509164502 917B
l.c.140509164526 919B
l.c.140509164544 923B
l.c.140509164622 930B
l.c.140509164752 929B
l.c.140509164808 929B
006.c.140510111224 0B
006.c.140510111324 1KB
006.c.140510111352 1KB
006.c.140510111502 1KB
007.c.140510120852 0B
007.c.140510120904 2KB
007.c.140510121640 1KB
007.c.140510121834 1KB
007.c.140510122032 1KB
007.c.140510122234 1KB
007.c.140510122318 1KB
007.c.140510122324 1KB
007.c.140510122406 1KB
007.c.140510123308 1KB
007.c.140510123438 1KB
007.c.140510123506 1KB
007.c.140510123542 1KB
007.c.140510123642 1KB
007.c.140510123700 1KB
007.c.140510123708 1KB
007.c.140510123716 1KB
007.c.140510123914 1KB
007.c.140510124234 1KB
007.c.140510124434 1KB
007.c.140510124850 1KB
007.c.140510154000 1KB
007.c.140510154958 1KB
007.c.140510155856 1KB
007.c.140510155926 1KB
007.c.140510160238 1KB
007.c.140510160248 1KB
007.c.140510160352 1KB
007.c.140510160542 1KB
007.c.140510160704 1KB
007.c.140510160738 1KB
007.c.140510160854 1KB
007.c.140510161032 1KB
007.c.140510161320 1KB
007.c.140510161548 1KB
007.c.140510161622 1KB
007.c.140510161836 1KB
008.c.140510180844 0B
007.c.140510221632 1KB
007.c.140510221756 1KB
007.c.140510222142 1KB
007.c.140510222422 1KB
007.c.140510222500 1KB
007.c.140510223004 1KB
007.c.140510223236 1KB
007.c.140510223306 1KB
007.c.140510223810 1KB
007.c.140511202004 1KB
008.c.140512155832 6KB
008.c.140512155842 6KB
008.c.140512160354 6KB
008.c.140512160822 6KB
008.c.140512161626 6KB
008.c.140512161734 6KB
008.c.140512162246 6KB
008.c.140512162256 6KB
008.c.140512164300 6KB
008.c.140512165344 6KB
008.c.140512165352 6KB
008.c.140512165358 6KB
008.c.140512165644 6KB
008.c.140512165850 6KB
008.c.140512165950 6KB
008.c.140512170404 6KB
008.c.140512170504 6KB
008.c.140512170624 6KB
008.c.140512170704 6KB
008.c.140512171540 6KB
008.c.140512171550 6KB
008.c.140512172340 6KB
008.c.140512172458 6KB
008.c.140512173756 6KB
008.c.140512181824 6KB
008.c.140512182010 6KB
008.c.140512182322 6KB
008.c.140512182728 6KB
008.c.140512182738 6KB
008.c.140512183520 6KB
008.c.140512193628 6KB
008.c.140512193940 6KB
共 548 条
- 1
- 2
- 3
- 4
- 5
- 6
御道御小黑
- 粉丝: 62
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0