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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

以單片機為核心的PWM占空比輸出的直流調速系統的風扇

[復制鏈接]
跳轉到指定樓層
樓主
源程序代碼:
直流電機控制+速度顯示
#include<reg52.h>                                 //頭文件
#define uchar unsigned char                 //宏定義
#define uint unsigned int
#define CYCLE 10                                 //定義PWM的周期T為10ms
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff,0xc6,0x88};//0-9 R 共陽數碼管段選數據
端口定義
sbit PWM1=P1^4;                                        //PWM輸出口1(電機正轉)
sbit PWM2=P1^3;                                        //PWM輸出口2(電機反轉)
sbit K1=P1^0;                                        //加速
sbit K2=P1^1;                                        //減速
sbit K3=P1^2;                                        //正反轉
//sbit W1=P2^3;                                        //數碼管位選
/***************************************************/
uchar PWM_ON=0;                                        //PWM高電平時間
uchar count=0;                                          //中斷計時
uchar num=0;
uchar num1=0;                           //中斷時間計數
uint num2=0;                                   //外部中斷次數
uchar flat=0;                                        //正反轉標示位
uchar flag=0;                           //刷新數據標示位
sbit W0=P2^6;                         //位選口定義
sbit W1=P2^5;
sbit W2=P2^4;
sbit W3=P2^7;
函數名稱:延時子函數
函數功能:按鍵消抖
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
函數名稱:按鍵子函數
函數功能:
void key()
{
        if(K1==0)                                        //加速鍵
        {
                delayms(5);
                if(K1==0)
                {
                        while(!K1);
                        if(num<3)
                        num++;
                }
        }
        if(K2==0)                                        //減速鍵
        {
                delayms(5);
                if(K2==0)
                {
                        while(!K2);
                        if(num>0)
                        num--;
                }
        }
        if(K3==0)                                   //電機正反轉按鍵
        {
                delayms(5);
                if(K3==0)
                {
                        while(!K3);
                        flat++;
                        if(flat==2)
                        flat=0;
                }
        }
        switch(num)
        {
                case 0: PWM_ON=0;  break;        //占空比為00%
                case 1: PWM_ON=7;  break;        //占空比為10%
                case 2: PWM_ON=8;  break;        //占空比為40%
        //        case 4: PWM_ON=7;  break;        //占空比為70%
                case 3: PWM_ON=10;  break;        //占空比為100%
                default:
                break;
        }
}
速度數據采集
void sudu()
{
        uint shuju;
        if(flag==1)
        {
                flag=0;
                shuju=num2*2;                         //電機一秒轉的圈數               
                num2=0;
        }
        P2=0xbf;
        if(flat==0)
        P0=table[11];                //"C"
        else
        P0=table[12];                //"A"
        delayms(5);
        P2=0xdf;
        P0=table[shuju/100];
        delayms(5);
        P2=0xef;
        P0=table[shuju%100/10];
        delayms(5);
        P2=0x7f;
        P0=table[shuju%10];
        delayms(5);
        P2=0xff;
}
void  init()
{
        PWM1=1;                                 //初始化
        PWM2=1;
        TMOD=0x11;                          //打開定時器
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        TR0=1;
        EX1=1;
        IT1=1;
        TH1=(65536-1000)/256;
        TL1=(65536-1000)%256;
        EA=1;
        ET1=1;
        TR1=1;
        W0=1;
        W1=1;
        W2=1;
        W3=1;
}
函數名稱:主函數
函數功能:
void main()
{
    init();
        while(1)
        {
                key();
                sudu();
        }
}
函數名稱:定時器/計數器0中斷子函數
函數功能:
void T1_time() interrupt 3
{
        TH1=(65536-1000)/256;
        TL1=(65536-1000)%256;
        count++;
        if(count>CYCLE)
                count=0;
        if(count<PWM_ON)                 //如果計時時間在不大于高電平時時間,電機轉
        {
                if(flat==0)
                {
                        PWM1=0;
                        PWM2=1;
                }
                if(flat==1)
                {
                        PWM1=1;
                        PWM2=0;
                }
        }
        else                                         //如果計時時間大于高電平時時間,電機停
        {
                PWM1=1;
                PWM2=1;
        }
}
void T0_time() interrupt 1                 //定時器0
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num1++;
        if(num1==10)                                  //每0.5s刷新一次數據
        {
                num1=0;       
                flag=1;       
        }       
}
void timer() interrupt 2           //外部中斷1
{
         num2++;
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:161431 發表于 2017-1-12 11:01 | 只看該作者
學習學習
回復

使用道具 舉報

板凳
ID:89286 發表于 2017-1-12 19:15 | 只看該作者
thanks for sharing knowledge
回復

使用道具 舉報

地板
ID:89286 發表于 2017-1-12 19:16 | 只看該作者
thanks for sharing knowledge
回復

使用道具 舉報

5#
ID:62446 發表于 2017-1-12 20:22 | 只看該作者
學習一下,謝謝了
回復

使用道具 舉報

6#
ID:217011 發表于 2017-7-24 10:55 | 只看該作者
pwm輸出輸入口在哪里呢?我用的是l289n的電機驅動!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 观看毛片 | av色噜噜 | 天天干夜夜操 | 三级在线免费观看 | 亚洲精品福利在线 | 超碰日本| 九九爱这里只有精品 | 欧美精品乱码久久久久久按摩 | 日韩aⅴ在线观看 | 精品国产一区二区三区久久狼黑人 | 在线国产一区二区三区 | 亚洲免费网 | 成人小视频在线观看 | 国产一级视频在线观看 | 国产在线中文字幕 | 在线观看国产h | 欧美精品久久久 | 国产电影一区二区 | 亚洲经典一区 | 精品一区二区三区四区视频 | 国产精品久久久久久久久久久久久久 | 欧美午夜一区 | 国产一二三区精品视频 | 中文字幕在线一区二区三区 | 国产精品夜间视频香蕉 | 亚洲免费在线播放 | 国产一区二区三区 | 九九九久久国产免费 | 国产精品综合视频 | 一级黄色片毛片 | 欧美男人天堂 | 91污在线| 国产黄色麻豆视频 | 亚洲欧美中文日韩在线v日本 | 国产精品自拍一区 | 国产综合精品 | 美女福利视频网站 | 日本欧美在线观看视频 | 日韩在线播放一区 | 亚洲欧美一区二区三区在线 | 亚洲经典一区 |