找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2980|回复: 17
收起左侧

单片机代码求大神指教,急

  [复制链接]
ID:290732 发表于 2018-3-14 01:23 来自手机 | 显示全部楼层 |阅读模式
板子是stc89c52
代码是我自己写的
可就是出不来,没用,求指教
  1. #include<reg51.h>

  2. typedef unsigned int u16;

  3. #define GPIO_DIG P0
  4. #define GPIO_KEY P1

  5. sbit LSA=P2^2;
  6. sbit LSB=P2^3;
  7. sbit LSC=P2^4;
  8. sbit beep=P1^5;
  9. sbit led=P2^0;


  10. unsigned char code DIG_CODE[17]={
  11. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  12. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  13. unsigned char KeyValue;
  14. unsigned char KeyState;        
  15. unsigned char DisplayData[8];
  16. unsigned char password[8]={1,2,3,4,5,6,7,8};
  17. void Delay10ms();
  18. void KeyDown();
  19. void DigDisplay();
  20. void bijiao();
  21. void zhengque();
  22. void cuowu();



  23. ////////////////////////////////////////
  24. void main(void)
  25. {
  26.         int i;
  27.         KeyState=0;
  28.         for(i=0;i<8;i++)
  29.         {
  30.                 KeyDown();
  31.          if(KeyState==1)
  32.                 {
  33.                         DisplayData[7]=DisplayData[6];
  34.                         DisplayData[6]=DisplayData[5];
  35.                         DisplayData[5]=DisplayData[4];
  36.                         DisplayData[4]=DisplayData[3];
  37.                         DisplayData[3]=DisplayData[2];
  38.                         DisplayData[2]=DisplayData[1];
  39.                         DisplayData[1]=DisplayData[0];
  40.                         DisplayData[0]=DIG_CODE[KeyValue];
  41.                         KeyState=0;
  42.             }
  43.                 DigDisplay();
  44.         }        
  45.                         KeyDown();
  46.          if(KeyState==1)
  47.                 {
  48.                         if(KeyValue==16)
  49.       bijiao();        
  50.                 }
  51. }

  52. ////////////////////////////////////////

  53. //·ù÷
  54. void delay(u16 i)
  55. {
  56.         while(i--);        
  57. }

  58. void shengyin()
  59. {
  60. int num=0;
  61.         EA=1;
  62.         ET0=1;
  63.         TMOD=0x01;
  64.         TH0=(65536-50000)/256;
  65.         TL0=(65536-50000)%256;  
  66. TR0=1;
  67.         
  68.                
  69. beep=~beep;
  70. delay(50);
  71. if(num==10)
  72. beep=1;
  73. }


  74. void timer0() interrupt 1   //50ms
  75. {
  76.         int num;
  77.         TH0=(65536-50000)/256;   
  78.         TL0=(65536-50000)%256;
  79.         num++;
  80. }
  81. ////////////////////////////////////////

  82. //
  83. void bijiao()
  84. {
  85.                         int i,a=0;
  86.                         for(i=0;i<8;i++)
  87.         {
  88.                                 if(DisplayData[i]== password[i])
  89.                         {                a=a+1;   }
  90.                         else
  91.                         {        a=a;                }
  92.   }
  93.                         if(a==8)
  94.                         {                zhengque();        }
  95.                                 else
  96.                         {                cuowu(); }
  97. }        

  98. void zhengque()
  99. {
  100. DisplayData[0]=~0x3f; // "o"
  101. DisplayData[1]=~0x73; // "p"
  102. DisplayData[2]=~0x79; // "E"
  103. DisplayData[3]=~0x54; // "n"
  104.         DigDisplay();
  105. }
  106. void cuowu()
  107. {
  108. DisplayData[2]=~0x79; // "E"
  109. DisplayData[3]=~0x50; // "r"
  110. DisplayData[4]=~0x50; // "r"
  111.         DigDisplay();
  112.         shengyin();
  113. led=1;
  114. }
  115.                  
  116. //
  117. void DigDisplay()
  118. {
  119.         unsigned char i;
  120.         unsigned int j;
  121.         for(i=0;i<8;i++)
  122.         {
  123.                 switch(i)
  124.                 {
  125.                         case(0):
  126.                                 LSA=0;LSB=0;LSC=0; break;
  127.                         case(1):
  128.                                 LSA=1;LSB=0;LSC=0; break;
  129.                         case(2):
  130.                                 LSA=0;LSB=1;LSC=0; break;
  131.                         case(3):
  132.                                 LSA=1;LSB=1;LSC=0; break;
  133.                         case(4):
  134.                                 LSA=0;LSB=0;LSC=1; break;
  135.                         case(5):
  136.                                 LSA=1;LSB=0;LSC=1; break;
  137.                         case(6):
  138.                                 LSA=0;LSB=1;LSC=1; break;
  139.                         case(7):
  140.                                 LSA=1;LSB=1;LSC=1; break;        
  141.                 }
  142.                 GPIO_DIG=DisplayData[i];
  143.                 j=10;                                                
  144.                 while(j--);        
  145.                 GPIO_DIG=0x00;
  146.         }
  147. }


  148. //////////////////////////////////////

  149. //ì°ü
  150. void KeyDown(void)
  151. {
  152.         unsigned int a=0;
  153.         GPIO_KEY=0x0f;
  154.         if(GPIO_KEY!=0x0f)
  155.   {
  156.                 Delay10ms();
  157.                 a++;        
  158.                 a=0;
  159.                 if(GPIO_KEY!=0x0f)
  160.                 {
  161.                         KeyState=1;
  162.                         GPIO_KEY=0X0F;
  163.                          Delay10ms();
  164.                         switch(GPIO_KEY)
  165.                         {
  166.                                 case(0X07):        KeyValue=0;break;
  167.                                 case(0X0b):        KeyValue=1;break;
  168.                                 case(0X0d): KeyValue=2;break;
  169.                                 case(0X0e):        KeyValue=3;break;
  170.                         default:        KeyValue=17;
  171.                         }
  172.                         GPIO_KEY=0XF0;
  173.                         Delay10ms();
  174.                         switch(GPIO_KEY)
  175.                         {
  176.                                 case(0X70):        KeyValue=KeyValue;break;
  177.                                 case(0Xb0):        KeyValue=KeyValue+4;break;
  178.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  179.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  180.                                 default:        KeyValue=17;
  181.                         }
  182.                         while((a<500)&&(GPIO_KEY!=0xf0))
  183.                         {
  184.                                 Delay10ms();
  185.                                 a++;
  186.                         }
  187.                         a=0;
  188.                 }
  189.         }
  190. }


  191. ///////////////////////////////

  192. //±10ms
  193. void Delay10ms(void)   
  194. {
  195.     unsigned char a,b,c;
  196.     for(c=1;c>0;c--)
  197.         for(b=38;b>0;b--)
  198.             for(a=130;a>0;a--);
  199. }
复制代码

评分

参与人数 1黑币 +5 收起 理由
dsjfadsjf + 5 淡定

查看全部评分

回复

使用道具 举报

ID:111634 发表于 2018-3-14 08:01 | 显示全部楼层
神仙也看不懂!
回复

使用道具 举报

ID:273292 发表于 2018-3-14 08:37 | 显示全部楼层
具体实现功能你也没说啊,怎么看
回复

使用道具 举报

ID:291623 发表于 2018-3-14 09:26 | 显示全部楼层
这么长的代码 注释你也不写 没法看啊
回复

使用道具 举报

ID:105206 发表于 2018-3-14 11:21 | 显示全部楼层
说说你的原理。要达到的要求。
回复

使用道具 举报

ID:291105 发表于 2018-3-14 11:34 | 显示全部楼层
先把你需要实现的功能说出来,才好理解啊
回复

使用道具 举报

ID:291750 发表于 2018-3-14 12:50 | 显示全部楼层
路过,没注释啊
回复

使用道具 举报

ID:282439 发表于 2018-3-14 14:14 | 显示全部楼层
这个没有注释的程序,让HR一看,该怎么组织团队合作呢?
回复

使用道具 举报

ID:7485 发表于 2018-3-14 14:42 | 显示全部楼层
这个问题提的让人蒙......
回复

使用道具 举报

ID:291815 发表于 2018-3-14 15:05 | 显示全部楼层
要求是什么啊
回复

使用道具 举报

ID:291810 发表于 2018-3-14 15:06 | 显示全部楼层
神仙也许能看懂
回复

使用道具 举报

ID:212149 发表于 2018-3-14 15:40 | 显示全部楼层
大概看了一下,也没仔细看。我猜这应该是一个矩阵键盘的扫描程序,当扫描到键盘上的按键按下的时,将数码管显示的数字进行移位操作,不知道是不是这样的。这里我发现了几个楼主写的代码的问题,第一个是主函数中没有while(1)死循环,导致的是主函数死循环,按键扫描一般来说都是一直循环按键扫描函数,而楼主写的是for(i=0;i<8;i++)     KeyDown(); 这里只执行了8次,可能按键按下的时候没有扫描到,这里是第一个需要注意的问题。第二个问题是void DigDisplay()这个函数中j=10;   while(j--); 这个数码管显示时间太短了,不足以达到视觉暂留的时间,如果看不见数码管显示可能是这个问题(我也是猜的)。在就给一个代码来说就看出这么多了。楼主可以参考一下
回复

使用道具 举报

ID:291842 发表于 2018-3-14 15:51 | 显示全部楼层
你可以注释一下,这样就清楚了
回复

使用道具 举报

ID:164602 发表于 2018-3-14 16:03 | 显示全部楼层
现在,你的程序可以显示了!
#include<reg51.h>

typedef unsigned int u16;

#define GPIO_DIG P0
#define GPIO_KEY P1

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P1^5;
sbit led=P2^0;


unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char KeyValue;
unsigned char KeyState;        
unsigned char DisplayData[8];
unsigned char password[8]={1,2,3,4,5,6,7,8};
void Delay10ms();
void KeyDown();
void DigDisplay();
void bijiao();
void zhengque();
void cuowu();



////////////////////////////////////////
void main(void)
{
        int i;
        KeyState=0;
    while(1)//你原来没有的语句,这样好点
        {
            for(i=0;i<8;i++)
        {
                KeyDown();
         if(KeyState==1)
                {
                        DisplayData[7]=DisplayData[6];
                        DisplayData[6]=DisplayData[5];
                        DisplayData[5]=DisplayData[4];
                        DisplayData[4]=DisplayData[3];
                        DisplayData[3]=DisplayData[2];
                        DisplayData[2]=DisplayData[1];
                        DisplayData[1]=DisplayData[0];
                        DisplayData[0]=DIG_CODE[KeyValue];
                        KeyState=0;
            }
//                DigDisplay();//你原来写的位置
        }        
                        KeyDown();
         if(KeyState==1)
                {
                        if(KeyValue==16)//没有比较的原因在这里,因为矩阵键盘永远也没有16这个值,0~15共16个键。改成15也不能比较,因为你的程序
//路不能啊。我看懂你的程序了:输入一个相当于密码的东西,与预设值对比。是吧,但你的程序是执行不了的。因为你的程序没有在输入密码时
//等待,你想像是for八次,输入8个值,其实程序早不知道跑哪去了,执行按键程序,没按键,程序会继续执行,不会等你(你的程序没有这功能)
//我只是将你的程序中,按键、显示部分修改了一下,没有修改“密码”部分,你再好好想想吧,看得出,你经验不多,就是要让你自己想通。
      bijiao();        
                }
                DigDisplay();//我改写的位置
        }//新增加语句的另一半括号
}

////////////////////////////////////////

//·ù÷
void delay(u16 i)
{
        while(i--);        
}

void shengyin()
{
int num=0;
        EA=1;
        ET0=1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;  
TR0=1;


beep=~beep;
delay(50);
if(num==10)
beep=1;
}


void timer0() interrupt 1   //50ms
{
        int num;
        TH0=(65536-50000)/256;   
        TL0=(65536-50000)%256;
        num++;
}
////////////////////////////////////////

//
void bijiao()
{
                        int i,a=0;
                        for(i=0;i<8;i++)
        {
                                if(DisplayData== password)
                        {                a=a+1;   }
                        else
                        {        a=a;                }
  }
                        if(a==8)
                        {                zhengque();        }
                                else
                        {                cuowu(); }
}        

void zhengque()
{
DisplayData[0]=~0x3f; // "o"
DisplayData[1]=~0x73; // "p"
DisplayData[2]=~0x79; // "E"
DisplayData[3]=~0x54; // "n"
        DigDisplay();
}
void cuowu()
{
DisplayData[2]=~0x79; // "E"
DisplayData[3]=~0x50; // "r"
DisplayData[4]=~0x50; // "r"
        DigDisplay();
        shengyin();
led=1;
}

//
void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;        
                }
                GPIO_DIG=DisplayData;
                j=10;                                                
                while(j--);        
                GPIO_DIG=0x00;
        }
}


//////////////////////////////////////

//ì°ü
void KeyDown(void)
{
        unsigned int a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
  {
                Delay10ms();
                a++;        
                a=0;
                if(GPIO_KEY!=0x0f)
                {
                        KeyState=1;
                        GPIO_KEY=0X0F;
                         Delay10ms();
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        default:        KeyValue=17;
                        }
                        GPIO_KEY=0XF0;
                        Delay10ms();
                        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;
                                default:        KeyValue=17;
                        }
                        while((a<500)&&(GPIO_KEY!=0xf0))
                        {
                                Delay10ms();
                                a++;
                        }
                        a=0;
                }
        }
}


///////////////////////////////

//±10ms
void Delay10ms(void)   
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

评分

参与人数 1黑币 +10 收起 理由
arthuryu + 10 很给力!

查看全部评分

回复

使用道具 举报

ID:291870 发表于 2018-3-14 16:25 | 显示全部楼层
没有电路图,都不知道你要实现什么功能,怎么看啊
回复

使用道具 举报

ID:164602 发表于 2018-3-14 16:42 | 显示全部楼层
我终于把你的程序调试出来了。
#include<reg51.h>

typedef unsigned int u16;

#define GPIO_DIG P0
#define GPIO_KEY P1

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P1^5;
sbit led=P2^0;


unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char KeyValue;
unsigned char KeyState;        
unsigned char DisplayData[8];
unsigned char password[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void Delay10ms();
void KeyDown();
void DigDisplay();
void bijiao();
void zhengque();
void cuowu();

void main(void)
{
        int i=0;
        KeyState=0;
//            for(i=0;i<8;i++)
                while (i<8)
        {
                KeyDown();
                if(KeyState==1)
            {
                    DisplayData[7]=DisplayData[6];
                DisplayData[6]=DisplayData[5];
                DisplayData[5]=DisplayData[4];
                DisplayData[4]=DisplayData[3];
                DisplayData[3]=DisplayData[2];
                DisplayData[2]=DisplayData[1];
                DisplayData[1]=DisplayData[0];
                DisplayData[0]=DIG_CODE[KeyValue];
                KeyState=0;
                                i++;
            }
                DigDisplay();
        }
                i=0;        
                while (i==0)               
        {
                        KeyDown();
                if(KeyState==1)
            {
                 if(KeyValue==15)
                                 {   
                                         bijiao();
                                        i=1;
                                 }        
            }
                }
                while(1)
                {
                        DigDisplay();
                }
}

////////////////////////////////////////

//·ù÷
void delay(u16 i)
{
        while(i--);        
}

void shengyin()
{
int num=0;
        EA=1;
        ET0=1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;  
TR0=1;


beep=~beep;
delay(50);
if(num==10)
beep=1;
}


void timer0() interrupt 1   //50ms
{
        int num;
        TH0=(65536-50000)/256;   
        TL0=(65536-50000)%256;
        num++;
}
////////////////////////////////////////

//
void bijiao()
{
                        int i,a=0;
                        for(i=0;i<8;i++)
        {
                                if(DisplayData[i]== password[i])
                        {                a=a+1;   }
                        else
                        {        a=a;                }
  }
                        if(a==8)
                        {                zhengque();        }
                                else
                        {                cuowu(); }
}        

void zhengque()
{
DisplayData[3]=~0x3f; // "o"
DisplayData[2]=~0x73; // "p"
DisplayData[1]=~0x79; // "E"
DisplayData[0]=~0x54; // "n"
        DigDisplay();
}
void cuowu()
{
DisplayData[7]=~0x79; // "E"
DisplayData[6]=~0x50; // "r"
DisplayData[5]=~0x50; // "r"
        DigDisplay();
        shengyin();
led=1;
}

//
void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;        
                }
                GPIO_DIG=DisplayData[i];
                j=10;                                                
                while(j--);        
                GPIO_DIG=0x00;
        }
}


//////////////////////////////////////

//ì°ü
void KeyDown(void)
{
        unsigned int a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
  {
                Delay10ms();
                a++;        
                a=0;
                if(GPIO_KEY!=0x0f)
                {
                        KeyState=1;
                        GPIO_KEY=0X0F;
                         Delay10ms();
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        default:        KeyValue=17;
                        }
                        GPIO_KEY=0XF0;
                        Delay10ms();
                        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;
                                default:        KeyValue=17;
                        }
                        while((a<500)&&(GPIO_KEY!=0xf0))
                        {
                                Delay10ms();
                                a++;
                        }
                        a=0;
                }
        }
}


///////////////////////////////

//±10ms
void Delay10ms(void)   
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}


依次输入76543210,再按最后一个键,比较就是正确的。输入其它都是错误。
程序有一点瑕疵:输入完毕后,显示没有了。我没时间再改了,你自己改吧。
回复

使用道具 举报

ID:164602 发表于 2018-3-14 16:58 | 显示全部楼层
终于调试完成了——是全部功能,没有瑕疵的,显示“OPEn”和“Err”都正确。
#include<reg51.h>

typedef unsigned int u16;

#define GPIO_DIG P0
#define GPIO_KEY P1

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P1^5;
sbit led=P2^0;


unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char KeyValue;
unsigned char KeyState;        
unsigned char DisplayData[8];
unsigned char password[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void Delay10ms();
void KeyDown();
void DigDisplay();
void bijiao();
void zhengque();
void cuowu();

void main(void)
{
        int i=0;
        KeyState=0;
//            for(i=0;i<8;i++)
                while (i<8)
        {
                KeyDown();
                if(KeyState==1)
            {
                    DisplayData[7]=DisplayData[6];
                DisplayData[6]=DisplayData[5];
                DisplayData[5]=DisplayData[4];
                DisplayData[4]=DisplayData[3];
                DisplayData[3]=DisplayData[2];
                DisplayData[2]=DisplayData[1];
                DisplayData[1]=DisplayData[0];
                DisplayData[0]=DIG_CODE[KeyValue];
                KeyState=0;
                                i++;
            }
                DigDisplay();
        }
                i=0;        
                while (i==0)               
        {
                        KeyDown();
                if(KeyState==1)
            {
                 if(KeyValue==15)
                                 {   
                                         bijiao();
                                        i=1;
                                 }        
            }
                        DigDisplay();
                }
                while(1)
                {
                        DigDisplay();
                }
}

////////////////////////////////////////

//·ù÷
void delay(u16 i)
{
        while(i--);        
}

void shengyin()
{
int num=0;
        EA=1;
        ET0=1;
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;  
TR0=1;


beep=~beep;
delay(50);
if(num==10)
beep=1;
}


void timer0() interrupt 1   //50ms
{
        int num;
        TH0=(65536-50000)/256;   
        TL0=(65536-50000)%256;
        num++;
}
////////////////////////////////////////

//
void bijiao()
{
                        int i,a=0;
                        for(i=0;i<8;i++)
        {
                                if(DisplayData[i]== password[i])
                        {                a=a+1;   }
                        else
                        {        a=a;                }
  }
                        if(a==8)
                        {                zhengque();        }
                                else
                        {                cuowu(); }
}        

void zhengque()
{
DisplayData[3]=0x3f; // "o"
DisplayData[2]=0x73; // "p"
DisplayData[1]=0x79; // "E"
DisplayData[0]=0x54; // "n"
        DigDisplay();
}
void cuowu()
{
DisplayData[7]=0x79; // "E"
DisplayData[6]=0x50; // "r"
DisplayData[5]=0x50; // "r"
        DigDisplay();
        shengyin();
led=1;
}

//
void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;        
                }
                GPIO_DIG=DisplayData[i];
                j=10;                                                
                while(j--);        
                GPIO_DIG=0x00;
        }
}


//////////////////////////////////////

//ì°ü
void KeyDown(void)
{
        unsigned int a=0;
        GPIO_KEY=0x0f;
        if(GPIO_KEY!=0x0f)
  {
                Delay10ms();
                a++;        
                a=0;
                if(GPIO_KEY!=0x0f)
                {
                        KeyState=1;
                        GPIO_KEY=0X0F;
                         Delay10ms();
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        default:        KeyValue=17;
                        }
                        GPIO_KEY=0XF0;
                        Delay10ms();
                        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;
                                default:        KeyValue=17;
                        }
                        while((a<500)&&(GPIO_KEY!=0xf0))
                        {
                                Delay10ms();
                                a++;
                        }
                        a=0;
                }
        }
}


///////////////////////////////

//±10ms
void Delay10ms(void)   
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

回复

使用道具 举报

ID:111634 发表于 2018-3-14 21:04 | 显示全部楼层
QWER01234 发表于 2018-3-14 15:40
大概看了一下,也没仔细看。我猜这应该是一个矩阵键盘的扫描程序,当扫描到键盘上的按键按下的时,将数码管 ...

这个神仙有点耐心。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表