本人初学者,做了个用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) 自己先顶下,自己感觉是不是定义那出了问题?还请各位大虾看看多多指教,谢谢。 子函数在main后面,要在主函数前面加上函数声明,void ledshow(unsigned int i); 要么把ledshow函数放在主函数前定义,要么在主函数前面声明一下,按照楼上的那么写。 引用图片【楼主位】chp3833782
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_631823YH0XG3.PNG
(原文件名:捕获.PNG)
页:
[1]