找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)開關(guān)控制心型LED閃爍狀態(tài)源程序與Proteus仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1031767 發(fā)表于 2022-6-2 14:42 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
Proteus通過使用單片機(jī)C51控制流水燈的閃碩狀態(tài),語言簡單

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit S1=P2^0;
  6. sbit S2=P2^1;
  7. sbit S3=P2^2;
  8. sbit S4=P2^3;
  9. uchar keyval;   //定義鍵值變量
  10. void key_scan();        //按鍵掃描函數(shù)聲明
  11. void delayms(uint);       //延時函數(shù)聲明
  12. void pattern1();
  13. void pattern2();
  14. void pattern3();
  15. void pattern4();

  16. void main(void)
  17. {
  18. keyval=0;
  19. while(1)
  20. {
  21.   key_scan();                         //調(diào)用按鍵掃描函數(shù)
  22.   switch(keyval)                  
  23.   {
  24.    case 1:pattern1();break; //按鍵1被按下時執(zhí)行操作
  25.    case 2:pattern2();break; //按鍵2被按下時執(zhí)行操作
  26.    case 3:pattern3();break; //按鍵3被按下時執(zhí)行操作
  27.    case 4:pattern4();break; //按鍵4被按下時執(zhí)行操作
  28.   }
  29. }
  30. }
  31. void key_scan(void)       //按鍵掃描函數(shù)定義
  32. {
  33. P2=0xff;
  34. if((P2&0x0f)!=0x0f)
  35. {
  36.   delayms(100);    //按鍵消抖
  37.   if(S1==0)
  38.   keyval=1;
  39.   if(S2==0)
  40.   keyval=2;
  41.   if(S3==0)
  42.   keyval=3;
  43.   if(S4==0)
  44.   keyval=4;
  45. }
  46. }
  47. void delayms(uint j)
  48. {
  49.         uchar i;
  50.         for(;j>0;j--)
  51.         {
  52.                 i=250;
  53.                 while(--i);
  54.                 i=249;
  55.                 while(--i);
  56.         }
  57. }


  58. void pattern1()
  59. {
  60.   uchar i;
  61.         P0=0x7f;
  62.         P1=0xfe;
  63.         for(i=0;i<8;i++)
  64.         {delayms(200);
  65.          P0=_cror_(P0,1);
  66.          P1=_crol_(P1,1);
  67.   }
  68. }

  69. void pattern2()
  70. {
  71.   uchar i,temp;
  72.         temp=0xfe;
  73.         for(i=0;i<8;i++)
  74.         {delayms(200);
  75.          P0=P1=temp;
  76.          temp=temp<<1;
  77.   }
  78. }

  79. void pattern3()
  80. {
  81.     P0=P1=0xff;
  82.           delayms(200);
  83.           P0=P1=0x00;
  84.           delayms(200);
  85. }


  86. void pattern4()
  87. {
  88.   uchar i;
  89.         P0=0x7f;
  90.         for(i=0;i<8;i++)
  91.         {delayms(200);
  92.          P0=_cror_(P0,1);
  93.   }        
  94.         P0=0xff;
  95.         P1=0xfe;
  96.         for(i=0;i<8;i++)
  97.         {delayms(200);
  98.          P1=_crol_(P1,1);
  99.   }
  100.         P1=0xff;
  101. }
復(fù)制代碼
本人初學(xué),僅供參考,存在錯誤和不足之處,請大家回帖多多指教,切勿照搬,文件下載:
以上的Keil5代碼工程文件和Proteus仿真8.13下載:
以上代碼下載.7z (60.43 KB, 下載次數(shù): 17)

評分

參與人數(shù) 1黑幣 +10 收起 理由
admin + 10 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:561301 發(fā)表于 2022-6-8 16:56 | 只看該作者
剛試用了  發(fā)現(xiàn)要切換不同的閃爍只能在剛接通電源時才能,中途按下其他鍵沒有反應(yīng),
回復(fù)

使用道具 舉報

板凳
ID:65074 發(fā)表于 2023-1-29 16:13 | 只看該作者
我的也是這樣的效果 只有復(fù)位后按按鍵可以切換 之后就切換不了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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