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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3066|回復: 2
收起左側

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

[復制鏈接]
ID:392349 發表于 2018-9-1 16:35 | 顯示全部樓層 |閱讀模式
  1. /***********************************************************
  2. 實驗名稱:LED數碼管顯示與按鈕輸入   
  3. 說 明:1.3.2(INT0)作為按鈕輸入口構成一個"0#~#7"的8個按鈕和8個LED的顯示按鈕電路,
  4.        系統復位時,顯示"HELLO--88",當按下任意鍵時,在最右邊LED上顯示該鍵號,原顯示內容自動左移;
  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. //數碼管位選通表
  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. 函數名稱:主函數  
  25. ***********************************************************/
  26. void main()
  27. {  
  28.    while(1)
  29.   {        
  30.       display();               //調用顯示函數//
  31.         keyscan();               //按鍵檢測函數//
  32.         shiftkey();          //按鍵移位函數//
  33.   }     
  34. }
  35. /**********************************************************
  36. 函數名稱:數碼管顯示函數
  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. 函數名稱:按鍵檢測函數
  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)      //是否有對應鍵按下
  84.             {
  85.                 delay(10);      //去抖//
  86.                 if(P3_2==0)  //再次判斷是否有鍵按下
  87.                 {
  88.                     delay(3);
  89.                     newkey=i+1;     //記錄相應鍵值//
  90.                     keyON=1;         //設有鍵按下標志
  91.                
  92.                 while(P3_2==0);//去抖,此處按鍵未彈起則數碼管不顯示//                  
  93.                 }
  94.             }
  95.         }   
  96.     }   
  97. }   
  98. /**********************************************************
  99. 函數名稱:按鍵移位函數
  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. 函數名稱:延時函數  
  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. }
復制代碼
回復

使用道具 舉報

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

使用道具 舉報

ID:277550 發表于 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控制是段還是位,沒用過這樣的芯片、模塊。。。。。。


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

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美成人 | 久草在线在线精品观看 | 国产激情偷乱视频一区二区三区 | 亚洲精品久久久9婷婷中文字幕 | 精品二区 | 谁有毛片 | 成人国产精品久久 | 中文字幕一区二区三区在线观看 | www.嫩草| 日韩精品在线免费 | 久久不卡| 99久久夜色精品国产亚洲96 | 欧美999 | 一区二区免费 | 粉嫩一区二区三区国产精品 | 国产高潮av | 久久久久国产成人精品亚洲午夜 | 丁香综合| 国产ts人妖系列高潮 | 国产三区视频在线观看 | 国产欧美一区二区精品忘忧草 | 国产成人精品免高潮在线观看 | 亚洲精品视频免费看 | 欧美a在线看 | 欧洲妇女成人淫片aaa视频 | 亚洲成人中文字幕 | 色频| 亚洲一区中文 | hitomi一区二区三区精品 | 成人在线视频免费观看 | www.日韩免费 | 日日综合 | 天天操天天射综合网 | 欧美精品一区在线观看 | 99精品视频一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | 老妇激情毛片免费 | 中文一区二区 | 青青久草| 天天玩天天操天天干 | 国产一区91精品张津瑜 |