是不是delay()中不能放数组呢 跪求啊 在线等
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define GPIO_KEY P1 //独立键盘用P1口
sbit clk=P2^0; // 脉冲信号
sbit cw=P2^1;
sbit en=P2^2;
uchar j,key,k;
uint i;
uint sudu[]={400,800,1200,1300,1500};
void delay(unsigned int t);
unsigned char Key_Scan();
void main()
{
unsigned char keyNum;
while(1)
{
// clk=1;
delay(sudu[i]);
clk=~clk;
// clk=0;
// delay(sudu[i]);
keyNum = Key_Scan(); //调用键盘扫描,
switch(keyNum)
{
case 0xfe:cw=1;break; //正转
case 0xfd:cw=0;break; //反转
case 0xfb:en=1;break; //停止
case 0xf7:en=0;break; //启动
case 0xEF:i++;i%=9;break; //减速
case 0xDF:i--;i%=9;break; //加速
}
}
}
unsigned char Key_Scan()
{
unsigned char keyValue; //保存键值
GPIO_KEY=0XFF;
//--检测按键1--//
if (GPIO_KEY != 0xFF) //检测按键K1是否按下
{
delay(1000); //消除抖动
if (GPIO_KEY != 0xFF) //再次检测按键是否按下
{
keyValue = GPIO_KEY; // keyValue = GPIO_KEY=P1
while(!GPIO_KEY );//按键弹起
}
delay(1000);
while(!GPIO_KEY ); //说明案件真的弹起 *///GPIO_KEY=0XFF;
}
return keyValue; //将读取到键值的值返回
}
void delay(unsigned int t)
{
while(t--);
}
你好 手里实在没有能产生PWM发热硬件 采纳了您的意见 把9改成了5 延时改成了80000 效果好多了 可以调节了 但是还是有缺陷 就是按键觉好像不灵啊 开始时i是不是要给个值呢 要是给了 又要放在什么地方呢 麻烦您看下
追答扫描按键本身就有这个毛病,建议给按键并联个0.1uf~1uf的电容,应该不是按键不灵,如果你每次按下去超过0.5s应该没问题,况且你这个是按键放开以后产生键值,如果没有特殊设计,按键没必要设计成弹起以后才有效果。你这个i的问题还好,毕竟你按255次才会有可能出错,严谨一点的话建议加一句 :
case 0xEF:
i++;
if(i==255)
i=0;
i%=5;
break; //减速
底下加速的依次类推