久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

門自動控制系統單片機源程序 解釋每一步代表什么含義

[復制鏈接]
跳轉到指定樓層
樓主
ID:214729 發表于 2018-5-10 23:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
PWM發生子程序
由前面介紹可知,通過調節PWM脈沖的占空比就能夠調節電機的轉動速度,從而控制開關門的速度。由于AT89C2051單片機內部沒有PWM功能模塊,因此只能通過程序控制單片機的某個引腳輸出高低電平,從而模擬產生PWM脈沖。脈沖的高低電平時間由定時器T0控制。T0中斷服務程序如下:
void Timer0 ( )  interrupt 1
{
       cyclet = ~cyclet;
       TR0 = 0;
       if(cyclet)
       {
           TH0 = 0XFC;
           TL0 = 0XE0;
           if(smode == 0)
              PWMPIN = 0;
           else
              PWMPIN = 1;
        }
        else
        {
           TH0 = 0XFF;
           TL0 = 0X28;
           if (smode == 0)
             PWMPIN = 1;
           else
             PWMPIN = 0;
        }
     TR0 = 1;
}
設置好T0的各種方式并啟動T0運行,其后T0不斷溢出,產生中斷,在T0的中斷服務程序中,通過將P3.4引腳值取反并輸出,從而產生高低交替的電平信號。通過重新設置T0的計數初始值,從而產生不同時間的高低電平,由此可以調節 PWM脈沖的占空比。本設計中電機快轉時占空比為80%,慢轉時占空比為20%,因此T0的計數初始值0xFCE0、0xFFE8。
StartMotol子程序用于啟動電機,子程序根據電機轉速設置T0計數初始值并啟動T0運行。根據電機轉動方向,設置P1.3、P1.4引腳輸出相應電平。程序如下:
void StartMotol (uchar direct, uchar speed)
//direct 1:正轉 0:反轉 speed 1:快速 0:慢速
{
        smode = (speed == 0)?0:0xff
        TR0 = 0;
        TH0 = 0XFC;
        TL0 = 0XE0;
        TR0 = 1;
        if(direct)
        {
            motolconz = 0;
            motolconf = 1;
            }
         else
         {
            motolconz = 1;
            motolconf = 0;
            }
}
開關門子程序
開門子程序用于控制自動門開門的整個過程。當有人靠近自動門或有物體被夾住時,該程序首先控制電機快速開門;當到達減速位置時,程序控制電機慢速開門;當到達停止位置時,程序控制電機停轉,并定時5秒。在定時過程中,程序不斷判斷是否有人靠近自動門,若有則重新定時。程序代碼如下:
void OpenDoor ()
{
         uchar tcnt;
         if((gatesensor ==1)&&(comparator == 1))
             return;
         StartMotol (1,1);
         while (sensorB2 ==0);   //判斷是否減速
         StartMotol (1,0);
         while(sensorB1 ==0);   //判斷是否停止運動
         StopMotol ();
         tcnt = 0;
         while(tcnt<101)
         {
             TR1 = 0;
             TH1 = 0X3C;
             TL1 = 0XB0;
             TF1 = 0;
             TR1 = 1;
             while(TF1 == 0);
             TF1 = 0;
             if(gatesensor ==1)
                tcnt = 0;
             else
                tcnt = + +;
         }
         flagclose = 1;
}
關門子程序:


void CloseDoor()
{
        if(flagclose == 0)
           return;
        flagclose = 0;
        StartMotol(0,1);
        while(sensorB3 == 1)  //判斷是否減速
        {
            if(gatesensor == 1)
                return;
            if(comparator == 0)
                return;
            }
        StartMotol(0,0);
        while(sensorB4 == 0)   //判斷是否停止轉動
        {
            if(gatesensor == 1)
                return;
            if(comparator == 0)
                return;
             }
         StopMotol();
}
測試主程序
該程序主要調用相關子程序,實現了自動門的開關門及防夾等功能,代碼如下:
#include <REGX51.H>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit PWMPIN = P3^4;
sbit motolconz = P1^3;
sibt motolconf = P1^4;
uchar smode,cyclet;
sbit gatesensor = P3^2;
sbit sensorB1 = P3^1;
sbit sensorB2 = P1^5;
sbit sensorB3 = P1^6;
sbit sensorB4 = P3^0;
sbit comparator = P3^6;
bit flagcclose;
void InTimer01()
{
   TMOD = 0X11;
    ET0= 1;
    EA= 1;
    }

   void main()
    {
       InTimer01();
       while(1)
       {
            OpenDoor();
            CloseDoor();
            }
        }


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品一区二区在线观看 | 日本小电影网站 | 99精品一区二区 | 精品国产一区二区三区日日嗨 | 一区欧美 | 精品国产99 | 久久久精品综合 | 国内久久精品 | 精品久久久久一区二区国产 | 在线观看中文字幕dvd播放 | 男人的天堂中文字幕 | 三级视频国产 | 91tv在线观看 | 91欧美 | 国产一区二区 | 91资源在线 | 人人澡视频 | 亚洲国产精品99久久久久久久久 | 99免费在线视频 | 91在线看网站| 国产日韩一区二区三免费高清 | 久久久久成人精品 | 亚洲精品成人在线 | 久久久九九九九 | 欧美一区二区三区久久精品 | 2018中文字幕第一页 | 欧美日韩国产高清视频 | 日韩在线免费看 | 网站黄色在线 | 啪啪网页| 中文字幕99| 成人精品系列 | 国产综合久久 | 成人在线免费视频 | 午夜午夜精品一区二区三区文 | 99热热99| 99亚洲精品 | 国产一级特黄真人毛片 | 五月婷婷 六月丁香 | 日本中出视频 | 亚洲一区二区在线播放 |