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

               找回密碼
               立即注冊

              QQ登錄

              只需一步,快速開始

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

              ht66f70a單片機led燈的閃爍,求大神指教

              [復制鏈接]
              回帖獎勵 20 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次(中獎概率 50%)
              跳轉到指定樓層
              樓主
              ID:499479 發表于 2019-9-20 18:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
              代碼如下:
              #include "HT66F70A.H"
              void Delay_ms(unsigned int dly)//延時dly ms的子程序
              {
              unsigned int i;
              for(i=0;i<dly;i++)
              for(i=0;i<dly;i++);

              }
              void main()
              {
              _pa=0;
              _pac=0;//pa設置為輸出
              _pa0=0;
              while(1)
              {Delay_ms(500);
              Delay_ms(500);//延時500ms,即0.5s
              _pa0=~_pa0;
              }
              }

              功能是實現led燈的閃爍。
              但是我無論怎么該延遲函數這個燈都閃的很快(亮的時間很長,暗的時間幾乎看不到),之前也用這個芯片做步進電機的實驗,步進電機也是只震動不轉,而且震動的頻率也是固定的。求解。。。。
              分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
              收藏收藏 分享淘帖 頂 踩
              回復

              使用道具 舉報

              沙發
              ID:401564 發表于 2019-9-20 20:44 | 只看該作者
              _pa0=~_pa0;
              這語句放到兩個延時的中間
              而不是放到最后
              回復

              使用道具 舉報

              板凳
              ID:275826 發表于 2019-9-20 21:15 | 只看該作者
              延時函數錯誤,改成
              void Delay_ms(unsigned int dly)//延時dly ms的子程序
              {
              unsigned int i,j;
              for(i=0;i<dly;i++)
              for(j=0;j<dly;j++);

              }
              回復

              使用道具 舉報

              地板
              ID:499479 發表于 2019-9-20 21:57 | 只看該作者
              Y_G_G 發表于 2019-9-20 20:44
              _pa0=~_pa0;
              這語句放到兩個延時的中間
              而不是放到最后

              一樣的結果,我有個while死循環,根本不是你說的那樣
              回復

              使用道具 舉報

              5#
              ID:67199 發表于 2019-9-20 22:18 | 只看該作者
              樓上正解。
              回復

              使用道具 舉報

              6#
              ID:395176 發表于 2019-9-21 08:38 | 只看該作者
              合泰單片機,我記得要把看門狗關閉的啊
              回復

              使用道具 舉報

              7#
              ID:123289 發表于 2019-9-21 08:39 | 只看該作者
              兩個:
              for(i=0;i<dly;i++)
              for(i=0;i<dly;i++);
              將其中的一個改成 j 試試         
              回復

              使用道具 舉報

              8#
              ID:213173 發表于 2019-9-21 08:40 | 只看該作者
              樓主的延時函數是錯誤的,Delay_ms(500);只能得到約6ms延時,肉眼哪能看得出來?
              正確寫法:
              void Delay_ms(unsigned int dly)//延時dly ms的子程序
              {
                      unsigned int i,j;
                      for(i=0;i<dly;i++)
                              for(j=0;j<125;j++);
              }
              回復

              使用道具 舉報

              9#
              ID:452974 發表于 2019-9-21 13:26 | 只看該作者
              感覺是不是電路連接上面的問題,延時函數變量命名習慣個人感覺很差,但第二個 for 循環,會首先將 i 重置0,語法角度是沒錯的。不過建議該有的大括號,還有重命名弄好一點。

              建議題主把電路圖也順便貼出來,一個軟硬結合的東西,只拿代碼說有可能布線的鍋,幫不得的。

              按照題主的說法是暗的時間幾乎沒有,那就是有暗的時間了,那調試的時候不先試試先將開關量置1?如果結果相反的話,這個代碼加幾行相反代碼就好了。
              回復

              使用道具 舉報

              10#
              無效樓層,該帖已經被刪除
              11#
              ID:614442 發表于 2019-9-21 16:07 | 只看該作者
              void Delay_ms(unsigned int dly)//延時dly ms的子程序 { unsigned int i,j; for(i=0;i<dly;i++) for(j=0;j<dly;j++);  }
              回復

              使用道具 舉報

              12#
              ID:401564 發表于 2019-9-21 16:49 | 只看該作者
              在燒錄界面看一下,好像是有關閉看門狗和低電壓復位的
              合泰的指令和8051是不一樣的,你把語句改了之后,延時加長幾看一下

              順便說一下,雖然現在C是主流,但合泰這種低端單片機,最好還是用匯編,幾乎所以的臺系的單片機數據手冊都會推薦用匯編的
              回復

              使用道具 舉報

              13#
              ID:499479 發表于 2019-9-21 21:34 | 只看該作者
              問題已經解決了,今天重新吧延遲函數換了下,但同樣的代碼我燒錄幾遍,有時候正常有時候有問題,估計是硬件的問題
              #include <HT66F70A.H>
              void delay(unsigned int);//延時dly ms的子程序
              void main()
              {
              _pa=0;
              _pac=0;//pa設置為輸出
              _pa0=0;
              while(1)
              {delay(5000);
                _pa0=~_pa0;
              delay(5000);
              delay(5000);
              delay(5000);//延時500ms,即0.5s

              }
              }
              void delay(unsigned int count)
              {
                  volatile unsigned int i;
                  for(i=0;i<count;i++)
                      asm("nop");
              }
              注:跟這個volatile和 asm("nop")無關
              回復

              使用道具 舉報

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

              本版積分規則

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

              Powered by 單片機教程網

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