找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2884|回复: 3
收起左侧

为什么单片机主函数中调用不到另一个函数

[复制链接]
ID:345303 发表于 2018-7-11 22:10 | 显示全部楼层 |阅读模式
写的两个方法想拼在一起,主函数是独立按键的程序,里面当按键按下K1去调用另一个程序(步进电机转动的程序),为什么调用不了, 请帮忙看看, 调用motor_ccw()失败。

单片机源程序:
  1. #include "reg52.h"
  2. #include "motor.c"
  3. void delaynms(uint aa);
  4. void motor_ccw();
  5. void motor_cw();
  6. typedef unsigned int u16;
  7. typedef unsigned char u8;
  8. sbit led=P2^0;
  9. sbit K1=P3^1;

  10. void delay(u16 i)
  11. {
  12. while(i--);
  13. }

  14. void keypros()
  15. {
  16.   if(K1==0)
  17. {
  18.   delay(1000);
  19.   if(K1==0)
  20.   {
  21.     led=~led;
  22.   motor_ccw;
  23.   }
  24.   while(!K1);
  25. }
  26. }
  27. void main()
  28. {
  29. while(1)
  30. {
  31.    keypros();
  32. }
  33. }


  34. ---------------------------------------------------------------------------------------------------------------------------------------------------------

  35. #include<reg52.h>
  36. #include<intrins.h>
  37. #define uchar unsigned char
  38. #define uint unsigned int

  39. uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
  40. uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正时钟旋转相序表

  41. void delaynms(uint aa)
  42. {
  43.   uchar bb;
  44.   while(aa--)
  45.   {
  46.    for(bb=0;bb<115;bb++)     //1ms基准延时程序
  47.    {
  48.     ;
  49.    }
  50.   }

  51. }

  52. void motor_ccw()

  53. {
  54.   uchar i,j,k;
  55.   for(k=0;k<128;k++)
  56.   {
  57.   for(j=0;j<8;j++)                 //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
  58.   {
  59.   for(i=0;i<8;i++)  //旋转45度
  60.   {
  61.     P1=CCW[i];
  62.      delaynms(1);   //调节转速
  63. }
  64.   }
  65.   }
  66.   P1=0xf0;
  67. }

  68. void motor_cw()
  69. {
  70.   uchar i,j,k;
  71.   for(k=0;k<128;k++)
  72.   {
  73.   for(j=0;j<8;j++)
  74.   {
  75.   for(i=0;i<8;i++)  //旋转45度
  76.   {
  77.      P1=CW[i];
  78.     delaynms(1);   //调节转速
  79.   }   
  80.   }
  81.   }
  82.   P1=0xf0;
  83. }
复制代码


回复

使用道具 举报

ID:277550 发表于 2018-7-12 00:12 | 显示全部楼层

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;
#include "motor.h"

sbit led =P2^0;
sbit K1  =P3^1;

void delay(u16 i){
        while(i--);
}

void keypros(){
        if(K1==0){
                delay(1000);
                if(K1==0){
                        led=~led;
                        motor_ccw();
                }
                while(!K1);
        }
}
void main(){
        while(1){
                keypros();
        }
}




//save as motor.h

u8 code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //逆时钟旋转相序表
u8 code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};    //正时钟旋转相序表

void delaynms(u16 aa){
        u8 bb;
        while(aa--){
                for(bb=0;bb<115;bb++){     //1ms基准延时程序
                        ;
                }
        }
}

void motor_ccw(){
        u8 i,j,k;
        for(k=0;k<128;k++){
                for(j=0;j<8;j++){                //电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周
                        for(i=0;i<8;i++){ //旋转45度
                                P1=CCW[i];
                                delaynms(1);   //调节转速
                        }
                }
        }
        P1=0xf0;
}

void motor_cw(){
        u8 i,j,k;
        for(k=0;k<128;k++){
                for(j=0;j<8;j++){
                        for(i=0;i<8;i++){  //旋转45度
                                P1=CW[i];
                                delaynms(1);   //调节转速
                        }   
                }
        }
        P1=0xf0;
}


//////////////
///////////虽然没有什么意义,但这样写法是可以的
///////////////
回复

使用道具 举报

ID:368247 发表于 2018-7-12 02:10 | 显示全部楼层
第三行好像有点问题
回复

使用道具 举报

ID:345303 发表于 2018-7-12 09:23 | 显示全部楼层
解决了,24行少了一对括号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表