![]() |
發布時間: 2021-1-7 13:46
正文摘要:比如不是要那種1秒閃一秒滅那種,而是那種0.4秒亮。1.6秒滅那種.自己找了些程序想做參考,但基本都是那種比較固定的亮滅正好相反的那種。并且在Protest動態幀運的時間計時是不是剛開始有個延遲?我現在在想的時兩個 ... |
產生個隨機數數組然后裝到定時器,循環使用隨機數數組裝到定時器使用。 |
機器做的肯定是規則的,只是規則復雜些可以讓人有不規則的錯覺而已。 |
反正用延時和0,1組合做過爆閃燈玩,沒用定時器,可以多種組合。 |
迷鹿的夏夜 發表于 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; } 至于你想用哪個,這純屬個人愛好,條條大路通羅馬嘛。 |
其實的話我感覺不用定時器也是可以的,就是用PWM波進行時間點的控制,要是想0.4秒亮,1.6秒滅。可以設置一個周期為兩秒的方波,其中高電平(低電平)為0.4秒,低電平(高電平)為1.6秒,這種方法和用PWM波控制步進電機轉速很像,樓主可以參考一下。如果想用定時器,也可以用這種類似的方法,用到兩個定時器,但是他們時間重合的點,需要刪除。 |
chaoge131 發表于 2021-1-7 16:16 謝謝提供的修改意見 |
munuc_w 發表于 2021-1-7 15:38 已經解決了,感覺提出的意見參考 |
ggyu7 發表于 2021-1-7 16:27 嗯,會借鑒參考了,已經解決了,但仍感謝提出的參考意見。 |
wulin 發表于 2021-1-7 16:16 非常感謝,大概明白是具體什么工作原理,并且也算是記住了~波浪號是用來取反的,非常感謝 |
要是滿足04秒亮1.6滅,我這邊建議的話用PWM波進行控制,一個周期為2秒,高電平(低電平)為0.4秒,低電平(高電平)1.6秒,這種方法和用PWM控制步進電機轉速的方法有點像 |
迷鹿的夏夜 發表于 2021-1-7 16:00 one++; if(one<=4) { led=1; //led燈亮 } else if(one<=16) { led=0; } else { one=0;//把number置0,重新計數 } |
用定時器作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 } |
C:\Users\Mr.Z\Pictures\Screenshots這是protest的仿真圖 |
能否問下后續應該怎么修改,因為這一段一直沒搞懂,只知道個大概,找了幾個示例程序修改也一直沒搞出想要的效果,編譯也能過,但編譯出來的HEX文件沒有那種效果 |
munuc_w 發表于 2021-1-7 15:38 我也是這么想的,但我沒搞懂后面應該是怎么些,倒是能看的懂一些常見亮1秒滅一秒的案例代碼,但自己搞不懂怎么修改成我想要的那種計時效果 |
楊雪飛 發表于 2021-1-7 15:32 這樣是不是就不去利用中斷計時器去計時嗎? |
用一個定時器即可,設定時時間10ms。計時開始LED亮,計到40關燈,計到160,計數清零,重新計數,LED亮,。。。如此。 |
WHILE(1) { LED = 1; DELAY 0.4S; LED = 0; DELAY 1.6S; } 不行? |