chp3833782 发表于 2011-4-18 18:35:46

本人初学者,做了个用51控制直流电机,程序出错来请教下大家

请大家看看这个程序,本人改来改去还是有个错。
错误原因:(1)PWM.C(19): warning C206: 'ledshow': missing function-prototype
         (2)PWM.C(19): error C267: 'ledshow': requires ANSI-style prototype

代码如下:                           #include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uintunsigned int
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f, 0x40,0x00};
/************************主程序*************************/
void main ()
{
int i;
TMOD=0x01    ;                                //定时器0设为16位定时
TH0=(65536-40000)/256;//40ms
TL0=(65536-40000)%256;
EA=1                   ;                        //开CPU中断
ET0=1                   ;                        //开T0中断
TR0=1                  ;                        //启动定时器T0
while(1)
{
ledshow(i)             ;                        //数码管显示
keyscan()             ;                        //键盘扫描
}
}

/**********************数码管显示程序********************/
void ledshow(unsigned int i)   
{
disdata=i/1000;                           //百位数
disdata=i%1000/100;                        //十位数
disdata=i%100/10;                        //个位数
disdata=i%10;                                   //小数位
P2=0xf7;P0=0x00;
P0=table[ disdata];
delay(20);
P2=0xfb;P0=0x00;
P0=table1[ disdata];
delay(20);
P2=0xfd;P0=0x00;
P0=table[ disdata];
delay(20);
P2=0xfe;P0=0x00;
P0=table[ disdata];
delay(20);
}
void delay_20()                                //延时20uS
{uchar bt ;
    for(bt=0;bt<100;bt++);
}
/**********************键值扫描函数*************************/
void keyscan()
{
enum keydown kdwn;
P1=0xff;
If((P1&0xff)!=0x1f)
{
delay(1000)         ;                         //延时10ms 消抖
   If((P1&0x1f)!=0x1f)
{
kdwn=P1&0x1f ;
Switch(kdwn)
{
    caseclckws:clokwise( );
    break;                                        //正转
    case antclckws: anticlokwise( );
    break;                                        //反转
    casemstsp: motorstop( );
    break;                                        //急停
    casespdp:speedup( );
    break;                                        //加速
    case spdwn:speeddown( );
    break;                                        //减速
}
}
}
while((P1&0x1f)!=0x1f);
}


/********************TO中断服务程序****************/
void time0_int(void) interrupt 1
{
        time++;
        TH0 = 0xec;
        TL0 = 0x78;
        if(change == 0)
        {
PWM2 = 1;                                               
                if(time == high)
               PWM1=0;
                else if(time == period)
                  {
                        PWM1 = 1;
                        time = 0;
                          }
                                                                   }
                       else
               {            PWM1 = 1;               
                                  if(time == high)
                                     PWM2=0;
                                  else if(time == period)
                                   {
                                   PWM2 = 1;
time = 0;
                             }
}
        }

proteus原理图如附件,数码管用共阴接法,位选端接到P2口(这里有个疑问,直接接到P2口会不会把单片机烧了?)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_631823YH0XG3.PNG
(原文件名:捕获.PNG)

http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_631822JM3EZZ.PNG
(原文件名:捕获.PNG)

chp3833782 发表于 2011-4-18 18:37:51

自己先顶下,自己感觉是不是定义那出了问题?还请各位大虾看看多多指教,谢谢。

sheva21 发表于 2011-4-19 13:57:56

子函数在main后面,要在主函数前面加上函数声明,void ledshow(unsigned int i);

alengend 发表于 2011-4-19 15:10:42

要么把ledshow函数放在主函数前定义,要么在主函数前面声明一下,按照楼上的那么写。

huaziff 发表于 2011-5-20 01:07:18

引用图片【楼主位】chp3833782
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_631823YH0XG3.PNG
(原文件名:捕获.PNG)
页: [1]
查看完整版本: 本人初学者,做了个用51控制直流电机,程序出错来请教下大家