找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3178|回復(fù): 22
打印 上一主題 下一主題
收起左側(cè)

關(guān)于51單片機 我覺得這個程序的意思應(yīng)該是亮一陣然后暗,為什么這個循環(huán)會有閃爍

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:278709 發(fā)表于 2018-1-22 19:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
問題:我覺得這個程序的意思應(yīng)該是亮一陣然后暗,為什么這個循環(huán)會有閃爍,這個程序的執(zhí)行順序是什么?謝謝。
#include"reg52.h"
sbit led1=P2^0;
unsigned int a;
void main()
{
  a=50000;
led1=0;
while(a--);//問題:這里的循環(huán)不是起延長時間的作用嗎?使led1一直亮,之后就暗嗎?為什么會閃爍
led1=1;
  a=50000;
while(a--);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:261288 發(fā)表于 2018-1-22 21:23 | 只看該作者
因延時比較短,視覺效果是閃爍的。
回復(fù)

使用道具 舉報

板凳
ID:7485 發(fā)表于 2018-1-22 21:31 | 只看該作者
led1=0(亮),延時(大約是0.5S),然后led1=1(滅)延時(大約是0.5S),不就是閃爍嗎?

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

void main()

{
while(1)
{
  a=50000;
led1=0;
while(a--);
  a=50000;
while(a--);
}
}
回復(fù)

使用道具 舉報

地板
ID:278299 發(fā)表于 2018-1-22 21:38 | 只看該作者
這是用來延時的,也可以用嵌套的for循環(huán),都有延時的作用
回復(fù)

使用道具 舉報

5#
ID:247467 發(fā)表于 2018-1-23 08:43 | 只看該作者
修改合適的延遲時間,看看咋樣
回復(fù)

使用道具 舉報

6#
ID:62355 發(fā)表于 2018-1-23 09:04 | 只看該作者
你這里延時做的不太對,就是上面說,時間太短了,建議用定時器做,閃爍問題不太能理解 應(yīng)該有while(1)的,我沒有看到 但是時間上必須要改動。也可以做一個延時循環(huán) 之后調(diào)用他。比如delayms(int a)這個函數(shù)定義個毫秒級延時,調(diào)用它,這樣你能知道你延時的時間。再不懂你就模擬調(diào)試 將LED 這個IO接口的邏輯和代碼一起貼出來。
回復(fù)

使用道具 舉報

7#
ID:278811 發(fā)表于 2018-1-23 09:39 | 只看該作者
延時比較短,所以就變成閃爍啦。樓主可以試試把a的值再調(diào)整大一些,就可以看到一陣亮一陣滅的效果啦
回復(fù)

使用道具 舉報

8#
ID:278860 發(fā)表于 2018-1-23 11:27 | 只看該作者
你的發(fā)光二極管的接法是共陰還是共陽的呢?
回復(fù)

使用道具 舉報

9#
ID:278709 發(fā)表于 2018-1-23 11:45 | 只看該作者
ahshmj 發(fā)表于 2018-1-22 21:31
led1=0(亮),延時(大約是0.5S),然后led1=1(滅)延時(大約是0.5S),不就是閃爍嗎?

你的程序少了 ...

很感謝回答,想再問一下為什么不加大循環(huán)while(1)也可以閃爍,如果沒有while(1)大循環(huán),這個程序為什么會循環(huán)啊,這里的while(a--)不是只起延時的作用嗎,不會讓整個程序再循環(huán)啊,怎么會一直閃爍呢
回復(fù)

使用道具 舉報

10#
ID:278709 發(fā)表于 2018-1-23 11:48 | 只看該作者
流逝記憶 發(fā)表于 2018-1-23 09:04
你這里延時做的不太對,就是上面說,時間太短了,建議用定時器做,閃爍問題不太能理解 應(yīng)該有while(1)的 ...

非常感謝。由于是剛學(xué),今天剛學(xué)到延時函數(shù),感謝耐心回答
不過,while(a--)明顯比for循環(huán)的嵌套簡單的多啊,為什么調(diào)用的延時函數(shù)里面寫的都是for循環(huán)的嵌套?
回復(fù)

使用道具 舉報

11#
ID:278709 發(fā)表于 2018-1-23 11:49 | 只看該作者
天下1213 發(fā)表于 2018-1-23 08:43
修改合適的延遲時間,看看咋樣

好,我沒注意時間,下次一定注意。感謝耐心回答
回復(fù)

使用道具 舉報

12#
ID:278709 發(fā)表于 2018-1-23 11:50 | 只看該作者
哦哦哦哦哦 發(fā)表于 2018-1-23 09:39
延時比較短,所以就變成閃爍啦。樓主可以試試把a的值再調(diào)整大一些,就可以看到一陣亮一陣滅的效果啦

可是我都沒有加while(1)的大循環(huán),他為什么會循環(huán)閃爍呢
回復(fù)

使用道具 舉報

13#
ID:278709 發(fā)表于 2018-1-23 11:52 | 只看該作者
leesin 發(fā)表于 2018-1-23 11:27
你的發(fā)光二極管的接法是共陰還是共陽的呢?

低電平亮,應(yīng)該是共陽
回復(fù)

使用道具 舉報

14#
ID:276587 發(fā)表于 2018-1-23 13:36 來自觸屏版 | 只看該作者
一直再循環(huán)里面如果你把后面去掉了,那就是延時了就滅了
回復(fù)

使用道具 舉報

15#
ID:278919 發(fā)表于 2018-1-23 14:20 | 只看該作者
不是循環(huán)執(zhí)行,while的等待時間太短,需要插入一些語句或延長計數(shù)值。
回復(fù)

使用道具 舉報

16#
ID:278932 發(fā)表于 2018-1-23 14:58 | 只看該作者
while是循環(huán)當(dāng)然是閃爍了。。
回復(fù)

使用道具 舉報

17#
ID:278932 發(fā)表于 2018-1-23 15:26 | 只看該作者
a--,亮了接著減1,然后暗減1,亮循環(huán)進行成閃爍了,要不改成定時才行
回復(fù)

使用道具 舉報

18#
ID:278954 發(fā)表于 2018-1-23 15:31 | 只看該作者
因延時比較短,視覺效果是閃爍的。
回復(fù)

使用道具 舉報

19#
ID:278954 發(fā)表于 2018-1-23 15:32 | 只看該作者

因延時比較短,視覺效果是閃爍的。
回復(fù)

使用道具 舉報

20#
ID:62355 發(fā)表于 2018-1-23 16:14 | 只看該作者
pinenut 發(fā)表于 2018-1-23 11:48
非常感謝。由于是剛學(xué),今天剛學(xué)到延時函數(shù),感謝耐心回答
不過,while(a--)明顯比for循環(huán)的嵌套簡單 ...

現(xiàn)在你用us級延時 ms 級延時 s級延時 你會發(fā)現(xiàn)嵌套比while(a--)好用。
回復(fù)

使用道具 舉報

21#
ID:278982 發(fā)表于 2018-1-23 16:17 | 只看該作者
不能依靠這么高速運行單片機,來做減數(shù)運算,得出來的時間,你的肉眼是無法分辨的
回復(fù)

使用道具 舉報

22#
ID:278982 發(fā)表于 2018-1-23 16:21 | 只看該作者
應(yīng)該寫延時子程序
回復(fù)

使用道具 舉報

23#
ID:278709 發(fā)表于 2018-1-24 19:29 | 只看該作者
pinenut 發(fā)表于 2018-1-23 11:45
很感謝回答,想再問一下為什么不加大循環(huán)while(1)也可以閃爍,如果沒有while(1)大循環(huán),這個程序為什 ...

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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