標(biāo)題: 單片機(jī)開關(guān)控制心型LED閃爍狀態(tài)源程序與Proteus仿真 [打印本頁]

作者: 洋洋ww    時(shí)間: 2022-6-2 14:42
標(biāo)題: 單片機(jī)開關(guān)控制心型LED閃爍狀態(tài)源程序與Proteus仿真
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í)函數(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被按下時(shí)執(zhí)行操作
  25.    case 2:pattern2();break; //按鍵2被按下時(shí)執(zhí)行操作
  26.    case 3:pattern3();break; //按鍵3被按下時(shí)執(zhí)行操作
  27.    case 4:pattern4();break; //按鍵4被按下時(shí)執(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)

作者: qsddxu    時(shí)間: 2022-6-8 16:56
剛試用了  發(fā)現(xiàn)要切換不同的閃爍只能在剛接通電源時(shí)才能,中途按下其他鍵沒有反應(yīng),
作者: 164908060    時(shí)間: 2023-1-29 16:13
我的也是這樣的效果 只有復(fù)位后按按鍵可以切換 之后就切換不了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1