?? motor-1.c
字號:
#include <reg52.h>
#include<absacc.h>
#include <intrins.h>
#include <math.h>
#include <stdio.h> /* prototype declarations for I/O functions */
sbit cflag=ACC^7;
sbit L297_L_CW=P1^0;
sbit L297_L_CLK=P1^1;
sbit L297_L_HALF=P1^2;
sbit L297_L_RST=P1^3;
sbit L297_L_CTL=P1^4;
sbit L297_L_EN=P1^5;
sbit L297_R_CW=P1^6;
sbit L297_R_CLK=P1^7;
sbit L297_R_HALF=P3^0;
sbit L297_R_RST=P3^1;
sbit L297_R_CTL=P3^2;
sbit L297_R_EN=P3^4;
#define uchar unsigned char
#define uint unsigned int
#define UNIT 1
#define STEP 26
#define FINE 1
#define SPEED 10
#define ctrl8279 XBYTE[0X0100]
#define data8279 XBYTE[0X0000]
#define XM 15
#define YM 15
uchar x0,y0;
float mx,my;
float LL0,LR0;
float lr=0;
float ll=0;
/*********************************/
void msec(unsigned int x){
uchar j;
while(x--){
for(j=0;j<125;j++)
{;}
}
}
/*************************/
uchar code table[]={0x0fc,0x60,0x0da,0x0f2,0x66,0x0b6,0x0be,0x0e0,0x0fe,0x0f6,0x8e,0x02};
/****************************/
void wdat_8279(uchar d){
msec(1);
do
{ACC=ctrl8279;}
while (cflag==1);
data8279=d;
}
/*******************************************/
void wcom_8279(uchar c){
msec(1);
do
{ACC=ctrl8279;}
while (cflag==1);
ctrl8279=c;
}
/********************/
void init8279()
{
//unsigned char i;
ctrl8279=0x32; //biancheng minglin shizhong :ale 18 fenping 00110010
ctrl8279=0x00; //8zifuxianshi you ru kou ,bianma sao miao jianpan,shuang jian suo
ctrl8279=0xd0; //xianshi ram qing 0,quan zhi 1;
}
/******************/
void display_xy(int x, int y , uchar ch){
if (y<1) y=1;
if (y>2) y=2;
if (x<1) x=1;
if (x>4) x=4;
if (ch<0) ch=0;
if (ch>15) ch=15;
if (y==1) {
switch (x) {
case 1: wcom_8279(0x87);
wdat_8279(table[ch]);
break;
case 2: wcom_8279(0x83);
wdat_8279(table[ch]);
break;
case 3: wcom_8279(0x85);
wdat_8279(table[ch]);
break;
case 4: wcom_8279(0x81);
wdat_8279(table[ch]);
break;
}
}else {
switch (x) {
case 1: wcom_8279(0x86);
wdat_8279(table[ch]);
break;
case 2: wcom_8279(0x82);
wdat_8279(table[ch]);
break;
case 3: wcom_8279(0x84);
wdat_8279(table[ch]);
break;
case 4: wcom_8279(0x80);
wdat_8279(table[ch]);
break;
}
}
}
void display2( int k){
uint s=0,a=0,d=0, m=0,f=0,n=0,i;
uint neg=0;
if(k>-999&&k<=9999)
{
// ctrl8279=0x00;
if (k<0) {
k=-k;
neg=1;
}
s=k/1000;
wcom_8279(0x86);
wdat_8279(table[s]);
a=k%1000;
d=a/100;
wcom_8279(0x82);
i=0x80;
wdat_8279(table[d]);
//
m=a%100;
f=m/10;
wcom_8279(0x84);
i=0x80;
wdat_8279(table[f]);
n=m%10;
wcom_8279(0x80);
wdat_8279(table[n]);
}
if (neg) display_xy(1,2,11);
}
void display1( int k)
{
uint s=0,a=0,d=0, m=0,f=0,n=0,i;
uint neg=0;
if(k>-999&&k<=9999)
{
// ctrl8279=0x00;
if (k<0) {
k=-k;
neg=1;
}
s=k/1000;
wcom_8279(0x87);
wdat_8279(table[s]);
a=k%1000;
d=a/100;
wcom_8279(0x83);
i=0x80;
wdat_8279(table[d]);
//
m=a%100;
f=m/10;
wcom_8279(0x85);
i=0x80;
wdat_8279(table[f]);
n=m%10;
wcom_8279(0x81);
wdat_8279(table[n]);
//
}
if (neg) display_xy(1,1,11);
}
/***********************/
uchar key_pressed(void) //判斷FIFO有鍵按下函數
{uchar k;
k=ctrl8279;
return(k&0x0f); //非0,有鍵按下
}
uchar keyin(void)
{uchar i,k;
while(key_pressed()==0);
wcom_8279(0x40); //讀FIFO RAM命令
i=data8279;
k=0;
switch(i)
{
case 196:
display1(0);
k=0;
break;
case 228:
display1(1);
k=1;
break;
case 192:
display1(2);
k=2;
break;
case 224:
display1(3);
k=3;
break;
case 197:
display1(4);
k=4;
break;
case 229:
display1(5);
k=5;
break;
case 193:
display1(6);
k=6;
break;
case 225:
display1(7);
k=7;
break;
case 198:
display1(8);
k=8;
break;
case 230:
display1(9);
k=9;
break;
case 194:
display1(10);
k=10;
break;
case 226:
display1(11);
k=11;
break;
case 199:
display1(12);
k=12;
break;
case 231:
display1(13);
k=13;
break;
case 195:
display1(14);
k=14;
break;
case 227:
display1(15);
k=15;
break;
}
return(k);
}
/**************************/
void Rmotor(float L){
int i,j;
if (L<0){
L297_L_CW=1;
}else {
L297_L_CW=0;
}
j=abs(STEP*L);
for (i=0;i<j;i++){
L297_L_CLK=0;
msec(SPEED);
L297_L_CLK=1;
msec(SPEED);
}
}
void Lmotor(float L){
int i,j;
if (L>0){
L297_R_CW=1;
}else {
L297_R_CW=0;
}
j=abs(STEP*L);
for (i=0;i<j;i++){
L297_R_CLK=0;
msec(SPEED);
L297_R_CLK=1;
msec(SPEED);
}
}
void clear_led(){
wcom_8279(0xd0);
}
void initL297(){
L297_L_RST=0;
msec(50);
L297_L_RST=1;
L297_L_CTL=1;
L297_L_EN=1;
L297_L_HALF=0;
L297_R_RST=0;
msec(50);
L297_R_RST=1;
L297_R_CTL=1;
L297_R_EN=1;
L297_R_HALF=0;
}
void test(){
uchar i;
initL297();
for (i=0;i<200;i++){
L297_R_CLK=0;
msec(SPEED);
L297_R_CLK=1;
msec(SPEED);
}
for (i=0;i<200;i++){
L297_L_CLK=0;
msec(SPEED);
L297_L_CLK=1;
msec(SPEED);
}
}
int LL(int x, int y){
int r1;
r1=sqrt((15+x)*(15+x)+(115-y)*(115-y));
return r1;
}
int LR(int x, int y){
int r2;
r2=sqrt((95-x)*(95-x)+(115-y)*(115-y));
return r2;
}
void move( int x0, int y0, int x1 ,int y1){
float Ll0,Lr0,Ll1,Lr1;
float i;
Ll0=LL(x0,y0);
Lr0=LR(x0,y0);
Ll1=LL(x1,y1);
Lr1=LR(x1,y1);
i=Ll1-Ll0;
display1(i);
i=Lr1-Lr0;
display2(i);
msec(2000);
Lmotor(Ll1-Ll0);
Rmotor(Lr1-Lr0);
}
/*
void move_step(float x0 , float y0, float x1 , y1,int step) {
float x,y,xs,ys;
int i;
xs=x0;
ys=y0;
x=(x1-x0)/step;
y=(y1-y0)/step;
for (i=0;i<step;i++){
move(xs,ys,xs+x,ys+y);
xs=xs+x;
ys=ys+x;
}
}
*/
bit int_flag;
//extern ReadTemperature(void);
main() {
unsigned int i,j;
float mmx,mmy;
int R=20;
int_flag=0;
IT1=1;
IE=0X84;
init8279();
display1(-230);
display2(-123);
msec(1500);
clear_led();
for(i=1;i<3;i++)
{for(j=1;j<5;j++) {
display_xy(j,i,2);
msec(100);
clear_led();
}
}
display1(0000);
display2(0001);
initL297();
i=0;
mx=20;
my=50;
x0=40;
y0=50;
for (i=0;i<30;i=i+2){
move(i,i,i+2,i+2);
}
move(32,32,15,50);
// move_step(40,50,60,90,10);
mmx=15,mmy=50;
for(mx=40-R;mx<=40+R;mx=mx+1){
my=y0-sqrt(R*R-(mx-x0)*(mx-x0));
move(mmx,mmy,mx,my);
mmx=mx;
mmy=my;
}
}
void int1() interrupt 2{
int_flag=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -