w小菜才 发表于 2015-3-10 18:45:14

flyword 发表于 2015-3-10 16:27
贴出来程序看看

#include<reg51.h>

#define GPIO_DIG P0
#define GPIO_DIG2 P2
#define GPIO_KEY P1

unsigned char code DIG_CODE={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//È·¶¨ÁÐ

unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü
unsigned char KeyValue1;//ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms();   //ÑÓʱ10ms
void KeyDown();               //¼ì²â°´¼üº¯Êý
void KeyDown1();

/*******************************************************************************
* º¯ Êý Ãû         : main
* º¯Êý¹¦ÄÜ                   : Ö÷º¯Êý
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void main(void)
{
        int i=1;
        while(1)
        {       
                if(i==1)
                {
                        KeyDown();
//if(KeyValuv<9)
                  GPIO_DIG=DIG_CODE;
                 Delay10ms();
                }
                else
                {       
          KeyDown();
          GPIO_DIG2=DIG_CODE;
                        Delay10ms();
                }
                  i=i+1;
        }                               
}
/*******************************************************************************
* º¯ Êý Ãû         : KeyDown
* º¯Êý¹¦ÄÜ                   : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
        {
                Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶
                if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
                {
                       
                        //²âÊÔÁÐ
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //²âÊÔÐÐ
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        while((a<50)&&(GPIO_KEY!=0xf0))       //¼ì²â°´¼üËÉÊÖ¼ì²â
                        {
                                Delay10ms();
                                a++;
                        }
                }
        }
}
/*******************************************************************************
* º¯ Êý Ãû         : Delay10ms
* º¯Êý¹¦ÄÜ                   : ÑÓʱº¯Êý£¬ÑÓʱ10ms
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void Delay10ms(void)   //Îó²î 0us
{
    unsigned char a,b,c;
    for(c=10;c>0;c--)
      for(b=380;b>0;b--)
            for(a=1300;a>0;a--);
}

w小菜才 发表于 2015-3-10 18:45:32

slotg 发表于 2015-3-10 16:14
应该将该程序段贴出来看看吧!

#include<reg51.h>

#define GPIO_DIG P0
#define GPIO_DIG2 P2
#define GPIO_KEY P1

unsigned char code DIG_CODE={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//È·¶¨ÁÐ

unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü
unsigned char KeyValue1;//ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms();   //ÑÓʱ10ms
void KeyDown();               //¼ì²â°´¼üº¯Êý
void KeyDown1();

/*******************************************************************************
* º¯ Êý Ãû         : main
* º¯Êý¹¦ÄÜ                   : Ö÷º¯Êý
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void main(void)
{
        int i=1;
        while(1)
        {       
                if(i==1)
                {
                        KeyDown();
//if(KeyValuv<9)
                  GPIO_DIG=DIG_CODE;
                 Delay10ms();
                }
                else
                {       
          KeyDown();
          GPIO_DIG2=DIG_CODE;
                        Delay10ms();
                }
                  i=i+1;
        }                               
}
/*******************************************************************************
* º¯ Êý Ãû         : KeyDown
* º¯Êý¹¦ÄÜ                   : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
        {
                Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶
                if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
                {
                       
                        //²âÊÔÁÐ
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //²âÊÔÐÐ
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        while((a<50)&&(GPIO_KEY!=0xf0))       //¼ì²â°´¼üËÉÊÖ¼ì²â
                        {
                                Delay10ms();
                                a++;
                        }
                }
        }
}
/*******************************************************************************
* º¯ Êý Ãû         : Delay10ms
* º¯Êý¹¦ÄÜ                   : ÑÓʱº¯Êý£¬ÑÓʱ10ms
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void Delay10ms(void)   //Îó²î 0us
{
    unsigned char a,b,c;
    for(c=10;c>0;c--)
      for(b=380;b>0;b--)
            for(a=1300;a>0;a--);
}

w小菜才 发表于 2015-3-10 18:45:48

#include<reg51.h>

#define GPIO_DIG P0
#define GPIO_DIG2 P2
#define GPIO_KEY P1

unsigned char code DIG_CODE={
0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,//È·¶¨ÐÐ
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//È·¶¨ÁÐ

unsigned char KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼ü
unsigned char KeyValue1;//ÓÃÀ´¶ÁÈ¡°´¼üµÄÖµ
void Delay10ms();   //ÑÓʱ10ms
void KeyDown();               //¼ì²â°´¼üº¯Êý
void KeyDown1();

/*******************************************************************************
* º¯ Êý Ãû         : main
* º¯Êý¹¦ÄÜ                   : Ö÷º¯Êý
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void main(void)
{
        int i=1;
        while(1)
        {       
                if(i==1)
                {
                        KeyDown();
//if(KeyValuv<9)
                  GPIO_DIG=DIG_CODE;
                 Delay10ms();
                }
                else
                {       
          KeyDown();
          GPIO_DIG2=DIG_CODE;
                        Delay10ms();
                }
                  i=i+1;
        }                               
}
/*******************************************************************************
* º¯ Êý Ãû         : KeyDown
* º¯Êý¹¦ÄÜ                   : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
        {
                Delay10ms();//ÑÓʱ10ms½øÐÐÏû¶¶
                if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
                {
                       
                        //²âÊÔÁÐ
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //²âÊÔÐÐ
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        while((a<50)&&(GPIO_KEY!=0xf0))       //¼ì²â°´¼üËÉÊÖ¼ì²â
                        {
                                Delay10ms();
                                a++;
                        }
                }
        }
}
/*******************************************************************************
* º¯ Êý Ãû         : Delay10ms
* º¯Êý¹¦ÄÜ                   : ÑÓʱº¯Êý£¬ÑÓʱ10ms
* Êä    Èë         : ÎÞ
* Êä    ³ö         : ÎÞ
*******************************************************************************/
void Delay10ms(void)   //Îó²î 0us
{
    unsigned char a,b,c;
    for(c=10;c>0;c--)
      for(b=380;b>0;b--)
            for(a=1300;a>0;a--);
}





这是程序

flyword 发表于 2015-3-10 19:05:03

这个程序贴的看不出来,不如截个屏或者上传一下工程,呵呵,不过有延时处有错误,最下面延时的程序 无符号char a,b,c 那样 a,b,c 最大255(8位字符),你给b,c赋值有问题。

w小菜才 发表于 2015-3-10 19:09:22

flyword 发表于 2015-3-10 19:05
这个程序贴的看不出来,不如截个屏或者上传一下工程,呵呵,不过有延时处有错误,最下面延时的程序 无符号c ...

呵呵,我已经把b,c改了,我传一个工程上去,大神帮我看看哈

w小菜才 发表于 2015-3-10 19:10:36

flyword 发表于 2015-3-10 19:05
这个程序贴的看不出来,不如截个屏或者上传一下工程,呵呵,不过有延时处有错误,最下面延时的程序 无符号c ...

请帮我看看

flyword 发表于 2015-3-10 19:45:32

参考这个,代码优化的问题。将代码优化等级由8降低到7,6就可以了。
https://wenku.baidu.com/link?url=uEHXnskWO-NJeiqWzArFvmgnsWFIj9x0S0WWUeSSLEGU2tbCFMBCUsGv4nfOdqseXzP58yiU_O5t0mjkXsNqxMegqSLgNzQm4GoYbndI8ui

w小菜才 发表于 2015-3-10 19:48:13

flyword 发表于 2015-3-10 19:45
参考这个,代码优化的问题。将代码优化等级由8降低到7,6就可以了。
https://wenku.baidu.com/link?url=uEHXn ...

恩恩,谢谢。

_ilikerome_ 发表于 2015-3-11 09:38:51

哪一行是98行呀,LZ指示一下。
页: 1 [2]
查看完整版本: 求教这个问题怎么解决