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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3319|回復: 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 淡定

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:111634 發表于 2018-3-14 08:01 | 只看該作者
神仙也看不懂!
回復

使用道具 舉報

板凳
ID:273292 發表于 2018-3-14 08:37 | 只看該作者
具體實現功能你也沒說啊,怎么看
回復

使用道具 舉報

地板
ID:291623 發表于 2018-3-14 09:26 | 只看該作者
這么長的代碼 注釋你也不寫 沒法看啊
回復

使用道具 舉報

5#
ID:105206 發表于 2018-3-14 11:21 | 只看該作者
說說你的原理。要達到的要求。
回復

使用道具 舉報

6#
ID:291105 發表于 2018-3-14 11:34 | 只看該作者
先把你需要實現的功能說出來,才好理解啊
回復

使用道具 舉報

7#
ID:291750 發表于 2018-3-14 12:50 | 只看該作者
路過,沒注釋啊
回復

使用道具 舉報

8#
ID:282439 發表于 2018-3-14 14:14 | 只看該作者
這個沒有注釋的程序,讓HR一看,該怎么組織團隊合作呢?
回復

使用道具 舉報

9#
ID:7485 發表于 2018-3-14 14:42 | 只看該作者
這個問題提的讓人蒙......
回復

使用道具 舉報

10#
ID:291815 發表于 2018-3-14 15:05 | 只看該作者
要求是什么啊
回復

使用道具 舉報

11#
ID:291810 發表于 2018-3-14 15:06 | 只看該作者
神仙也許能看懂
回復

使用道具 舉報

12#
ID:212149 發表于 2018-3-14 15:40 | 只看該作者
大概看了一下,也沒仔細看。我猜這應該是一個矩陣鍵盤的掃描程序,當掃描到鍵盤上的按鍵按下的時,將數碼管顯示的數字進行移位操作,不知道是不是這樣的。這里我發現了幾個樓主寫的代碼的問題,第一個是主函數中沒有while(1)死循環,導致的是主函數死循環,按鍵掃描一般來說都是一直循環按鍵掃描函數,而樓主寫的是for(i=0;i<8;i++)     KeyDown(); 這里只執行了8次,可能按鍵按下的時候沒有掃描到,這里是第一個需要注意的問題。第二個問題是void DigDisplay()這個函數中j=10;   while(j--); 這個數碼管顯示時間太短了,不足以達到視覺暫留的時間,如果看不見數碼管顯示可能是這個問題(我也是猜的)。在就給一個代碼來說就看出這么多了。樓主可以參考一下
回復

使用道具 舉報

13#
ID:291842 發表于 2018-3-14 15:51 | 只看該作者
你可以注釋一下,這樣就清楚了
回復

使用道具 舉報

14#
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 很給力!

查看全部評分

回復

使用道具 舉報

15#
ID:291870 發表于 2018-3-14 16:25 | 只看該作者
沒有電路圖,都不知道你要實現什么功能,怎么看啊
回復

使用道具 舉報

16#
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,再按最后一個鍵,比較就是正確的。輸入其它都是錯誤。
程序有一點瑕疵:輸入完畢后,顯示沒有了。我沒時間再改了,你自己改吧。
回復

使用道具 舉報

17#
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--);
}

回復

使用道具 舉報

18#
ID:111634 發表于 2018-3-14 21:04 | 只看該作者
QWER01234 發表于 2018-3-14 15:40
大概看了一下,也沒仔細看。我猜這應該是一個矩陣鍵盤的掃描程序,當掃描到鍵盤上的按鍵按下的時,將數碼管 ...

這個神仙有點耐心。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂中文资源在线 | 麻豆av片 | 一本一道久久a久久精品蜜桃 | 久久蜜桃av一区二区天堂 | 亚洲国产成人精品女人久久久野战 | 99在线观看| 91九色porny首页最多播放 | 亚洲一区视频在线 | 91久久网站| 中文字幕在线观看日韩 | 国产一区二区三区在线视频 | 国产成人网| 亚洲免费大片 | 久久99精品久久久久 | 亚洲高清免费观看 | 红桃成人在线 | 免费同性女女aaa免费网站 | 久久久www| 九九亚洲 | 欧美在线观看一区二区 | 欧美日韩精品区 | 四虎影院免费在线播放 | 色天堂影院 | 国产精品一区二区av | 国产日韩欧美在线播放 | 久久久五月天 | 视频一区二区在线观看 | 国产区免费视频 | 精品一区二区三区免费视频 | 国产精品久久av | 欧一区二区 | 一区二区三区欧美大片 | 日本在线视频一区二区 | 欧美久久久久久久久 | 永久av | 中文字幕一区在线观看视频 | 欧美日韩专区 | 久久91精品国产一区二区三区 | 天天躁日日躁xxxxaaaa | xx性欧美肥妇精品久久久久久 | 国产麻豆一区二区三区 |