久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 單片機(jī)代碼求大神指教,急 [打印本頁(yè)]

作者: ART_cheng    時(shí)間: 2018-3-14 01:23
標(biāo)題: 單片機(jī)代碼求大神指教,急
板子是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. }
復(fù)制代碼

作者: zl2168    時(shí)間: 2018-3-14 08:01
神仙也看不懂!
作者: xdl932365660    時(shí)間: 2018-3-14 08:37
具體實(shí)現(xiàn)功能你也沒說啊,怎么看
作者: 小天123    時(shí)間: 2018-3-14 09:26
這么長(zhǎng)的代碼 注釋你也不寫 沒法看啊
作者: jubaolun    時(shí)間: 2018-3-14 11:21
說說你的原理。要達(dá)到的要求。
作者: ASDAASD    時(shí)間: 2018-3-14 11:34
先把你需要實(shí)現(xiàn)的功能說出來,才好理解啊
作者: dsqqq520    時(shí)間: 2018-3-14 12:50
路過,沒注釋啊
作者: arthuryu    時(shí)間: 2018-3-14 14:14
這個(gè)沒有注釋的程序,讓HR一看,該怎么組織團(tuán)隊(duì)合作呢?
作者: ahshmj    時(shí)間: 2018-3-14 14:42
這個(gè)問題提的讓人蒙......
作者: a1357787200    時(shí)間: 2018-3-14 15:05
要求是什么啊
作者: spencer97    時(shí)間: 2018-3-14 15:06
神仙也許能看懂
作者: QWER01234    時(shí)間: 2018-3-14 15:40
大概看了一下,也沒仔細(xì)看。我猜這應(yīng)該是一個(gè)矩陣鍵盤的掃描程序,當(dāng)掃描到鍵盤上的按鍵按下的時(shí),將數(shù)碼管顯示的數(shù)字進(jìn)行移位操作,不知道是不是這樣的。這里我發(fā)現(xiàn)了幾個(gè)樓主寫的代碼的問題,第一個(gè)是主函數(shù)中沒有while(1)死循環(huán),導(dǎo)致的是主函數(shù)死循環(huán),按鍵掃描一般來說都是一直循環(huán)按鍵掃描函數(shù),而樓主寫的是for(i=0;i<8;i++)     KeyDown(); 這里只執(zhí)行了8次,可能按鍵按下的時(shí)候沒有掃描到,這里是第一個(gè)需要注意的問題。第二個(gè)問題是void DigDisplay()這個(gè)函數(shù)中j=10;   while(j--); 這個(gè)數(shù)碼管顯示時(shí)間太短了,不足以達(dá)到視覺暫留的時(shí)間,如果看不見數(shù)碼管顯示可能是這個(gè)問題(我也是猜的)。在就給一個(gè)代碼來說就看出這么多了。樓主可以參考一下
作者: 安書逸    時(shí)間: 2018-3-14 15:51
你可以注釋一下,這樣就清楚了
作者: HC6800-ES-V2.0    時(shí)間: 2018-3-14 16:03
現(xiàn)在,你的程序可以顯示了!
#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)//你原來沒有的語(yǔ)句,這樣好點(diǎn)
        {
            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)//沒有比較的原因在這里,因?yàn)榫仃囨I盤永遠(yuǎn)也沒有16這個(gè)值,0~15共16個(gè)鍵。改成15也不能比較,因?yàn)槟愕某绦?/font>
//路不能啊。我看懂你的程序了:輸入一個(gè)相當(dāng)于密碼的東西,與預(yù)設(shè)值對(duì)比。是吧,但你的程序是執(zhí)行不了的。因?yàn)槟愕某绦驔]有在輸入密碼時(shí)
//等待,你想像是for八次,輸入8個(gè)值,其實(shí)程序早不知道跑哪去了,執(zhí)行按鍵程序,沒按鍵,程序會(huì)繼續(xù)執(zhí)行,不會(huì)等你(你的程序沒有這功能)
//我只是將你的程序中,按鍵、顯示部分修改了一下,沒有修改“密碼”部分,你再好好想想吧,看得出,你經(jīng)驗(yàn)不多,就是要讓你自己想通。
      bijiao();        
                }
                DigDisplay();//我改寫的位置
        }//新增加語(yǔ)句的另一半括號(hào)
}

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

//·ù÷
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--);
}


作者: 李偉晨    時(shí)間: 2018-3-14 16:25
沒有電路圖,都不知道你要實(shí)現(xiàn)什么功能,怎么看啊
作者: HC6800-ES-V2.0    時(shí)間: 2018-3-14 16:42
我終于把你的程序調(diào)試出來了。
#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,再按最后一個(gè)鍵,比較就是正確的。輸入其它都是錯(cuò)誤。
程序有一點(diǎn)瑕疵:輸入完畢后,顯示沒有了。我沒時(shí)間再改了,你自己改吧。

作者: HC6800-ES-V2.0    時(shí)間: 2018-3-14 16:58
終于調(diào)試完成了——是全部功能,沒有瑕疵的,顯示“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--);
}


作者: zl2168    時(shí)間: 2018-3-14 21:04
QWER01234 發(fā)表于 2018-3-14 15:40
大概看了一下,也沒仔細(xì)看。我猜這應(yīng)該是一個(gè)矩陣鍵盤的掃描程序,當(dāng)掃描到鍵盤上的按鍵按下的時(shí),將數(shù)碼管 ...

這個(gè)神仙有點(diǎn)耐心。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产黄色小视频在线观看 | 91观看| 成人精品国产免费网站 | 亚洲国产成人精品久久久国产成人一区 | 精品一区二区三区av | 亚洲国产精选 | 日本在线一二 | 在线观看视频91 | 欧美高清视频一区 | 日韩视频一区二区三区 | 日日骑 | 中文字幕日韩欧美 | 中文字幕 在线观看 | 国产一区二区三区在线看 | 免费一级欧美在线观看视频 | 国产精品1区2区 | 色综合中文| 91中文视频 | 一区影视 | 国产精品久久久一区二区三区 | 日韩成人专区 | 国产精品久久久久久久久久免费看 | 91佛爷在线观看 | 视频一区二区在线观看 | 欧美一区二区三区在线视频 | 日韩免费一区二区 | 久久lu | 免费一级欧美在线观看视频 | 欧美在线一区二区三区 | 国产免费av网 | 国产一二区免费视频 | 久久精品亚洲成在人线av网址 | 欧美中文视频 | 午夜看片 | 日韩在线一区二区三区 | 中文字幕1区2区3区 日韩在线视频免费观看 | 欧美日产国产成人免费图片 | 成人国产精品久久 | 羞羞视频在线网站观看 | 激情 一区 | 日日干夜夜操 |