找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2527|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:853104 發(fā)表于 2020-12-22 11:58 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

單片機(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;//開定時(shí)器0中斷
  19.   TR0=1;//開定時(shí)器
  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();//定時(shí)器開啟
  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提供下載:
一個(gè)按鍵控制LED開關(guān)和延時(shí)切換模式.rar (96.23 KB, 下載次數(shù): 13)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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