久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3687|回復: 20
打印 上一主題 下一主題
收起左側

51單片機能不能利用定時器做一個不規則的LED閃爍?

[復制鏈接]
跳轉到指定樓層
樓主
比如不是要那種1秒閃一秒滅那種,而是那種0.4秒亮。1.6秒滅那種.自己找了些程序想做參考,但基本都是那種比較固定的亮滅正好相反的那種。并且在Protest動態幀運的時間計時是不是剛開始有個延遲?我現在在想的時兩個計時一個負責滅一個負責亮

單片機源程序如下:
#include<reg52.h>
sbit led=P1^0; //聲明一個用于測試的led燈
unsigned char one;
unsigned char two;
void main()
{
TMOD=0x01; //聲明定時器的工作方式M1=0,M0=1
                                         //裝入初始值,即計滿所裝的數時,就會溢出
TH0=(65536-45872)/256;
TL0=(65536-45872)/256;
EA=1;  //開啟全局中斷允許
ET0=1; //開啟定時器0中斷允許
TR0=1; //開啟定時器0
while(1); //讓程序一直循環下去,中斷也不斷產生

}
                        //中斷函數
  void  T_Time() interrupt 2
  {
        TH0=(65536-45872)/256;                                //重裝初值
        TL0=(65536-45872)/256;
        one++;
                                two++;               
        if(one==4)                 //當number=20時,即為1s
         {
          one=0;                                          //把number置0,重新計數
          led=1;                         //使led燈每隔1s亮一次
         }
                                else(two==16);
                                 {
                                        two=0;
                                        led=0;
                                 }
  }
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:97554 發表于 2021-1-7 15:32 | 只看該作者
WHILE(1)
{
LED = 1;
DELAY 0.4S;
LED = 0;
DELAY 1.6S;
}

不行?
回復

使用道具 舉報

板凳
ID:752974 發表于 2021-1-7 15:38 | 只看該作者
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。。。如此。
回復

使用道具 舉報

地板
ID:874595 發表于 2021-1-7 15:49 | 只看該作者

這樣是不是就不去利用中斷計時器去計時嗎?
回復

使用道具 舉報

5#
ID:874595 發表于 2021-1-7 15:50 | 只看該作者
munuc_w 發表于 2021-1-7 15:38
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。 ...

我也是這么想的,但我沒搞懂后面應該是怎么些,倒是能看的懂一些常見亮1秒滅一秒的案例代碼,但自己搞不懂怎么修改成我想要的那種計時效果
回復

使用道具 舉報

6#
ID:874595 發表于 2021-1-7 16:00 | 只看該作者
能否問下后續應該怎么修改,因為這一段一直沒搞懂,只知道個大概,找了幾個示例程序修改也一直沒搞出想要的效果,編譯也能過,但編譯出來的HEX文件沒有那種效果
回復

使用道具 舉報

7#
ID:874595 發表于 2021-1-7 16:01 | 只看該作者
C:\Users\Mr.Z\Pictures\Screenshots這是protest的仿真圖
回復

使用道具 舉報

8#
ID:874595 發表于 2021-1-7 16:05 | 只看該作者
這是Proteus的仿真設計圖,用的AT89C51,想修改成利用中斷計時器去進行LED燈亮2滅1那種的自由設定的參數,求解后續該怎么修改。

屏幕截圖(6).png (172.61 KB, 下載次數: 91)

屏幕截圖(6).png
回復

使用道具 舉報

9#
ID:874595 發表于 2021-1-7 16:10 | 只看該作者
仿真電路圖

屏幕截圖(6).png (172.61 KB, 下載次數: 104)

屏幕截圖(6).png
回復

使用道具 舉報

10#
ID:213173 發表于 2021-1-7 16:16 | 只看該作者
用定時器作LED不對稱閃爍當然沒有問題,樓主T0中斷號錯了!改這樣就能實現樓主目的。

void  T_Time() interrupt 1
{
        TH0=(65536-45872)/256;//重裝初值
        TL0=(65536-45872)/256;
        one++;            
        if(one>=40)//2s周期
                one=0;

        if(one<=8)
                led=0;//亮0.4s
        else led=1;//熄1.6s
}
回復

使用道具 舉報

11#
ID:831068 發表于 2021-1-7 16:16 | 只看該作者
迷鹿的夏夜 發表于 2021-1-7 16:00
能否問下后續應該怎么修改,因為這一段一直沒搞懂,只知道個大概,找了幾個示例程序修改也一直沒搞出想要的 ...

        one++;                           
        if(one<=4)            
         {        
          led=1;                         //led燈亮
         }
         else if(one<=16)
       {
        led=0;  
      }
      else
     {
       one=0;//把number置0,重新計數
     }
                  
回復

使用道具 舉報

12#
ID:714744 發表于 2021-1-7 16:27 | 只看該作者
要是滿足04秒亮1.6滅,我這邊建議的話用PWM波進行控制,一個周期為2秒,高電平(低電平)為0.4秒,低電平(高電平)1.6秒,這種方法和用PWM控制步進電機轉速的方法有點像
回復

使用道具 舉報

13#
ID:874595 發表于 2021-1-7 16:29 | 只看該作者
wulin 發表于 2021-1-7 16:16
用定時器作LED不對稱閃爍當然沒有問題,樓主T0中斷號錯了!改這樣就能實現樓主目的。

void  T_Time() in ...

非常感謝,大概明白是具體什么工作原理,并且也算是記住了~波浪號是用來取反的,非常感謝
回復

使用道具 舉報

14#
ID:874595 發表于 2021-1-7 16:30 | 只看該作者
ggyu7 發表于 2021-1-7 16:27
要是滿足04秒亮1.6滅,我這邊建議的話用PWM波進行控制,一個周期為2秒,高電平(低電平)為0.4秒,低電平( ...

嗯,會借鑒參考了,已經解決了,但仍感謝提出的參考意見。
回復

使用道具 舉報

15#
ID:874595 發表于 2021-1-7 16:30 | 只看該作者
munuc_w 發表于 2021-1-7 15:38
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。 ...

已經解決了,感覺提出的意見參考
回復

使用道具 舉報

16#
ID:874595 發表于 2021-1-7 16:31 | 只看該作者
chaoge131 發表于 2021-1-7 16:16
one++;                           
        if(one

謝謝提供的修改意見
回復

使用道具 舉報

17#
ID:714744 發表于 2021-1-7 16:32 | 只看該作者
其實的話我感覺不用定時器也是可以的,就是用PWM波進行時間點的控制,要是想0.4秒亮,1.6秒滅。可以設置一個周期為兩秒的方波,其中高電平(低電平)為0.4秒,低電平(高電平)為1.6秒,這種方法和用PWM波控制步進電機轉速很像,樓主可以參考一下。如果想用定時器,也可以用這種類似的方法,用到兩個定時器,但是他們時間重合的點,需要刪除。
回復

使用道具 舉報

18#
ID:97554 發表于 2021-1-7 18:30 | 只看該作者
迷鹿的夏夜 發表于 2021-1-7 15:49
這樣是不是就不去利用中斷計時器去計時嗎?

如果你只單純控制LED按你想要的方式閃,這種延時循環似乎比計時器更管用,因為還可以在后邊加很多花樣。你說的等時間閃爍那只是給初學者的教程,為了舉一反三而已。因為那只要一行LED = ~LED;代碼就可以解決。定時器是解決更高級問題用的,比如精確的計算出延時或者使用的器件需要精確的高速的時序。對于點燈來說,無謂了。或者你是為了學習定時器,也不算冤枉。

比如流水燈,你可以寫成:
while(1)
{
LED1 = 0;LED2 = 1; LED3 = 1; LED4 = 1; LED5 = 1; LED6 = 1; LED7=1;
delay;
LED1 = 1;LED2 = 0; LED3 = 1; LED4 = 1; LED5 = 1; LED6 = 1; LED7=1;
delay;
LED1 = 1;LED2 = 1; LED3 = 0; LED4 = 1; LED5 = 1; LED6 = 1; LED7=1;
delay;
LED1 = 1;LED2 = 1; LED3 = 1; LED4 = 0; LED5 = 1; LED6 = 1; LED7=1;
delay;
……

LED1 = 1;LED2 = 1; LED3 = 1; LED4 = 1; LED5 = 1; LED6 = 1; LED7=0;
delay;
}

也可以寫成
while(1)
{
PX = 0XFE;
delay;
PX = 0XFC;
delay;

……

PX =0X7F;
delay;
}

還可以寫成
while(1);
{
PX << =1;
delay;
}

至于你想用哪個,這純屬個人愛好,條條大路通羅馬嘛。

回復

使用道具 舉報

19#
ID:97554 發表于 2021-1-7 18:32 | 只看該作者
反正用延時和0,1組合做過爆閃燈玩,沒用定時器,可以多種組合。
回復

使用道具 舉報

20#
ID:584814 發表于 2021-1-11 11:16 | 只看該作者
機器做的肯定是規則的,只是規則復雜些可以讓人有不規則的錯覺而已。
回復

使用道具 舉報

21#
ID:25310 發表于 2021-1-12 16:31 | 只看該作者
產生個隨機數數組然后裝到定時器,循環使用隨機數數組裝到定時器使用。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品一区二区国产 | 亚洲视频在线观看一区 | 在线国产小视频 | 九九天堂 | 日本人の夫妇交换 | 手机在线毛片 | 欧美日韩中文字幕在线观看 | 五月伊人网| 福利视频午夜 | 少妇免费视频 | 五月天激情视频 | 精品一区二区三区视频 | 日韩毛片免费看 | 亚洲国产成人精品女人 | 亚洲视频在线观看一区 | 日韩欧美国产精品 | 免费看黄色小视频 | 日韩欧美在线观看 | 国产又黄又爽视频 | 精品黄色片 | av三级在线观看 | 五月婷婷六月天 | 91亚洲国产| 午夜成人免费视频 | 国产综合久久久 | 亚洲精品久久久久avwww潮水 | 91精品久久久久久久久久 | 日韩在线视频免费观看 | www.久久爱 | 国产成人a亚洲精品 | 日韩大片在线观看 | 高清视频一区二区 | 中文字幕在线观看日韩 | 欧美国产日韩一区 | 成人国产网站 | 欧美视频免费在线观看 | 伊人色综合网 | 国产成人久久精品麻豆二区 | 天堂中文字幕免费一区 | 黄色大片网站 | 二级黄色片|