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

標題: 求助用80c51單片機做個控制電路的小程序的思路 [打印本頁]

作者: 正在找    時間: 2020-3-1 20:19
標題: 求助用80c51單片機做個控制電路的小程序的思路
求助大神幫我寫個小程序,大概電路圖如圖,80c51單片機各個接口如圖;
說明:整個電路主要由一個3.7v直流電源供電,一個開關,一個小電機。      
需求:
1.開關s1閉合,延時10秒后,3.7v直流小電機M通電轉動
2.電機轉動60秒后,斷電
3.希望有電路圖,和說明一下電路每條線路接單片機哪個接口
4.程序,每條程序有注釋,有什么作用。
新手,想研究一下,謝謝大佬!


批注 2020-03-01 195530.jpg (49.54 KB, 下載次數: 13)

大概電路圖

大概電路圖

批注 2020-03-01 195530.jpg (113.94 KB, 下載次數: 15)

80c51單片機

80c51單片機

作者: man_of_freedom    時間: 2020-3-1 21:38
我有點還不大清楚的地方,1開關是常開的點動開關嗎?就是要用的時候按一下馬上就斷開 2這個程序是執行一次就啥活也不干了還是要可以重復執行?3對接在哪個引腳上有要求嗎?可以使用P3.3或者P3.2上嗎?望解惑
作者: 13976778401    時間: 2020-3-2 00:02
這程序很簡單,如果用定時器就更好去控制時間的精準度,新手要慢慢了解,一下子給你寫復雜的你也一時理解不了,這程序寫了兩種按鍵方式,一種是點動按鍵開關方式,另一種是自鎖開關,需要閉合復位后才能再次運行 按鍵延時.zip (28.48 KB, 下載次數: 7)
作者: 靳赟少    時間: 2020-3-2 08:55
每條程序注釋
其實很簡單,便于寫完以后檢測,如果有錯誤,很快就知道哪里錯了。如果自己不知道,也便于別人檢查
作者: m182892    時間: 2020-3-2 09:15
13976778401 發表于 2020-3-2 00:02
這程序很簡單,如果用定時器就更好去控制時間的精準度,新手要慢慢了解,一下子給你寫復雜的你也一時理解不 ...

這個按鍵程序有一個缺點就是按鍵會不靈敏,失效,我以前用這個方法試過,延時太長,在延時過程中再按按鍵,按鍵時會沒反應。
作者: 13976778401    時間: 2020-3-2 14:14
是呀,要是用中斷就可以去執行其他的任務
作者: 黎明初至    時間: 2020-3-2 17:43
里面有些細節東西,80C51直接3.7V供電是否可行?80C51的最小系統+按鍵方法+直流電機驅動網上很多,分開找,最后程序只是檢測按鍵,延遲,控制的過程。
作者: lovexulu    時間: 2020-3-2 22:17
#include<reg51.h>
#define YC 10       //閉合延遲時間
#define QDTIME 60   //工作時間
#define u8 unsigned char
#define u16 unsigned int
sbit K1a=P1^0;      //開關引腳a
sbit K1b=P1^1;      //開關引腳b
sbit OUT=P2^0;      //輸出引腳
u8 Tm=0;            //狀態檢測,0位初始狀態,1為延遲狀態,2為輸出狀態,3為待復位狀態
u16 i=0,j=0;        //計時變量
void Tim_init()     //定時器0初始化函數
{
            TMOD = 0x01;  //定時器0設置16位計時器
                TH0 = 0x0FC;  //高值1ms
                TL0 = 0x18;   //低值1ms
                EA = 1;       //開總中斷
                ET0 = 1;      //開定時器中斷       
}

void Tim() interrupt 1//計時器中斷
{
                TH0 = 0x0FC;  //重裝初始值
                TL0 = 0x18;
                i++;          //ms計時累加
}
       
void S1()
{
        if(K1b==0&&Tm==0)//啟動狀態判斷,必須是復位狀態,且開關閉合。
        {
                TR0=1;                //定時器開始工作
        Tm=1;       //進入狀態1開始延遲
        }
        if(K1b==1&&Tm==3)//復位狀態判斷,條件必須打開開關,且一次任務完成。
        {
                Tm=0;      //復位狀態值
        }
}

void main()
{
        K1a=0;        //開關一端低電平
        OUT=0;  //輸出低電平,電機停止
        Tim_init();     //定時器初始化
        while(1)       //主循環
        {
                S1();      //按鍵檢測
                if(i==1000)//1S計時
                {
                        j++;   //秒計時累加
                        i=0;
                }
                if(j>YC&&Tm==1)  //如果檢測到j大于10則進入輸出狀態
                {
                        OUT=1;      //進入輸出狀態
                        Tm=2;       //設置輸出狀態為2,即輸出狀態
                        j=0;        //秒計時清零
                }
                if(j>QDTIME&&Tm==2)//如果檢測到j大于60則且在輸出狀態,則停止輸出進入待復位狀態
                {
                        OUT=0;      //停止輸出
                        Tm=3;       //進入待復位狀態
                        j=0;        //秒計時清零
                        i=0;       //ms計時清零
                        TR0=0;      //關閉計時器
                }
        }               
}

程序如上,仿真圖如下。
       

作者: lovexulu    時間: 2020-3-2 22:28
附上打包代碼及仿真

電機控制.rar

89.56 KB, 下載次數: 8


作者: 正在找    時間: 2020-3-2 22:59
man_of_freedom 發表于 2020-3-1 21:38
我有點還不大清楚的地方,1開關是常開的點動開關嗎?就是要用的時候按一下馬上就斷開 2這個程序是執行一次 ...

普通開關,按著開,松開斷,作用類似于長按啟動;執行一次,無需執行二次;引腳沒要求,,謝謝
作者: 正在找    時間: 2020-3-2 23:00
51hei**1140 發表于 2020-3-1 22:24
這是師傅在考核學生,請認真對待

不是師傅,,我學徒,小白,,,
作者: 正在找    時間: 2020-3-2 23:02
13976778401 發表于 2020-3-2 00:02
這程序很簡單,如果用定時器就更好去控制時間的精準度,新手要慢慢了解,一下子給你寫復雜的你也一時理解不 ...

謝謝大佬
作者: 正在找    時間: 2020-3-3 09:49
lovexulu 發表于 2020-3-2 22:17
#include
#define YC 10       //閉合延遲時間
#define QDTIME 60   //工作時間

謝謝大佬
作者: 正在找    時間: 2020-3-3 09:53
lovexulu 發表于 2020-3-2 22:28
附上打包代碼及仿真

謝謝大佬





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