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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

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

查看數: 3695 | 評論數: 20 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-1-7 13:46

正文摘要:

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

回復

ID:25310 發表于 2021-1-12 16:31
產生個隨機數數組然后裝到定時器,循環使用隨機數數組裝到定時器使用。
ID:584814 發表于 2021-1-11 11:16
機器做的肯定是規則的,只是規則復雜些可以讓人有不規則的錯覺而已。
ID:97554 發表于 2021-1-7 18:32
反正用延時和0,1組合做過爆閃燈玩,沒用定時器,可以多種組合。
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;
}

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

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

謝謝提供的修改意見
ID:874595 發表于 2021-1-7 16:30
munuc_w 發表于 2021-1-7 15:38
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。 ...

已經解決了,感覺提出的意見參考
ID:874595 發表于 2021-1-7 16:30
ggyu7 發表于 2021-1-7 16:27
要是滿足04秒亮1.6滅,我這邊建議的話用PWM波進行控制,一個周期為2秒,高電平(低電平)為0.4秒,低電平( ...

嗯,會借鑒參考了,已經解決了,但仍感謝提出的參考意見。
ID:874595 發表于 2021-1-7 16:29
wulin 發表于 2021-1-7 16:16
用定時器作LED不對稱閃爍當然沒有問題,樓主T0中斷號錯了!改這樣就能實現樓主目的。

void  T_Time() in ...

非常感謝,大概明白是具體什么工作原理,并且也算是記住了~波浪號是用來取反的,非常感謝
ID:714744 發表于 2021-1-7 16:27
要是滿足04秒亮1.6滅,我這邊建議的話用PWM波進行控制,一個周期為2秒,高電平(低電平)為0.4秒,低電平(高電平)1.6秒,這種方法和用PWM控制步進電機轉速的方法有點像
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,重新計數
     }
                  
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
}
ID:874595 發表于 2021-1-7 16:01
C:\Users\Mr.Z\Pictures\Screenshots這是protest的仿真圖
ID:874595 發表于 2021-1-7 16:00
能否問下后續應該怎么修改,因為這一段一直沒搞懂,只知道個大概,找了幾個示例程序修改也一直沒搞出想要的效果,編譯也能過,但編譯出來的HEX文件沒有那種效果
ID:874595 發表于 2021-1-7 15:50
munuc_w 發表于 2021-1-7 15:38
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。 ...

我也是這么想的,但我沒搞懂后面應該是怎么些,倒是能看的懂一些常見亮1秒滅一秒的案例代碼,但自己搞不懂怎么修改成我想要的那種計時效果
ID:874595 發表于 2021-1-7 15:49

這樣是不是就不去利用中斷計時器去計時嗎?
ID:752974 發表于 2021-1-7 15:38
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。。。如此。
ID:97554 發表于 2021-1-7 15:32
WHILE(1)
{
LED = 1;
DELAY 0.4S;
LED = 0;
DELAY 1.6S;
}

不行?

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成av人片一区二区三区久久 | 欧美日韩在线不卡 | 亚洲精品视频免费在线观看 | 国产小视频在线播放 | 长河落日 | 中文字幕永久免费 | 国产成人免费观看 | 九久久 | 日日爱影视 | 日本中文字幕在线 | 91免费看国产 | 成人av网站在线观看 | 日韩视频在线观看免费 | 成人b站 | 伊人久久国产 | 欧美精品亚洲 | 超碰免费人人 | 午夜视频在线 | 羞羞在线 | 久久草视频 | 国产综合久久 | 久久在线精品 | 激情视频小说 | 亚洲第一网站 | 欧美成人午夜 | 亚洲欧美精品一区二区 | 国产精品va| 在线播放a | 欧美三级精品 | 黄色小说视频网站 | 亚洲国产成人av | 91中文在线 | 日韩欧美精品 | 国产成人在线免费视频 | 日韩精品在线看 | 亚洲精品久久久蜜桃 | 婷婷丁香六月 | 成年人黄色网址 | 成人欧美一区二区三区黑人免费 | 国产一区高清 | 亚洲午夜精品一区二区三区 |