满意答案
saga9078
推荐于 2018.05.09
采纳率:50% 等级:13
已帮助:6668人
少了一个分号;修改如下:
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit s=P1^0; //定义方波输出口
/**************************************************************/
void Delay_1ms(uint x)
{
uint i;
uchar j;
for(i = 0; i
}
/**************************************************************
***************************************************************/
uchar Keyscan(void)
{
uchar i, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
if(P0!=0xff || P2!=0xff)
{
for(i = 0; i
{ //循环8次
if(!(P0 & temp)) //从P0截取1位
return (i ); //返回取得的按键值
temp <<= 1; //判断的位,左移一位
}
for(i = 0; i
{ //循环8次
if(!(P2 & temp)) //从P1截取1位
return (i+8 ); //返回取得的按键值
temp <<= 1; //判断的位,左移一位
}
}
return 16; //判断结束,没有键按下,返回16
}
void Display(uchar k)
{
uchar i;
switch(k)
{
case 0:for(i=800;i<0;i--){ s=~s;Delay_1ms(1);}break;
case 1:for(i=400;i<0;i--){ s=~s;Delay_1ms(2);}break;
case 2:for(i=200;i<0;i--){ s=~s;Delay_1ms(4);}break;
case 3:for(i=100;i<0;i--){ s=~s;Delay_1ms(8);}break;
case 4:for(i=50;i<0;i--){ s=~s;Delay_1ms(16);}break;
case 5:for(i=25;i<0;i--){ s=~s;Delay_1ms(32);}break;
case 6:for(i=5;i<0;i--){ s=~s;Delay_1ms(160);}break;
case 7:for(i=160;i<0;i--){ s=~s;Delay_1ms(5);}break;
case 8:for(i=32;i<0;i--){ s=~s;Delay_1ms(25);}break;
case 9:for(i=16;i<0;i--){ s=~s;Delay_1ms(50);}break;
case 10:for(i=8;i<0;i--){ s=~s;Delay_1ms(100);}break;
case 11:for(i=4;i<0;i--){ s=~s;Delay_1ms(200);}break;
case 12:for(i=2;i<0;i--){ s=~s;Delay_1ms(100);}break;
case 13:for(i=10;i<0;i--){ s=~s;Delay_1ms(80);}break;
case 14:for(i=20;i<0;i--){ s=~s;Delay_1ms(40);}break;
case 15:for(i=40;i<0;i--){ s=~s;Delay_1ms(20);}break;
default:s=1;
}
}
void Main(void)
{
uchar Key_Value = 16, Key_Temp1, Key_Temp2; //两次读出的键值
while(1)
{
//---------以下读入按键、消抖、等待按键释放
P1 = 0xff;
Key_Temp1 = Keyscan(); //先读入按键
if(Key_Temp1 != 16)
{ //如果有键按下
Delay_1ms(10); //延时一下
Key_Temp2 = Keyscan(); //再读一次按键
if (Key_Temp1 == Key_Temp2)
{//必须是两次相等
Key_Value = Key_Temp1; //才保存下来,这就是消除抖动
while(Keyscan()
{Display(Key_Value);} //蜂鸣器鸣叫
}
}
Display(16); //不发声
}
}
12分享举报