欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3249|回復(fù): 2
收起左側(cè)

LED數(shù)碼管顯示與按鈕輸入的單片機源程序

[復(fù)制鏈接]
ID:392349 發(fā)表于 2018-9-1 16:35 | 顯示全部樓層 |閱讀模式
  1. /***********************************************************
  2. 實驗名稱:LED數(shù)碼管顯示與按鈕輸入   
  3. 說 明:1.3.2(INT0)作為按鈕輸入口構(gòu)成一個"0#~#7"的8個按鈕和8個LED的顯示按鈕電路,
  4.        系統(tǒng)復(fù)位時,顯示"HELLO--88",當(dāng)按下任意鍵時,在最右邊LED上顯示該鍵號,原顯示內(nèi)容自動左移;
  5. ***********************************************************/
  6. #include<reg51.h>              //51單片機頭文件//
  7. #include <intrins.h>

  8. #define uchar unsigned char     //無符號8位變量 //
  9. #define uint unsigned int     //無符號16位變量 //

  10. sbit P2_6= P2^6;             //段鎖存//
  11. sbit P2_7= P2^7;             //位鎖存//
  12. sbit P3_2= P3^2;       //外部中斷0

  13. uchar Disp_Tab[14] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x79,0x76,0x38,0x40};  //段碼控制     0    1    2   3   4   5    6    7   8   9   E   H   L    -//                                                            
  14. // 0-9,E(0x79),H(0x76),L(0x38),-(0x40)
  15. uchar weixuan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位選控制,查表的方法控制//
  16. //數(shù)碼管位選通表
  17. uchar buffer[8]={11,10,12,12,0,13,8,8};//HELLO-88
  18. uchar newkey,keyON=0;

  19. void shiftkey();
  20. void display();
  21. void keyscan();
  22. void delay(unsigned int i);
  23. /***********************************************************
  24. 函數(shù)名稱:主函數(shù)  
  25. ***********************************************************/
  26. void main()
  27. {  
  28.    while(1)
  29.   {        
  30.       display();               //調(diào)用顯示函數(shù)//
  31.         keyscan();               //按鍵檢測函數(shù)//
  32.         shiftkey();          //按鍵移位函數(shù)//
  33.   }     
  34. }
  35. /**********************************************************
  36. 函數(shù)名稱:數(shù)碼管顯示函數(shù)
  37. **********************************************************/
  38. void display()
  39. {
  40.     char i,num=0;
  41.     for(i=0;i<8;i++)
  42.     {
  43.         P0=0xff;            //位鎖存清除//
  44.         P2_7=1;            
  45.         P2_7=0;

  46.         num=buffer[i];
  47.         P0=Disp_Tab[num];    //段選值//
  48.         P2_6=1;               
  49.     P2_6=0;          //段鎖存//

  50.         P0=weixuan[i];        //位選值//
  51.         P2_7=1;            
  52.         P2_7=0;           //位鎖存//
  53.         
  54.         delay(1);
  55.     }
  56. }

  57. /**********************************************************
  58. 函數(shù)名稱:按鍵檢測函數(shù)
  59. **********************************************************/
  60. void keyscan()
  61. {
  62.     unsigned char i;
  63.     P0=0x00;               //清空段選//
  64.     P2_6=1;               
  65.     delay(1);
  66.     P2_6=0;                    //段鎖存//
  67.    
  68.     P0=0x00;               //位選全為低電平零
  69.     P2_7=1;              
  70.     delay(1);
  71.     P2_7=0;         //位鎖存//
  72.    
  73.     if(P3_2==0)           //如果有鍵按下
  74.     {
  75.         for(i=0;i<8;i++)       //8個鍵值依次掃描
  76.         {   
  77.             delay(1);
  78.             P0=weixuan[i];       //位選控制,依次給出低電平
  79.             P2_7=1;
  80.             delay(1);
  81.             P2_7=0;
  82.         
  83.             if(P3_2==0)      //是否有對應(yīng)鍵按下
  84.             {
  85.                 delay(10);      //去抖//
  86.                 if(P3_2==0)  //再次判斷是否有鍵按下
  87.                 {
  88.                     delay(3);
  89.                     newkey=i+1;     //記錄相應(yīng)鍵值//
  90.                     keyON=1;         //設(shè)有鍵按下標志
  91.                
  92.                 while(P3_2==0);//去抖,此處按鍵未彈起則數(shù)碼管不顯示//                  
  93.                 }
  94.             }
  95.         }   
  96.     }   
  97. }   
  98. /**********************************************************
  99. 函數(shù)名稱:按鍵移位函數(shù)
  100. **********************************************************/
  101. void shiftkey()
  102. {
  103.      if(keyON==1)                      //進入按鍵//
  104.      {
  105.           buffer[0]=buffer[1];      //值的移位//
  106.           buffer[1]=buffer[2];
  107.           buffer[2]=buffer[3];
  108.           buffer[3]=buffer[4];
  109.           buffer[4]=buffer[5];
  110.           buffer[5]=buffer[6];
  111.           buffer[6]=buffer[7];
  112.           buffer[7]=newkey;
  113.           keyON=0;
  114.      }
  115. }   
  116. /***********************************************************
  117. 函數(shù)名稱:延時函數(shù)  
  118. ***********************************************************/
  119. void Delay(uint t)
  120. {
  121.     uint i,j;
  122.     for(i=t;i>0;i--)
  123.         for(j=1100;j>0;j--)
  124.             ;
  125. }
復(fù)制代碼
回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2018-9-1 17:25 | 顯示全部樓層
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報

ID:277550 發(fā)表于 2018-9-1 21:06 | 顯示全部樓層
       P0=Disp_Tab[num];    //段選值//
        P2_6=1;               
        P2_6=0;            //段鎖存//

        P0=weixuan[i];        //位選值//
        P2_7=1;            
        P2_7=0;             //位鎖存//

位和段都是P0輸出,另兩個IO控制是段還是位,沒用過這樣的芯片、模塊。。。。。。


功能在代碼前面有說明,但沒說哪種芯片。所以電路圖,就不好說了

評分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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