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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2999|回復(fù): 2
收起左側(cè)

單片機+ULN2003+紅外模塊而成的pwm遙控變速風(fēng)扇的源代碼

[復(fù)制鏈接]
ID:779880 發(fā)表于 2020-6-21 17:33 | 顯示全部樓層 |閱讀模式
//本人剛自學(xué)11天的單片機,寫成一個程序,發(fā)出來旨在交流和學(xué)習(xí);
//按照自己的理解加以注釋,算是復(fù)習(xí)一遍;如有需要者,可以作為參考;

#include<reg52.h>

typedef unsigned int u16;          
typedef unsigned char u8;

sbit moto=P1^0;   //電機控制端口
sbit IRIN=P3^2;   //紅外接收端口

u8 IrValue[6];
u8 Time;
u8 flag=100;
u8 num=0;
u8 pwm=0;

void delay(u8 i)   //延時函數(shù)
{ while(i--);

}


void IrInit()    //外部中斷0的初始化
{
        IT0=1;
        EX0=1;
        EA=1;       

        IRIN=1;
}

void IrInit2()     //定時器0的初始化
{TMOD = 0x01;
TH0 = 0x0FF;
    TL0 = 0x9C;
EA = 1;
ET0 = 1;
TR0=1;}


void key()    //檢測紅外用戶碼來確定風(fēng)速檔位
{if(IrValue[2]==0x45)      //0x45 0x46 0x47 是我的紅外遙控的三個用戶碼,可自調(diào)
        {
          pwm=30;      //pwm調(diào)速,分為三檔
   }
       

if(IrValue[2]==0x46)
        {
          pwm=60;
   }
       
        if(IrValue[2]==0x47)
        {
          pwm=90;
   }




        }

void main()
{moto=0;   //電機關(guān)閉
IrInit2();
IrInit();
while(1)
{      key();
         if(num==flag) num=0;
         if(num<pwm) moto=1;
         else moto=0;

}

}

void T0_time() interrupt 1     //定時器0服務(wù)程序
{  TH0 = 0x0FF;
    TL0 = 0x9C;
    num++;

}

void ReadIr() interrupt 0    //外部中斷0服務(wù)程序
{
        u8 j,k;
        u16 err;
        Time=0;                                         
        delay(700);         
        if(IRIN==0)    //檢測是否接收到紅外信號       
        {         
               
                err=1000;                               
                while((IRIN==0)&&(err>0))        //等待起始碼的前9ms低電平過去                
                {                       
                        delay(1);
                        err--;
                }
                if(IRIN==1)        //開始收到高電平       
                {
                        err=500;    //等待起始碼的4.5ms高電平過去
                        while((IRIN==1)&&(err>0))               
                        {
                                delay(1);
                                err--;
                        }
                        for(k=0;k<4;k++)        //開始接收四組數(shù)據(jù)       
                        {                               
                                for(j=0;j<8;j++)        //每組數(shù)據(jù)有八位
                                {

                                        err=60;               
                                        while((IRIN==0)&&(err>0))    //等待每一位的前0.56ms低電平過去(位0和位1的區(qū)別在于高電平的時間)
                                        {
                                                delay(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))        //開始計時高電平時間
                                        {
                                                delay(10);       
                                                Time++;
                                                err--;
                                                if(Time>30)      //若time大于30,說明接受數(shù)據(jù)錯誤,強制返回
                                                {
                                                        return;
                                                }
                                        }
                                        IrValue[k]>>=1;        //數(shù)據(jù)移位
                                        if(Time>=8)               //大概以0.8ms為界區(qū)別位0和位1               
                                        {
                                                IrValue[k]|=0x80;  //1000 0000
                                        }
                                        Time=0;                //Time置0               
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])   //檢驗,若不相等則強制返回
                {
                        return;
                }
        }                       
}

回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2020-6-22 15:39 | 顯示全部樓層
能分享或者介紹一下原理圖嗎?
回復(fù)

使用道具 舉報

ID:779880 發(fā)表于 2020-6-22 21:35 | 顯示全部樓層
51hei團團 發(fā)表于 2020-6-22 15:39
能分享或者介紹一下原理圖嗎?

其實沒什么原理啊 ,就是紅外接收頭接P3.2,然后根據(jù)接收到的用戶碼確定pwm的值(30,60,90)來調(diào)速。調(diào)速是用的定時器0,紅外接收用的外部中斷0  uln2003嘛 就一個接vcc,一個接P1.0,按照周期(這個pwm波的周期要調(diào)好,不能太大也不能太小),就轉(zhuǎn)動了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 综合精品| 久草精品视频 | 久久久久久中文字幕 | 九九精品在线 | 日韩欧美三区 | 国产高清在线视频 | 日本免费在线观看视频 | 婷婷国产一区 | 九九精品在线 | 成人在线精品 | 久久精品一级 | 中文字幕视频在线观看 | 中文字幕在线视频精品 | 黄色网页在线观看 | 色黄网站 | 中文字幕一区在线观看视频 | 国产.com | 在线不卡视频 | 中文字幕一区二区三区四区 | 国产精品欧美一区二区三区不卡 | 国产精品一区视频 | 精品国产一区二区在线 | 成人午夜视频在线观看 | 最新中文字幕在线 | 欧美久久一区 | 久久久久黄色 | 亚洲综合视频一区 | 一片毛片| 精品一区电影 | 99视频在线看 | 久草在线在线精品观看 | 成人福利 | 天天干天天玩天天操 | 一区二区三区在线观看视频 | 久久精品国产久精国产 | 成人影院网站ww555久久精品 | 国产在线中文字幕 | 日韩精品成人 | 免费中文字幕 | 亚洲国产视频一区二区 | 国内精品久久久久久久 |