欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

不用延時實現LED燈閃爍的單片機程序問題

  [復制鏈接]
跳轉到指定樓層
樓主
ID:706567 發表于 2020-11-4 08:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
高手們 總說  不用延時函數 或少用延時函數,想了半天,能不能這樣搞,掉去while循環,放在主程 序里跟著一遍一遍跑,是不是就可以實現,加外還有沒有別的思路?void main()
                {
                        
                        while(1)
                                {
                                          vv++;        
                                          if(vv<20000)   
                                                        {
                                                                P0=0xff;   //供陽極LED,P0口高電壓全滅
                                                        }
                                        if(vv>20001)
                                                        {
                                                                P0=0x00;   //P0口低電壓全亮
                                                        
                                                                if(vv==40000)
                                                                        {
                                                                                vv=0;
                                                                        }
                                
                                }


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

使用道具 舉報

沙發
ID:654028 發表于 2020-11-4 09:07 | 只看該作者
去掉while(1)好像程序只跑一次吧。你可以開個看門狗,然后不喂狗,自動重啟。
回復

使用道具 舉報

板凳
ID:609192 發表于 2020-11-4 09:15 | 只看該作者
你貼出來的程序和延時函數無關啊
回復

使用道具 舉報

地板
ID:267932 發表于 2020-11-4 09:33 | 只看該作者
放定時器里呀
回復

使用道具 舉報

5#
ID:426861 發表于 2020-11-4 09:54 | 只看該作者
放定時器中
回復

使用道具 舉報

6#
ID:88256 發表于 2020-11-4 10:01 | 只看該作者
不用延時就用計數啊,程序跑一趟記一次數,判斷是否到達設定值
回復

使用道具 舉報

7#
ID:213173 發表于 2020-11-4 10:07 | 只看該作者
樓主的想法是正確的,已經實現了入門道路上的跨越。如下寫法邏輯更嚴密。
void main()
{
        unsigned int vv;
        while(1)
        {
                if(vv<20000)   
                        P0=0xff;    //供陽極LED,P0口高電壓全滅
                else P0=0x00;   //P0口低電壓全亮
                vv++;        
                if(vv>=40000)
                        vv=0;                       
        }
}
回復

使用道具 舉報

8#
ID:706567 發表于 2020-11-4 12:33 | 只看該作者

定時器  被別的任務占用了!!
回復

使用道具 舉報

9#
ID:706567 發表于 2020-11-4 12:34 | 只看該作者
wulin 發表于 2020-11-4 10:07
樓主的想法是正確的,已經實現了入門道路上的跨越。如下寫法邏輯更嚴密。
void main()
{

謝啦!
回復

使用道具 舉報

10#
ID:425577 發表于 2020-11-4 16:28 | 只看該作者
每個程序都要一個定時器用來跑系統的,把時間分成很多點,這個想要多長的時候都行
回復

使用道具 舉報

11#
ID:137736 發表于 2020-11-4 17:24 | 只看該作者
看高級一些的書,里面有,主循環加標志變量,利用變量延時。利用定時器延時。
回復

使用道具 舉報

12#
ID:706567 發表于 2020-11-4 19:42 | 只看該作者
zmc419 發表于 2020-11-4 17:24
看高級一些的書,里面有,主循環加標志變量,利用變量延時。利用定時器延時。

有啊,沒看過,自己瞎琢磨。
回復

使用道具 舉報

13#
ID:451718 發表于 2020-11-4 20:53 | 只看該作者
這個vv變量的累加和歸零,放到定時器中執行,這樣控制精度更高,可移植性更大。 不會隨主程序的單次循環周期變化而發生閃爍頻率的變化。  不過說回來, 如果只是一個端口的的變化,放到定時器中,不會對定時器中斷有太大的影響。  如果是液晶屏幕刷新控制,可以通過這樣方法,在定時器中刷新標志位。在主程序中判斷標志位來控制是否要運行的函數。
回復

使用道具 舉報

14#
ID:738987 發表于 2020-11-4 21:16 | 只看該作者
不懂你在干什么,延時函數本來就是通過變量循環自增自減來占用cpu實現的,不用延時就用定時器
回復

使用道具 舉報

15#
ID:706567 發表于 2020-11-5 15:26 | 只看該作者
robinsonlin 發表于 2020-11-4 20:53
這個vv變量的累加和歸零,放到定時器中執行,這樣控制精度更高,可移植性更大。 不會隨主程序的單次循環周 ...

學習了,
回復

使用道具 舉報

16#
ID:712493 發表于 2020-11-5 16:14 | 只看該作者
robinsonlin 發表于 2020-11-4 20:53
這個vv變量的累加和歸零,放到定時器中執行,這樣控制精度更高,可移植性更大。 不會隨主程序的單次循環周 ...

問下  在中斷設置標志  主程序運行  這樣精度能保證?
回復

使用道具 舉報

17#
ID:493010 發表于 2020-11-5 16:37 | 只看該作者
這個代碼寫的可讀性不強,延時單獨寫一個函數。另外不用循環就得用定時器。
回復

使用道具 舉報

18#
ID:451718 發表于 2020-11-6 15:52 | 只看該作者
fj51hei 發表于 2020-11-5 16:14
問下  在中斷設置標志  主程序運行  這樣精度能保證?

呵呵。 這個要自己理解咯。  單次誤差和累積誤差的區別。
回復

使用道具 舉報

19#
ID:851329 發表于 2020-12-17 21:26 | 只看該作者
如果不用延時函數的話那就只能用定時器控制
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表