国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

51單片機按鍵,led小燈泡,數碼管綜合程序與Proteus仿真

[復制鏈接]
樓主
eng 發表于 2021-6-9 19:31:39 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
其中開關SW1為系統總控制開關//系統初始為關閉狀態/此時按下SW1,系統開啟,指示燈D1亮,
第一塊數顯板會顯示按下次數1////此時按SW2/第一次D2亮起//第二次按下D3亮起//第三次按下D2和D3會同時熄滅,每按一次,
第四塊數顯板會顯示開關SW2按下次數。當任意一個開關按下次數達到10次時,對應的數顯板會從零開始重新計數。
開關SW3按下時,不管系統處于什么狀態,都將關閉系統,而SW4按下時,第二個小燈泡會點亮

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51單片機按鍵,led小燈泡,數碼管綜合程序與Proteus仿真 1.png
51單片機源程序如下:
  1. /*此系統為開關聯合控制LED工作臺////其中開關SW1為系統總控制開關//系統初始為關閉狀態/此時按下SW1,系統開啟,指示燈D1亮,
  2. 第一塊數顯板會顯示按下次數1////此時按SW2/第一次D2亮起//第二次按下D3亮起//第三次按下D2和D3會同時熄滅,每按一次,
  3. 第四塊數顯板會顯示開關SW2按下次數。當任意一個開關按下次數達到10次時,對應的數顯板會從零開始重新計數。*/
  4. #include"reg52.h"
  5. sbit C1=P3^0; //定義數碼管四個引腳
  6. sbit C2=P3^1;
  7. sbit C3=P3^2;
  8. sbit C4=P3^3;

  9. unsigned char F=0;          //定義系統是否開啟
  10. unsigned char A=0;          //定義D3燈開關次數

  11. sbit D1=P1^0;                  //LED引腳
  12. sbit D2=P1^1;
  13. sbit D3=P1^2;

  14. sbit SW1=P2^0;                   //開關引腳
  15. sbit SW2=P2^1;
  16. unsigned char s1=0,s2=0;  //數顯管開關次數
  17. unsigned char SMG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  18. void SMGDelay(unsigned char t)           //此處為延時函數定義
  19.    {
  20.    while(t--);
  21.    }
  22. void SMGPLAY(unsigned char P,unsigned char D)         //四個數顯管的顯示位置
  23.    {
  24.     P0=0xff; //消隱
  25.             switch(P)
  26.           {
  27.           case 1:C1=1;C2=0;C3=0;C4=0;break;
  28.           case 2:C1=0;C2=1;C3=0;C4=0;break;
  29.           case 3:C1=0;C2=0;C3=1;C4=0;break;
  30.           case 4:C1=0;C2=0;C3=0;C4=1;break;
  31.           }
  32.           P0=D;
  33.    }
  34.   
  35.   void PUT4SMG()  //定義四個數顯管顯示內容
  36.   {
  37.    SMGPLAY(1,SMG[s1]);
  38.    SMGDelay(100);
  39.    SMGPLAY(2,0xbf);
  40.    SMGDelay(100);
  41.    SMGPLAY(3,0xbf);
  42.    SMGDelay(100);
  43.    SMGPLAY(4,SMG[s2]);
  44.    SMGDelay(100);
  45.   }
  46.   void KEYS()           //定義開關按下次數和系統開關和小燈泡亮滅
  47.   {
  48.   if(SW1==0)
  49.    {
  50.   SMGDelay(100);
  51.   if(SW1==0)
  52.     {
  53.   while(SW1==0)
  54.      {
  55.    PUT4SMG();
  56.      }
  57.          s1++;
  58.          if(s1==10)
  59.          {
  60.           s1=0;
  61.          }
  62.         if(F==0)
  63.           {
  64.           F=1;
  65.           D1=0;
  66.           }
  67.           else
  68.           {
  69.           F=0;
  70.           D1=1;
  71.           D2=1;
  72.           D3=1;
  73.           A=0;
  74.           }
  75.          
  76.     }
  77.    }
  78. if(SW2==0)
  79.    {
  80.   SMGDelay(100);
  81.   if(SW2==0)
  82.     {
  83.   while(SW2==0)
  84.      {
  85.    PUT4SMG();
  86.      }
  87.          s2++;
  88.          if(s2==10)
  89.           {
  90.           s2=0;
  91.           }
  92.           if(F==1)
  93.           {
  94.           A++;
  95.           switch(A)
  96.           {
  97.           case 1:D2=0;break;
  98.           case 2:D3=0;break;
  99.           case 3:D2=1;D3=1;A=0;break;
  100.           }
  101.           }

  102.     }
  103.    }
  104.   }
  105. void main()
  106. {
  107.   while(1)
  108.   {
  109.            PUT4SMG();
  110.         KEYS();
  111.    }
  112. }
復制代碼
聯合控制開關 LED.rar (20.23 KB, 售價: 1 E幣)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 01:58

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表