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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機萬年歷和42步進電機驅動問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:1051434 發表于 2023-4-3 21:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請各位大佬幫我看下這個程序怎么柔和,謝謝!
本人新學的單片機,想著一邊實踐一邊學習,我找了一個萬年歷的程序,可以正常使用了,又找了一個42步進電機的驅動也可以正常使用的。
現在我想把這兩個程序弄在一起,就是萬年歷顯示的同時讓步進電機也轉起來。
因為原來是兩個程序所以有兩個MIAN函數,我現在弄在一起之后像下面這樣:
#include "public.h"
#include "calendar.h"
#include "motor.h"

  void delay(unsigned int x) // 延時函數
{
    unsigned int i,j;
    for(i=x;i>0;i--)
    {
        for(j=110;j>0;j--);
    }
}


void main()
{        
                 calendar_test();
        
        while(1)
        {



        }

}         

int motor()

{
while(1)
    {
        Z = 1; // 階段1:開啟A相
        delay(50); // 延時
        Z = 0; // 階段2:關閉A相
        M = 1; // 階段3:開啟B相
        delay(50); // 延時
        M = 0; // 階段4:關閉B相
        N = 1; // 階段5:開啟C相
        delay(50); // 延時
        N = 0; // 階段6:關閉C相
        L = 1; // 階段7:開啟D相
        delay(50); // 延時
        L = 0; // 階段8:關閉D相
}
return 0;
          }
編譯是沒有錯的,但是它只顯示萬年歷,步進電機不轉,我把int motor改為intmain上面的viod main隨便改個字母實現唯一main函數時它又是只有步進電機轉而不顯示萬年歷了,請大神幫我看下問題出在哪里,怎么可以弄好,謝謝。


程序.7z

34.87 KB, 下載次數: 6

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

使用道具 舉報

沙發
ID:857072 發表于 2023-4-4 00:18 來自觸屏版 | 只看該作者
兩個while(1)   前面一個進去就出不來了后面都不會執行了
回復

使用道具 舉報

板凳
ID:1033342 發表于 2023-4-4 06:37 | 只看該作者
步進電機是將電脈沖控制信號轉變為角位移或線位移的一種常用的數字控制執行元件,又稱為脈沖電機。在驅動電源的作用下,步進電機受到脈沖的控制,其轉子的角位移量和速度嚴格地與輸入脈沖的數量和脈沖頻率成正比。步進電機每接收一個電脈沖,轉子就轉過一個相應的角度(步距角)。改變通電順序可改變步進電動機的旋轉方向;改變通電頻率可改變步進電動機的轉速。因此,通過控制輸入電脈沖的數目、頻率及電動機繞組的通電順序就可以獲得所需要的轉角、轉速及轉向,利用單片機就可以很容易實現步進電機的開環數字控制。
傳統的步進電機控制方法是由觸發器產生控制脈沖來進行控制的,但此種控制方法工作方式單一而且難于實現人機交互,當步進電機的參數發生變化時,需要重新進行控制器的設計。因此適合于單片機控制,單片機通過向步進電機驅動電路發送控制信號就能實現對步進電機的控制。
步進電機內部實際產生了一個可以旋轉的磁場,如圖所示,當旋轉磁場依次切換時,轉子(rotor)就會隨之轉動相應的角度。當磁場旋轉過快或者轉子上所帶負載的轉動慣量太大時,轉子無法跟上步伐,就會造成失步。
————————————————
回復

使用道具 舉報

地板
ID:584814 發表于 2023-4-4 08:24 | 只看該作者
while(1)這東東像黑洞,進去了沒可能出來。
所以將所有你想while(1)的放在一起,while(1)只留一個。
回復

使用道具 舉報

5#
ID:1051434 發表于 2023-4-4 20:49 | 只看該作者
a185980800 發表于 2023-4-4 00:18
兩個while(1)   前面一個進去就出不來了后面都不會執行了

謝謝,可是改了一個weil還是只能運行一個
回復

使用道具 舉報

6#
ID:1051434 發表于 2023-4-4 20:49 | 只看該作者
man1234567 發表于 2023-4-4 08:24
while(1)這東東像黑洞,進去了沒可能出來。
所以將所有你想while(1)的放在一起,while(1)只留一個。

謝謝,改了試過了,還是一樣
回復

使用道具 舉報

7#
ID:69038 發表于 2023-4-8 15:26 | 只看該作者
。。。。
單步執行一下,卡在這里了:

void calendar_test(void)
{
        u8 key_temp=0;

        lcd1602_init();
        ds1302_init();
        ds18b20_init();
        time0_init();//定時器10ms       
        while(1)   //<<<<<<<<<<<<<<<
        {
。。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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