找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4641|回復(fù): 20
打印 上一主題 下一主題
收起左側(cè)

新手請(qǐng)教,電平輸入檢測(cè)?(以解決! 感謝wulin大神)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:216258 發(fā)表于 2017-8-23 11:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
請(qǐng)教各位大神,高手,前輩;
小弟剛學(xué)51單片機(jī)不久,現(xiàn)在要做一個(gè)電路,但遇到問(wèn)題了,所以
來(lái)請(qǐng)教各位前輩,電路動(dòng)作如下:

單片機(jī):STC15W201S-DIP16
測(cè)試學(xué)習(xí)板:淘寶上購(gòu)得某款的mini 89c52學(xué)習(xí)板
(將學(xué)習(xí)板上89c52對(duì)應(yīng)的IO接點(diǎn)接到 STC15W201S IO口上)

IO腳位定義:定義3個(gè)io口為電平輸入(低電平觸發(fā))端口,
           P5.5 = R
           P5.4 = L
           P3.2 = C         

           定義6個(gè)io口為輸出控制口(LED),
           P1.0 ~ P1.5
         
程序說(shuō)明: 3個(gè)輸入上電後檢測(cè)低電平觸發(fā) (將學(xué)習(xí)板上的接地引腳做低電平信號(hào)),3個(gè)輸入不同組合,對(duì)應(yīng)輸出數(shù)組動(dòng)作
問(wèn)題說(shuō)明:以下程序是參考百度上有人寫(xiě)的按鍵檢測(cè)程序而修改的,而輸入端如果是只有1個(gè)或2個(gè)同時(shí)低電平,所對(duì)應(yīng)
               輸出數(shù)組動(dòng)作是正常的,但是到最後如果3個(gè)輸入同時(shí)都是低電平就不會(huì)動(dòng)作了,像是卡住不動(dòng)了

請(qǐng)教前輩們,想請(qǐng)程序問(wèn)題和電路硬件問(wèn)題?
程序: 下面程序是否有瑕疵不完善,改如何修改,或者有更好的寫(xiě)法;

硬體電路:因?yàn)檩d學(xué)習(xí)板上是拉接地端引腳當(dāng)?shù)仉娖叫盘?hào),但實(shí)際電路輸入是DC12V,
               請(qǐng)問(wèn)是否可接8050NPN三極管及電組做反相電路,可以的話要怎麼接電阻值該取多少?

不好意思,問(wèn)題敘述及程序有點(diǎn)亂,如果看得吃力,請(qǐng)見(jiàn)諒,懇請(qǐng)解惑,謝謝


  1. #include<reg52.h>               
  2. #define uchar unsigned char
  3. #define uint unsigned int  

  4. unsigned char code segR[]={
  5.                                                         0xff,0xdf,0xcf,0x07,0xc3,0xc1,0xc0,0xc0,
  6.                                                         0xe0,0xf0,0xf8,0xfc,0xfe,0xff
  7.                                                   };

  8. unsigned char code segL[]={
  9.                                                         0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0xc0,
  10.                                                         0xc1,0xc3,0xc7,0xcf,0xdf,0xff
  11.                                                   };

  12. unsigned char code segC[]={
  13.                                                         0xff,0xc0,0xff,0xc0                                                        
  14.                                                   };

  15. unsigned char code segCR[]={
  16.                                                         0xc7,0xc3,0xc1,0xc0,0xc0,
  17.                                                         0xc4,0xc6,0xc7                                                        
  18.                                                   };

  19. unsigned char code segCL[]={
  20.                                                         0xf8,0xf0,0xe0,0xc0,0xc0,
  21.                                                         0xc8,0xd8,0xf8                                                        
  22.                                                    };

  23. unsigned char code segRL[]={
  24.                                                         0xff,0xf3,0xe1,0xc0,0xc0,
  25.                                                         0xcc,0xde,0xff                                                        
  26.                                                     };

  27. unsigned char code segCRL[]={
  28.                                                         0xff,0xf3,0xe1,0xc0,0xc0,
  29.                                                         0xcc,0xde,0xff                                                        
  30.                                                     };


  31. sbit P1_0=P1^0;
  32. sbit P1_1=P1^1;
  33. sbit P1_2=P1^2;
  34. sbit P1_3=P1^3;
  35. sbit P1_4=P1^4;
  36. sbit P1_5=P1^5;

  37. sbit C_key=P3^2;
  38. sbit L_key=P5^4;
  39. sbit R_key=P5^5;

  40. void Delay1(uchar tt);

  41. void key()
  42. {

  43.          uchar i,k;
  44.          P1=0xff;

  45.         if(R_key==0 && L_key==1 && C_key==1)
  46.         {
  47. //                P1=0xc7;
  48.                 Delay1(10);
  49.                 if(R_key==0 && L_key==1 && C_key==1)
  50.                 {
  51.                         for(k=0;k<1;k++)
  52.                 {
  53.                                    
  54.                          for(i=0;i<14;i++)
  55.                              {
  56.                                                          
  57.                                          Delay1(50);
  58.                                  P1=segR[i];
  59.                                        
  60.                  
  61.                          }
  62.                                  while(R_key==1 && L_key==1 && C_key==1);                                 
  63.                                  break;                                
  64.                 }        
  65.                 }

  66.                 Delay1(10);
  67.                 while(!R_key && !L_key && !C_key);
  68. //                P1=0xff;
  69. //                break;                        
  70.         }

  71.         if(R_key==1 && L_key==0 && C_key==1)
  72.         {
  73. //                P1=0xf8;
  74.                 Delay1(10);
  75.                 if(R_key==1 && L_key==0 && C_key==1)
  76.                 {
  77.                         for(k=0;k<1;k++)
  78.                 {
  79.                                    
  80.                          for(i=0;i<14;i++)
  81.                              {
  82.                                                          
  83.                                          Delay1(50);
  84.                                  P1=segL[i];
  85.                                        
  86.                  
  87.                          }
  88. //                                 while(!L_key && R_key==1 && C_key==1);
  89. //                                 P1=0xff;
  90. //                                 break;                                
  91.                 }        
  92.                 }
  93.                         Delay1(10);
  94.                         while(!L_key && !R_key && !C_key);
  95. //                        P1=0xff;
  96. //                         break;        
  97.         }

  98.         if(R_key==0 && L_key==0 && C_key==1)
  99.         {
  100.                 P1=0xff;
  101.                 Delay1(10);
  102.                 if(R_key==0 && L_key==0 && C_key==1)
  103.                 {
  104.                         for(k=0;k<1;k++)
  105.                 {
  106.                                    
  107.                          for(i=0;i<8;i++)
  108.                              {
  109.                                                          
  110.                                          Delay1(50);
  111.                                  P1=segRL[i];
  112.                                        
  113.                  
  114.                          }
  115. //                                 while(!L_key && !R_key && C_key==1);
  116. //                                 P1=0xff;
  117. //                                 break;                                
  118.                 }               
  119.                 }
  120.                         Delay1(10);
  121.                         while(!L_key && !R_key && !C_key);
  122. //                        P1=0xff;
  123. //                         break;        
  124.         }

  125.         if(R_key==0 && L_key==1 && C_key==0)
  126.         {
  127.                 P1=0xc7;
  128.                 Delay1(10);
  129.                 if(R_key==0 && L_key==1 && C_key==0)
  130.                 {
  131.                         for(k=0;k<1;k++)
  132.                 {
  133.                                    
  134.                          for(i=0;i<8;i++)
  135.                              {
  136.                                                          
  137.                                          Delay1(50);
  138.                                  P1=segCR[i];
  139.                                        
  140.                  
  141.                          }
  142. //                                 while(!R_key && !L_key && !C_key);                                 
  143. //                                 break;                                
  144.                 }        
  145.                 }

  146.                 Delay1(10);
  147.                 while(!R_key && !L_key && !C_key);
  148. //                P1=0xff;
  149. //                break;                        
  150.         }

  151.         if(R_key==1 && L_key==0 && C_key==0)
  152.         {
  153.                 P1=0xf8;
  154.                 Delay1(10);
  155.                 if(R_key==1 && L_key==0 && C_key==0)
  156.                 {
  157.                         for(k=0;k<1;k++)
  158.                 {
  159.                                    
  160.                          for(i=0;i<8;i++)
  161.                              {
  162.                                                          
  163.                                          Delay1(50);
  164.                                  P1=segCL[i];
  165.                                        
  166.                  
  167.                          }
  168. //                                 while(!R_key && !L_key && !C_key);                                 
  169. //                                 break;                                
  170.                 }        
  171.                 }

  172.                 Delay1(10);
  173.                 while(!R_key && !L_key && !C_key);
  174. //                P1=0xff;
  175. //                break;                        
  176.         }

  177.         if(R_key==1 && L_key==1 && C_key==0)
  178.         {
  179.                 P1=0x00;
  180.                 Delay1(10);
  181.                 if(R_key==1 && L_key==1 && C_key==0)
  182.                 {
  183.                         for(k=0;k<1;k++)
  184.                 {
  185.                                    
  186.                          for(i=0;i<4;i++)
  187.                              {
  188.                                                          
  189.                                          Delay1(50);
  190.                                  P1=segC[i];
  191.                                        
  192.                  
  193.                          }
  194. //                                 while(!R_key && !L_key && !C_key);                                 
  195. //                                 break;                                
  196.                 }        
  197.                 }

  198.                 Delay1(10);
  199.                 while(!R_key && !L_key && !C_key);
  200. //                P1=0xff;
  201. //                break;                        
  202.         }

  203.         if(R_key==0 && L_key==0 && C_key==0)
  204.         {
  205.                 P1=0x00;
  206.                 Delay1(10);
  207.                 if(R_key==0 && L_key==0 && C_key==0)
  208.                 {
  209.                         for(k=0;k<1;k++)
  210.                 {
  211.                                    
  212.                          for(i=0;i<8;i++)
  213.                              {
  214.                                                          
  215.                                          Delay1(50);
  216.                                  P1=segCRL[i];
  217.                                        
  218.                  
  219.                          }
  220. //                                 while(!R_key && !L_key && !C_key);                                 
  221. //                                 break;                                
  222.                 }        
  223.                 }

  224.                 Delay1(10);
  225.                 while(!R_key && !L_key && !C_key);
  226. //                P1=0xff;
  227. //                break;                        
  228.         }
  229. }




  230. void main()
  231. {
  232. //        uchar i,k;
  233.     P1=0xff;
  234.         C_key=1;
  235.         R_key=1;
  236.         L_key=1;

  237.         while(1)
  238.         {
  239.           key();
  240.         }
  241. }

  242. void Delay1(uchar tt)
  243. {
  244. uchar aa,bb;
  245.     for(;tt>0;tt--)
  246.         for(bb=38;bb>0;bb--)
  247.             for(aa=130;aa>0;aa--);
  248. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:216258 發(fā)表于 2017-8-24 16:03 | 只看該作者
沒(méi)有人遇到類似的問(wèn)題嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:105206 發(fā)表于 2017-8-25 15:49 | 只看該作者
這種問(wèn)題很簡(jiǎn)單,自己多看看視頻。首先判斷輸入狀況,然后做相應(yīng)的輸出。
回復(fù)

使用道具 舉報(bào)

地板
ID:216258 發(fā)表于 2017-8-26 06:39 | 只看該作者
我知道依據(jù)輸入電平狀態(tài)做判斷,而依所輸入高低電平組合做相對(duì)應(yīng)的輸出;但是我這個(gè)程序是只有1個(gè)或是2個(gè)輸入是低電平,對(duì)應(yīng)輸出是正常動(dòng)作的,而只有3個(gè)輸入同時(shí)是低電平是沒(méi)有動(dòng)作,像是卡住,每組輸出程序?qū)懛ㄊ且粯拥,我的?wèn)題重點(diǎn)是"3個(gè)輸入同時(shí)是低電平是沒(méi)有動(dòng)作
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2017-8-26 08:13 | 只看該作者
你用3個(gè)按鍵組合控制可以把3個(gè)鍵組合成一個(gè)8位函數(shù),你程序框架不合理,按鍵和顯示混在一起。要分開(kāi)寫(xiě)。按鍵程序只須判斷識(shí)別鍵操作并輸出相應(yīng)鍵值,顯示程序根據(jù)鍵值做相應(yīng)顯示,互不干擾。給你寫(xiě)個(gè)程序參考,按鍵程序只需要判斷一次就可以輸出相應(yīng)鍵值,已經(jīng)過(guò)實(shí)物驗(yàn)證:
#include <STC15F2K60S2.H>
//#include<reg52.h>               
#define uint unsigned int
#define uchar unsigned char

sbit D0=P3^7;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit D5=P1^4;
sbit D6=P1^5;

sbit C_key=P3^2;
sbit L_key=P5^4;
sbit R_key=P5^5;

uchar num=7;                                                //鍵值變量聲明

/*********把3個(gè)鍵組合成一個(gè)8位函數(shù)**********/
uchar PD()
{                                                                                //0X07:0000 0111
        uchar i;
        i=C_key;
        i=(i<<1)|L_key;
        i=(i<<1)|R_key;
        return i;
}
/**************按鍵掃描函數(shù)*******************/
void key_scan()
{
        static bit key_sign=0;                //按鍵自鎖標(biāo)志
        static uint count=0;                        //計(jì)數(shù)變量                       
        if(PD()!=0x07)                                 //判斷PD()不等于0x07,說(shuō)明有健按下
        {
                count++;                                                //消抖計(jì)數(shù)
                if(count>=1000)                        //代替延時(shí)程序,確認(rèn)按鍵按下
                {
                        count=1000;                                //防止計(jì)數(shù)溢出
                        if(key_sign==0)                //按鍵自鎖標(biāo)志為0
                        {
                                key_sign=1;                        //按鍵自鎖標(biāo)志置1,防止重復(fù)讀鍵
                                num=PD();                        //保存鍵值
                        }
                }
        }
        else
        {
                key_sign=0;                                        //按鍵自鎖標(biāo)志清0
                count=0;                                                //消抖計(jì)數(shù)清0
        }
}
/**************顯示函數(shù)*******************/
void display()
{                                                                                //LED顯示鍵值000~111共8個(gè)狀態(tài)
        if(num==0)
        {
                D0=0;       
                D1=D2=D3=D4=D5=D6=1;
        }
        if(num==1)
        {
                D1=0;       
                D0=D2=D3=D4=D5=D6=1;       
        }
        if(num==2)
        {
                D2=0;
                D0=D1=D3=D4=D5=D6=1;
        }
        if(num==3)
        {
                D3=0;
                D0=D1=D2=D4=D5=D6=1;
        }
        if(num==4)
        {
                D4=0;
                D0=D1=D2=D3=D5=D6=1;       
        }
        if(num==5)
        {
                D5=0;
                D0=D1=D2=D3=D4=D6=1;
        }
        if(num==6)
        {
                D6=0;
                D0=D1=D2=D3=D4=D5=1;
        }
        if(num==7)
        {
                D0=D1=D2=D3=D4=D5=D6=1;                                                //不顯示
        }
}
/**************主函數(shù)*****************/
void main()
{
        while(1)
        {
                key_scan();
                display();
        }
}

評(píng)分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:205583 發(fā)表于 2017-8-26 09:37 | 只看該作者
繁體字看不懂
回復(fù)

使用道具 舉報(bào)

7#
ID:111634 發(fā)表于 2017-8-26 11:09 | 只看該作者

繁體字的,請(qǐng)去臺(tái)灣貨香港咨詢。
回復(fù)

使用道具 舉報(bào)

8#
ID:216258 發(fā)表于 2017-8-26 12:47 | 只看該作者
感謝各位前輩解惑,我回去再修改看看,另外我因?yàn)槭怯肧TC的單片機(jī),所以才再這里發(fā)問(wèn),發(fā)問(wèn)內(nèi)容讓大家看不懂,報(bào)歉
回復(fù)

使用道具 舉報(bào)

9#
ID:213173 發(fā)表于 2017-8-26 18:48 | 只看該作者
karyboa 發(fā)表于 2017-8-26 12:47
感謝各位前輩解惑,我回去再修改看看,另外我因?yàn)槭怯肧TC的單片機(jī),所以才再這里發(fā)問(wèn),發(fā)問(wèn)內(nèi)容讓大家看不 ...

給你寫(xiě)的程序試了嗎?
回復(fù)

使用道具 舉報(bào)

10#
ID:216258 發(fā)表于 2017-8-26 20:56 | 只看該作者
wulin 發(fā)表于 2017-8-26 08:13
你用3個(gè)按鍵組合控制可以把3個(gè)鍵組合成一個(gè)8位函數(shù),你程序框架不合理,按鍵和顯示混在一起。要分開(kāi)寫(xiě)。按 ...

感謝你的解說(shuō)指導(dǎo),感謝
回復(fù)

使用道具 舉報(bào)

11#
ID:216258 發(fā)表于 2017-8-26 22:23 | 只看該作者
wulin 發(fā)表于 2017-8-26 18:48
給你寫(xiě)的程序試了嗎?

我剛回到家,正在測(cè)試
回復(fù)

使用道具 舉報(bào)

12#
ID:216258 發(fā)表于 2017-8-26 22:58 | 只看該作者
wulin 發(fā)表于 2017-8-26 18:48
給你寫(xiě)的程序試了嗎?

回報(bào)您寫(xiě)的程序,測(cè)試了這個(gè)程序,是每組輸入組合都可以對(duì)應(yīng)不同的輸出沒(méi)錯(cuò),但是....我不需要按鍵鎖定的功能;
也就是說(shuō),按鍵按下是低電平輸入,放開(kāi)是高電平輸入的狀態(tài),單片機(jī)一上電就一直檢測(cè)輸入電平輸入的的變化,
不過(guò)謝謝你讓我知道有這樣寫(xiě)法,讓我上了一課,只是現(xiàn)在我不太了觧不同IO口 (P0,P1,P2.. )是怎麼組合成同一位址函數(shù),如您程序里的
uchar PD()
{                                                                                //0X07:0000 0111
        uchar i;
        i=C_key;
        i=(i<<1)|L_key;
        i=(i<<1)|R_key;
        return i;
}
現(xiàn)在我知道修改方向了,再次感謝!
回復(fù)

使用道具 舉報(bào)

13#
ID:213173 發(fā)表于 2017-8-27 06:52 | 只看該作者
karyboa 發(fā)表于 2017-8-26 22:58
回報(bào)您寫(xiě)的程序,測(cè)試了這個(gè)程序,是每組輸入組合都可以對(duì)應(yīng)不同的輸出沒(méi)錯(cuò),但是....我不需要按鍵鎖定的功 ...

按你的需求改寫(xiě)了程序并有詳細(xì)注釋,應(yīng)該看得明白。
#include <STC15F2K60S2.H>
//#include<reg52.h>               
#define uint unsigned int
#define uchar unsigned char

sbit D0=P3^7;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit D5=P1^4;
sbit D6=P1^5;

sbit C_key=P3^2;
sbit L_key=P5^4;
sbit R_key=P5^5;

/*********把3個(gè)鍵組合成一個(gè)8位函數(shù)**********/
uchar PD()                                //有返回值無(wú)參數(shù)函數(shù)
{
        uchar i;                         //聲明一個(gè)8位臨時(shí)變量i,0000 0000
        i=C_key;                                //讀取C_key電平賦值與i,0000 000X
        i=(i<<1)|L_key;        //i左移一位0000 00X0,"按位或"讀取C_key電平再賦值i,0000 00XX
        i=(i<<1)|R_key;        //i再左移一位0000 0XX0,"按位或"讀取R_key電平再賦值i,0000 0XXX
        return i;                        //返回i值 0000 0XXX
}
/**************按鍵掃描函數(shù)*******************/
uchar key_scan()                                //有返回值無(wú)參數(shù)函數(shù)
{
        static uint count=0;                //計(jì)數(shù)變量                       
        uchar num;                                        //鍵值變量聲明
        if(PD()!=0x07)                         //判斷PD()不等于0x07,說(shuō)明有健按下
        {
                count++;                                        //消抖計(jì)數(shù)
                if(count>=1000)                //代替延時(shí)程序,確認(rèn)PD()!=0x07
                {
                        count=0;                                //消抖計(jì)數(shù)清0
                        num=PD();                        //保存鍵值
                        return num;                        //返回num值
                }
        }
        else return 0x07;                        //返回?zé)o鍵按下的值
}
/**************顯示函數(shù)*******************/
void display(uchar x)
{                                                                                //LED顯示鍵值000~111共8個(gè)狀態(tài)
        if(x==0)
        {
                D0=0;       
                D1=D2=D3=D4=D5=D6=1;
        }
        if(x==1)
        {
                D1=0;       
                D0=D2=D3=D4=D5=D6=1;       
        }
        if(x==2)
        {
                D2=0;
                D0=D1=D3=D4=D5=D6=1;
        }
        if(x==3)
        {
                D3=0;
                D0=D1=D2=D4=D5=D6=1;
        }
        if(x==4)
        {
                D4=0;
                D0=D1=D2=D3=D5=D6=1;       
        }
        if(x==5)
        {
                D5=0;
                D0=D1=D2=D3=D4=D6=1;
        }
        if(x==6)
        {
                D6=0;
                D0=D1=D2=D3=D4=D5=1;
        }
        if(x==7)
        {
                D0=D1=D2=D3=D4=D5=D6=1;                                                //不顯示
        }
}
/**************主函數(shù)*****************/
void main()
{
        while(1)
        {
                display(key_scan());                                //顯示按鍵狀態(tài)
        }
}
回復(fù)

使用道具 舉報(bào)

14#
ID:213173 發(fā)表于 2017-8-27 07:23 | 只看該作者
karyboa 發(fā)表于 2017-8-26 22:58
回報(bào)您寫(xiě)的程序,測(cè)試了這個(gè)程序,是每組輸入組合都可以對(duì)應(yīng)不同的輸出沒(méi)錯(cuò),但是....我不需要按鍵鎖定的功 ...

如果不是用按鍵代替,而是TTL電平觸發(fā),不考慮消抖還可以簡(jiǎn)化程序:

#include <STC15F2K60S2.H>
//#include<reg52.h>               
#define uint unsigned int
#define uchar unsigned char

sbit D0=P3^7;
sbit D1=P1^0;
sbit D2=P1^1;
sbit D3=P1^2;
sbit D4=P1^3;
sbit D5=P1^4;
sbit D6=P1^5;

sbit C_key=P3^2;
sbit L_key=P5^4;
sbit R_key=P5^5;

/*********把3個(gè)電平組合成一個(gè)8位函數(shù)**********/
uchar PD()                                //有返回值無(wú)參數(shù)函數(shù)
{
        uchar i;                         //聲明一個(gè)8位臨時(shí)變量i,0000 0000
        i=C_key;                                //讀取C_key電平賦值與i,0000 000X
        i=(i<<1)|L_key;        //i左移一位0000 00X0,"按位或"讀取C_key電平再賦值與i,0000 00XX
        i=(i<<1)|R_key;        //i再左移一位0000 0XX0,"按位或"讀取R_key電平再賦值與i,0000 0XXX
        return i;                        //返回i值 0000 0XXX
}
/**************顯示函數(shù)*******************/
void display(uchar x)
{                                                                                //LED顯示電平組合值000~111共8個(gè)狀態(tài)
        if(x==0)
        {
                D0=0;       
                D1=D2=D3=D4=D5=D6=1;
        }
        if(x==1)
        {
                D1=0;       
                D0=D2=D3=D4=D5=D6=1;       
        }
        if(x==2)
        {
                D2=0;
                D0=D1=D3=D4=D5=D6=1;
        }
        if(x==3)
        {
                D3=0;
                D0=D1=D2=D4=D5=D6=1;
        }
        if(x==4)
        {
                D4=0;
                D0=D1=D2=D3=D5=D6=1;       
        }
        if(x==5)
        {
                D5=0;
                D0=D1=D2=D3=D4=D6=1;
        }
        if(x==6)
        {
                D6=0;
                D0=D1=D2=D3=D4=D5=1;
        }
        if(x==7)
        {
                D0=D1=D2=D3=D4=D5=D6=1;                                                //不顯示
        }
}
/**************主函數(shù)*****************/
void main()
{
        while(1)
        {
                display(PD());                                //顯示TTL電平觸發(fā)狀態(tài)
        }
}
回復(fù)

使用道具 舉報(bào)

15#
ID:216258 發(fā)表于 2017-8-27 10:18 | 只看該作者
wulin 發(fā)表于 2017-8-27 07:23
如果不是用按鍵代替,而是TTL電平觸發(fā),不考慮消抖還可以簡(jiǎn)化程序:

#include

太謝謝你的幫忙了,晚上回家后再修改測(cè)試,謝謝
回復(fù)

使用道具 舉報(bào)

16#
ID:216258 發(fā)表于 2017-8-27 23:03 | 只看該作者
wulin 發(fā)表于 2017-8-27 07:23
如果不是用按鍵代替,而是TTL電平觸發(fā),不考慮消抖還可以簡(jiǎn)化程序:

#include

回報(bào)測(cè)試俢改后程序情況,另外先說(shuō)聲報(bào)歉,昨天帶按鍵鎖定的程序,當(dāng)3個(gè)同時(shí)低電平時(shí),輸出也是沒(méi)有動(dòng)作,(我是直接從接地端口拉一條綫來(lái)斶發(fā)輸入端口的),所以昨天應(yīng)該是我有一輸入口沒(méi)觸發(fā)到接地信號(hào),以致於還有輸出信號(hào)產(chǎn)生,所以這3個(gè)程序測(cè)試結(jié)果,

"當(dāng)3個(gè)同時(shí)低電平輸入時(shí),是沒(méi)有輸出的 ( led 不會(huì)亮) "
回復(fù)

使用道具 舉報(bào)

17#
ID:216258 發(fā)表于 2017-8-27 23:33 | 只看該作者
wulin 發(fā)表于 2017-8-27 07:23
如果不是用按鍵代替,而是TTL電平觸發(fā),不考慮消抖還可以簡(jiǎn)化程序:

#include

再次更正,是我太粗心了,是我一個(gè)輸出io口沒(méi)接上led,那個(gè)輸出口剛好是3個(gè)輸入低電平的狀態(tài),不好意思,是我沒(méi)注意,這樣就這程序修改成我要輸出的狀態(tài)就可以了,最后再次感謝您熱心的教導(dǎo)幇忙,謝謝
回復(fù)

使用道具 舉報(bào)

18#
ID:216258 發(fā)表于 2017-8-27 23:47 | 只看該作者
wulin 發(fā)表于 2017-8-27 07:23
如果不是用按鍵代替,而是TTL電平觸發(fā),不考慮消抖還可以簡(jiǎn)化程序:

#include

補(bǔ)充一奌 : 有按鍵消斗的程序編譯的時(shí)后出現(xiàn)
" TEST7.C(42): warning C291: not every exit path returns a value " 的警告
, 在程序的       else return 0x07;           //返回?zé)o鍵按下的值 " ,
雖然還是可以下載寫(xiě)入,但我不了觧為什麼?
回復(fù)

使用道具 舉報(bào)

19#
ID:213173 發(fā)表于 2017-8-28 08:38 | 只看該作者
karyboa 發(fā)表于 2017-8-27 23:47
補(bǔ)充一奌 : 有按鍵消斗的程序編譯的時(shí)后出現(xiàn)
" TEST7.C(42): warning C291: not every exit path retu ...

這可能是不同編譯器出現(xiàn)的問(wèn)題,實(shí)測(cè)刪除else return 0x07;對(duì)程序功能無(wú)礙,但邏輯不十分嚴(yán)謹(jǐn)。
也可以改為,
      //else return 0x07;                       //返回?zé)o鍵按下的值
        if(PD()==0x07)
                return 0x07;                      //返回?zé)o鍵按下的值

評(píng)分

參與人數(shù) 1黑幣 +8 收起 理由
karyboa + 8 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

20#
ID:216258 發(fā)表于 2017-8-28 10:21 | 只看該作者
wulin 發(fā)表于 2017-8-28 08:38
這可能是不同編譯器出現(xiàn)的問(wèn)題,實(shí)測(cè)刪除else return 0x07;對(duì)程序功能無(wú)礙,但邏輯不十分嚴(yán)謹(jǐn)。
也可以 ...

了解,感謝您的無(wú)私指導(dǎo),謝謝
回復(fù)

使用道具 舉報(bào)

21#
ID:275111 發(fā)表于 2018-5-30 10:45 | 只看該作者
感謝wulin大神。您的程序我正在看。我提的弱智問(wèn)題,還請(qǐng)您抽空提點(diǎn)下,謝謝。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表