找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 4242|回復(fù): 0
收起左側(cè)

用單片機定時器實現(xiàn)流水燈即時熄滅和暫停的Proteus仿真+代碼

[復(fù)制鏈接]
ID:524018 發(fā)表于 2019-5-1 12:07 | 顯示全部樓層 |閱讀模式
原代碼
按鍵1 控制亮滅,按下時燈滅,再按下繼續(xù)流水
按鍵2 控制暫停,按下時暫停,保持該LED燈亮,再按下繼續(xù)

單片機源程序如下:
  1. #include<reg52.h>
  2. sbit KEY=P3^2;                 //按鍵1
  3. sbit KEY1=P3^3;                //按鍵2
  4. unsigned char code d[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
  5. 0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0x00,0xff}; //燈的效果(常量)
  6. void time();
  7. void timer();//調(diào)用中斷
  8. bit flag;         //標志位1
  9. bit flag1;          //標志位2

  10. void main()
  11. {
  12. time();
  13. while(1)
  14. {
  15.   if(!KEY)
  16.         {
  17.    
  18.          if(!KEY)
  19.           {
  20.             while(!KEY);                          //控制燈停止的按鍵
  21.                  {flag=~flag;}
  22.           }
  23.         }

  24. if(!KEY1)
  25.            {
  26.    
  27.          if(!KEY1)
  28.           {
  29.             while(!KEY1);                         //控制燈熄滅的按鍵
  30.                  {flag1=~flag1;}
  31.           }
  32.         }        
  33. }
  34. }

  35. void time()
  36. {
  37.         TMOD|=0x01;               
  38.         //設(shè)置定時器工作模式TMOD(定時器工作方式寄存器);
  39.         //GATE(定時器/計數(shù)器的開關(guān)控制選項)設(shè)置為0;即定時器/計數(shù)器的開關(guān)控制僅由TCON寄存器中的TRx(x = 0,1)控制
  40.         //C/T位(定時器模式和計數(shù)器模式選擇位)設(shè)置為0使其工作在定時器模式下;將該位置1則為定時器模式。
  41.         //M1M0設(shè)置為01,使用16位計數(shù)

  42.         TH0 = 0xD8;            //65536-10000
  43.         TL0 = 0xF0;            //55536
  44.         EA =1;                         //開啟總中斷
  45.         EX0=1;                        //開啟0號外部中斷
  46.         IT0=1;                        //設(shè)置外部中斷0觸發(fā)方式,1 - 負跳變觸發(fā)
  47.         TR0=1;                         //定時器0運行控制位,將該位置1時啟動定時器0
  48.         ET0=1;                         //定時器/計數(shù)器0中斷允許位

  49. }

  50. void timer() interrupt 0
  51. {
  52.            P2=0xff;
  53. }

  54. void timeer() interrupt 1
  55. {
  56.         static unsigned int k=0;
  57.         static unsigned char i=0;

  58.         TH0=(65536-2000)/256;
  59.         TL0=(65536-2000)%256;                //實現(xiàn)延時

  60.         if((!flag)&&(!flag1))
  61.         {
  62.                 k++;
  63.                 if(k<150)                                //當(dāng)兩個按鍵都沒有被按下時,燈進行流水效果
  64.                 {P2=d[i];}
  65.                          if(k==300)
  66.                         {
  67.                                 k=0;
  68.                                 i++;
  69.                                 if(i==18)
  70.                                 i=0;
  71.                         }  
  72.         }                        
  73. }
復(fù)制代碼

全部資料51hei下載地址:
Proteus 8.7模擬.zip (52.52 KB, 下載次數(shù): 18)
hex原文件.zip (607 Bytes, 下載次數(shù): 12)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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