单片机六自由度机械手控制程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机六自由度机械手控制程序
#include
#include
#include
#define uint unsigned int #define uchar unsigned char #define COM1 XBYTE[0x5800] #define C01 XBYTE[0x4000] #define C11 XBYTE[0x4800]
#define C21 XBYTE[0x5000] #define COM2 XBYTE[0x3800] #define C02 XBYTE[0x2000] #define C12 XBYTE[0x2800] #define C22 XBYTE[0x3000] sbit k1=P3^2;//电机复位按钮
sbit k2=P3^3;//电机选择按钮
sbit k3=P3^4;//电机正转
sbit k4=P3^5;//电机反转
sbit rs=P2^0;
sbit rw=P2^1;
sbit en=P2^2;
uint m=0,i=0;
void reservo();
void lcd(uint i);
void timer(uint n);
void delay(uint n);
void lcd_init();
void lcd_wcom(uchar com); void lcd_wdat(uchar dat); void
lcd_wndat(uint dat); void delay(uint n);
void init(void);
void EXT1_INT(void)
{ EX1=1;
IT1=1;
EA=1;
}
void EXT0_INT()
{ EX0=1;
IT0=1;
EA=1;
}
void EXT1_INT_SRV() interrupt 2 {
i++;
}
//主程序
void main() {
while(1)
{if(k1==0)
{reservo();//电机复位程序break;}
}
EXT1_INT();//中断初始化
if(i!=0&&i%6==0)
i=6;
else
i=i%6;
lcd(i);
timer(i);
}
//电机复位程序
void reservo() {
EXT0_INT();
delay(200); }
void EXT0_INT_SRV() interrupt 0 {
TMOD=0x01;
TH0=0xB1;
TL0=0xE0;
ET0=1;
EA=1;
TR0=1;
COM1=0x30;
C01=0xdc; C01=0x05;
COM1=0x70;
C11=0xdc; C11=0x05;
COM1=0xB0;
C21=0xdc; C21=0X05;
COM2=0x30;
C02=0xdc; C02=0x05;
COM2=0x70;
C12=0xdc; C12=0x05;
COM2=0xB0;
C22=0xdc; C22=0X05; }
//显示屏程序
void lcd(uint i)
{ uint n;
uchar code table[]="servo"; lcd_init();
lcd_wcom(0x80);
for(n=0;n<16;n++)
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x07); switch(i) {
case 1: lcd_wndat(1);
delay(200);
break;
case 2: lcd_wndat(2);
delay(200);
break;
case 3: lcd_wndat(3);
delay(200);
break;
case 4: lcd_wndat(4);
delay(200);
break;
case 5: lcd_wndat(5);
delay(200);
break;
case 6: lcd_wndat(6);
delay(200);
}
}
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com)//1602写命令程序 { rs=0;
rw=0;
P0=com;
delay(5);
en=1;
en=0;
}
void lcd_wdat(uchar dat)//1602写数据程序 { rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
en=0;
}
void lcd_wndat(uint dat)//1602写数据程序 { rs=1;
rw=0;
P0=dat;
delay(5);
en=1;
en=0;
}
void lcd_init() {
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);