51单片机求大神指导

2019-07-15 13:36发布

//
k1 k2 k3三个按键分别控制3个不同的led点亮方式,求大神指导,到底哪里错了,在松开按键的时候led7 led6 led5 led4这4个灯会闪亮一下
//
#include<reg51.h>
#include <intrins.h>
sbit k1=P0^0;
sbit k2=P0^1;
sbit k3=P0^2;
unsigned char key_s;
unsigned char key_v;
void proe_key(unsigned char key_v);
unsigned char scan_key();
void delayms(unsigned char ms);

void delayms(unsigned char ms)
{
        unsigned char i;
        while(ms--)
        {
        for(i = 0; i < 120; i++);
        }
}

unsigned char scan_key()
{
unsigned char key_s;
key_s=0x00;
key_s|=k3;
key_s<<=2;
key_s|=k2;
key_s<<=1;
key_s|=k1;
return key_s;
}
void proe_key(unsigned char key_v)
{
        if((key_v&0x01)==0)
                {       
                         P2=0Xff;
                         delayms(100);
                         P2=0x00;
                         delayms(100);
                       
                }
        if((key_v&0x02)==0)
                {                         
                         P2=0X0f;
                         delayms(100);
                         P2=0xff;
                         delayms(100);       
                }
        if((key_v&0x04)==0)
                {
                         P2=0Xf0;
                         delayms(100);
                         P2=0x00;
                         delayms(100);
                }

}

void main()
{                 
        key_v=0x07;
        P2=0xff;
        //P0=0x00;
        while(1)
        {
                key_s=scan_key();
                if(key_s!=key_v)
                {
                delayms(10);
                key_s=scan_key();
                        if(key_s!=key_v)
                        {
                        key_v=key_s;
                        delayms(300);
                        proe_key(key_v);
                        }
                }
        }
}       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。