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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1005|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

為啥我的步進(jìn)電機(jī)不還原?附單片機(jī)程序原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1026086 發(fā)表于 2022-5-16 00:37 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


單片機(jī)源程序如下:
#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char                // 以后unsigned char就可以用uchar代替
#define uint  unsigned int                // 以后unsigned int 就可以用uint 代替


sbit ADC_CS     = P1^6;                         // ADC0832的CS引腳
sbit ADC_CLK    = P1^7;                         // ADC0832的CLK引腳
sbit ADC_DAT    = P3^2;                         // ADC0832的DI/DO引腳
sbit KeyMode_P  = P3^3;                                // 模式切換
sbit KeyDown_P  = P3^6;                                // 減按鍵
sbit KeyUp_P    = P3^7;                                // 加按鍵
sbit Led_P      = P2^0;                                // 指示燈
uchar gLight      = 40;                                // 窗簾開關(guān)的閾值
uchar gMode=1;                                                                // 1是手動模式,2是亮度自動模式
uchar code Clock[]={0x80,0x40,0x20,0x10};                         // 步進(jìn)電機(jī)順時針旋轉(zhuǎn)數(shù)組
uchar code AntiClock[]={0x10,0x20,0x40,0x80};                // 步進(jìn)電機(jī)逆時針旋轉(zhuǎn)數(shù)組
/*********************************************************/
// 毫秒級的延時函數(shù),time是要延時的毫秒數(shù)
/*********************************************************/
void DelayMs(uint time)
{
        uint i,j;
        for(i=0;i<time;i++)
                for(j=0;j<112;j++);
}

void KeyScanf3()
{
        if(KeyMode_P==0)
        {
                gMode++;                                                        // 切換到下一模式
                if(gMode==3)                                        // 如果到盡頭了
                        gMode=1;                                                // 回到第一種模式
                DelayMs(10);                                        // 去除按鍵按下的抖動
                while(!KeyMode_P);                // 等待按鍵是否
                DelayMs(10);                                        // 去除按鍵松開的抖動
        }
}
/*********************************************************/
// ADC0832的時鐘脈沖
/*********************************************************/
void WavePlus()
{
        _nop_();
        ADC_CLK = 1;
        _nop_();
        ADC_CLK = 0;
}


/*********************************************************/
// 獲取指定通道的A/D轉(zhuǎn)換結(jié)果
/*********************************************************/
uchar Get_ADC0832()
{
        uchar i;
        uchar dat1=0;
        uchar dat2=0;
        
        ADC_CLK = 0;                                // 電平初始化
        ADC_DAT = 1;
        _nop_();
        ADC_CS = 0;
        WavePlus();                                        // 起始信號
        ADC_DAT = 1;
        WavePlus();                                        // 通道選擇的第一位
        ADC_DAT = 0;      
        WavePlus();                                        // 通道選擇的第二位
        ADC_DAT = 1;
        
        for(i=0;i<8;i++)                // 第一次讀取
        {
                dat1<<=1;
                WavePlus();
                if(ADC_DAT)
                        dat1=dat1|0x01;
                else
                        dat1=dat1|0x00;
        }
        
        for(i=0;i<8;i++)                // 第二次讀取
        {
                dat2>>= 1;
                if(ADC_DAT)
                        dat2=dat2|0x80;
                else
                        dat2=dat2|0x00;
                WavePlus();
        }
        
        _nop_();                                                // 結(jié)束此次傳輸
        ADC_DAT = 1;
        ADC_CLK = 1;
        ADC_CS  = 1;   

        if(dat1==dat2)                        // 返回采集結(jié)果
                return dat1;
        else
                return 0;
}

/*********************************************************/
// 開窗
/*********************************************************/
void Open()
{
        uint i,j;
        for(j=0;j<255;j++)                // 控制步進(jìn)電機(jī)正轉(zhuǎn)
        {
                for(i=0;i<4;i++)
                {
                        P2=Clock[ i];
                        DelayMs(3);
                }
        }
        Led_P=0;
}
/*********************************************************/
// 關(guān)窗
/*********************************************************/
void Close()
{
        uint i,j;
        for(j=0;j<255;j++)                // 控制步進(jìn)電機(jī)反轉(zhuǎn)
        {
                for(i=0;i<4;i++)
                {
                        P2=AntiClock[ i];
                        DelayMs(3);
                }
        }
        Led_P=1;
}
/*********************************************************/
// 主函數(shù)
/*********************************************************/
void main()
{
        uchar light;
while(1)
        {
                light=Get_ADC0832();
                light=light/2.5;                                        // 縮小光照檢測結(jié)果(在0-99)
                if(light>99)                                                        // 如果大于99
                        light=99;                                                                // 則依然保持99
                KeyScanf3();                                                        // 按鍵掃描(模式切換)
                /*手動控制模式*/
                if(gMode==1)
                {
                        if(KeyDown_P==0)                // 如果關(guān)窗簾鍵按下了        
                        {
                                if(Led_P==0)                        // 如果窗簾當(dāng)前是打開的
                                {
                                        Close();                                // 則關(guān)閉窗簾
                                }
                        }
                        if(KeyUp_P==0)                        // 如果開窗簾鍵按下了
                        {
                                if(Led_P==1)                        // 如果窗簾當(dāng)前是關(guān)閉的
                                {
                                        Open();                                        // 則打開窗簾
                                }
                        }        
                }
               
        
                /*光線控制模式*/
                if(gMode==2)
                {
                        if(light<gLight)                // 當(dāng)前光線小于設(shè)置的閾值
                        {
                                if(Led_P==0)                        // 如果窗簾當(dāng)前是打開的
                                {
                                        Close();                                // 則關(guān)閉窗簾
                                }
                        }
                        else                                                                // 當(dāng)前光線大于或等于設(shè)置的閾值
                        {
                                if(Led_P==1)                        // 如果窗簾當(dāng)前是關(guān)閉的
                                {
                                        Open();                                        // 則打開窗簾
                                }
                        }        
                }
               
                DelayMs(100);                                                        // 延時0.1秒
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2022-5-16 09:30 | 只看該作者
啥叫還原?
回復(fù)

使用道具 舉報

板凳
ID:123289 發(fā)表于 2022-5-16 10:35 | 只看該作者
這里的“還原”是指什么?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品亚洲 | 色播99| 99久久久国产精品 | 黄色91在线 | 性一爱一乱一交一视频 | www.99热 | 亚洲一区二区精品视频 | 中文字幕在线观看一区二区 | 久久精品色欧美aⅴ一区二区 | 亚洲国产一区二区三区, | 日韩欧美一区二区三区免费看 | 久久一区| 日日噜噜噜夜夜爽爽狠狠视频, | av中文字幕在线播放 | 国产乱码高清区二区三区在线 | 国产精品一区二 | 婷婷五月色综合 | 亚洲三区在线 | 国产成人精品一区二区三区在线 | 久久久久成人精品亚洲国产 | 91成人免费看片 | 神马久久春色视频 | 国产亚洲精品久久久久久牛牛 | 亚洲视频中文字幕 | 成人av一区二区在线观看 | 看真人视频一级毛片 | 亚洲在线中文字幕 | 伦理一区二区 | 天天天操 | 久久精品色欧美aⅴ一区二区 | 久久福利电影 | 欧美大片一区二区 | 日日操夜夜操天天操 | 日本黄色影片在线观看 | 国产无套一区二区三区久久 | 国产在线a视频 | 欧美日韩a| 免费在线一区二区三区 | 人人干视频在线 | 激情91| 久久大全 |