標(biāo)題: 關(guān)于51單片機(jī) 我覺得這個(gè)程序的意思應(yīng)該是亮一陣然后暗,為什么這個(gè)循環(huán)會(huì)有閃爍 [打印本頁]

作者: pinenut    時(shí)間: 2018-1-22 19:49
標(biāo)題: 關(guān)于51單片機(jī) 我覺得這個(gè)程序的意思應(yīng)該是亮一陣然后暗,為什么這個(gè)循環(huán)會(huì)有閃爍
問題:我覺得這個(gè)程序的意思應(yīng)該是亮一陣然后暗,為什么這個(gè)循環(huán)會(huì)有閃爍,這個(gè)程序的執(zhí)行順序是什么?謝謝。
#include"reg52.h"
sbit led1=P2^0;
unsigned int a;
void main()
{
  a=50000;
led1=0;
while(a--);//問題:這里的循環(huán)不是起延長(zhǎng)時(shí)間的作用嗎?使led1一直亮,之后就暗嗎?為什么會(huì)閃爍
led1=1;
  a=50000;
while(a--);
}


作者: 冰純    時(shí)間: 2018-1-22 21:23
因延時(shí)比較短,視覺效果是閃爍的。
作者: ahshmj    時(shí)間: 2018-1-22 21:31
led1=0(亮),延時(shí)(大約是0.5S),然后led1=1(滅)延時(shí)(大約是0.5S),不就是閃爍嗎?

你的程序少了一句(紅色的行)

void main()

{
while(1)
{
  a=50000;
led1=0;
while(a--);
  a=50000;
while(a--);
}
}
作者: 1254333071    時(shí)間: 2018-1-22 21:38
這是用來延時(shí)的,也可以用嵌套的for循環(huán),都有延時(shí)的作用
作者: 天下1213    時(shí)間: 2018-1-23 08:43
修改合適的延遲時(shí)間,看看咋樣
作者: 流逝記憶    時(shí)間: 2018-1-23 09:04
你這里延時(shí)做的不太對(duì),就是上面說,時(shí)間太短了,建議用定時(shí)器做,閃爍問題不太能理解 應(yīng)該有while(1)的,我沒有看到 但是時(shí)間上必須要改動(dòng)。也可以做一個(gè)延時(shí)循環(huán) 之后調(diào)用他。比如delayms(int a)這個(gè)函數(shù)定義個(gè)毫秒級(jí)延時(shí),調(diào)用它,這樣你能知道你延時(shí)的時(shí)間。再不懂你就模擬調(diào)試 將LED 這個(gè)IO接口的邏輯和代碼一起貼出來。
作者: 哦哦哦哦哦    時(shí)間: 2018-1-23 09:39
延時(shí)比較短,所以就變成閃爍啦。樓主可以試試把a(bǔ)的值再調(diào)整大一些,就可以看到一陣亮一陣滅的效果啦
作者: leesin    時(shí)間: 2018-1-23 11:27
你的發(fā)光二極管的接法是共陰還是共陽的呢?
作者: pinenut    時(shí)間: 2018-1-23 11:45
ahshmj 發(fā)表于 2018-1-22 21:31
led1=0(亮),延時(shí)(大約是0.5S),然后led1=1(滅)延時(shí)(大約是0.5S),不就是閃爍嗎?

你的程序少了 ...

很感謝回答,想再問一下為什么不加大循環(huán)while(1)也可以閃爍,如果沒有while(1)大循環(huán),這個(gè)程序?yàn)槭裁磿?huì)循環(huán)啊,這里的while(a--)不是只起延時(shí)的作用嗎,不會(huì)讓整個(gè)程序再循環(huán)啊,怎么會(huì)一直閃爍呢
作者: pinenut    時(shí)間: 2018-1-23 11:48
流逝記憶 發(fā)表于 2018-1-23 09:04
你這里延時(shí)做的不太對(duì),就是上面說,時(shí)間太短了,建議用定時(shí)器做,閃爍問題不太能理解 應(yīng)該有while(1)的 ...

非常感謝。由于是剛學(xué),今天剛學(xué)到延時(shí)函數(shù),感謝耐心回答
不過,while(a--)明顯比for循環(huán)的嵌套簡(jiǎn)單的多啊,為什么調(diào)用的延時(shí)函數(shù)里面寫的都是for循環(huán)的嵌套?
作者: pinenut    時(shí)間: 2018-1-23 11:49
天下1213 發(fā)表于 2018-1-23 08:43
修改合適的延遲時(shí)間,看看咋樣

好,我沒注意時(shí)間,下次一定注意。感謝耐心回答
作者: pinenut    時(shí)間: 2018-1-23 11:50
哦哦哦哦哦 發(fā)表于 2018-1-23 09:39
延時(shí)比較短,所以就變成閃爍啦。樓主可以試試把a(bǔ)的值再調(diào)整大一些,就可以看到一陣亮一陣滅的效果啦

可是我都沒有加while(1)的大循環(huán),他為什么會(huì)循環(huán)閃爍呢
作者: pinenut    時(shí)間: 2018-1-23 11:52
leesin 發(fā)表于 2018-1-23 11:27
你的發(fā)光二極管的接法是共陰還是共陽的呢?

低電平亮,應(yīng)該是共陽
作者: 1354221508    時(shí)間: 2018-1-23 13:36
一直再循環(huán)里面如果你把后面去掉了,那就是延時(shí)了就滅了
作者: aries205    時(shí)間: 2018-1-23 14:20
不是循環(huán)執(zhí)行,while的等待時(shí)間太短,需要插入一些語句或延長(zhǎng)計(jì)數(shù)值。
作者: 哈哈哈哈、    時(shí)間: 2018-1-23 14:58
while是循環(huán)當(dāng)然是閃爍了。。
作者: 哈哈哈哈、    時(shí)間: 2018-1-23 15:26
a--,亮了接著減1,然后暗減1,亮循環(huán)進(jìn)行成閃爍了,要不改成定時(shí)才行
作者: 藍(lán)少    時(shí)間: 2018-1-23 15:31
因延時(shí)比較短,視覺效果是閃爍的。
作者: 藍(lán)少    時(shí)間: 2018-1-23 15:32

因延時(shí)比較短,視覺效果是閃爍的。
作者: 流逝記憶    時(shí)間: 2018-1-23 16:14
pinenut 發(fā)表于 2018-1-23 11:48
非常感謝。由于是剛學(xué),今天剛學(xué)到延時(shí)函數(shù),感謝耐心回答
不過,while(a--)明顯比for循環(huán)的嵌套簡(jiǎn)單 ...

現(xiàn)在你用us級(jí)延時(shí) ms 級(jí)延時(shí) s級(jí)延時(shí) 你會(huì)發(fā)現(xiàn)嵌套比while(a--)好用。
作者: xiaoyinniao    時(shí)間: 2018-1-23 16:17
不能依靠這么高速運(yùn)行單片機(jī),來做減數(shù)運(yùn)算,得出來的時(shí)間,你的肉眼是無法分辨的
作者: xiaoyinniao    時(shí)間: 2018-1-23 16:21
應(yīng)該寫延時(shí)子程序
作者: pinenut    時(shí)間: 2018-1-24 19:29
pinenut 發(fā)表于 2018-1-23 11:45
很感謝回答,想再問一下為什么不加大循環(huán)while(1)也可以閃爍,如果沒有while(1)大循環(huán),這個(gè)程序?yàn)槭?...

為什么不加while(1)大循環(huán)還是閃爍




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1