找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個按鍵控制LED開關(guān)和延時進(jìn)行模式切換 Proteus仿真程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:853104 發(fā)表于 2020-12-22 11:58 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit s1=P3^4;
  5. sbit led=P3^3;//


  6. /*****************按鍵掃描用的**********************/
  7. #define  short_key 5     
  8. #define  short_small_key  4   
  9. #define  long_key  100

  10. bit button1_shortflag=0;
  11. bit button1_longflag=0;
  12.   uchar flag=2;



  13.   void time_init()
  14.   {
  15.   TMOD=0x01;//方式1
  16.   TH0=-10000/256;
  17.   TL0=-10000%256;//10ms
  18.   ET0=1;//開定時器0中斷
  19.   TR0=1;//開定時器
  20.   EA=1;//開總中斷
  21.   }

  22. /****************************************/


  23. void getkey_number()
  24. {
  25. static uchar button1_time=0;
  26. static uchar button1_time1=0;
  27.         if(s1==0)
  28.         {
  29.            button1_time>=short_key?(button1_time=short_key):button1_time++;//
  30.                  button1_time1>=long_key?(button1_time1=long_key):button1_time1++;//
  31.         }
  32.     else
  33.                 {
  34.                         if(button1_time1==long_key)
  35.                         {   button1_time1=0;
  36.                             button1_time=0;
  37.                                  button1_longflag=1;        
  38.                         }
  39.                  if(button1_time==short_key)
  40.                  {
  41.                           button1_time=0;
  42.                          button1_time1=0;
  43.                          button1_shortflag=1;
  44.                  }
  45.                 }

  46. }



  47. void main()
  48. {
  49.         static uchar k;
  50. time_init();//定時器開啟
  51.    while(1)
  52.    {           
  53.          
  54. if(button1_shortflag==1)
  55. {
  56.         button1_shortflag=0;
  57.         flag=2;
  58.         if(led==0) led=1;
  59.         else led=0;
  60. }

  61. if(button1_longflag==1)
  62. {
  63. button1_longflag=0;
  64.         if(++k>=2) k=0;
  65.    if(k==0) {flag=1;}
  66.                  else  {flag=0;}
  67. }
  68.    }
  69. }


  70. /****************************************/
  71. void time0() interrupt 1
  72. {
  73. static uchar time=0;
  74.         static uchar m;
  75. TR0=0;

  76. /*************用于按鍵掃描******************/
  77. if(++time>=2)                          
  78. {  time=0;
  79.   getkey_number();
  80. }        
  81. if(flag!=2)
  82. {
  83. if(flag==0)
  84. {
  85.         if(++m>=40)
  86.         {
  87.         m=0; led=!led;
  88.         }
  89. }
  90.         if(flag==1)
  91.         {
  92.         led=0;
  93.         }
  94. }


  95.   TH0=-10000/256;
  96.   TL0=-10000%256;
  97.   TR0=1;



  98. }
復(fù)制代碼

仿真程序51hei提供下載:
一個按鍵控制LED開關(guān)和延時切換模式.rar (96.23 KB, 下載次數(shù): 13)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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