91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 18KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-08
  • 語言: 其他
  • 標簽: 單片機??

資源簡介

51單片機紅外遙控風扇

資源截圖

代碼片段和文件信息

/*
紅外無線遙控風扇?+??加速??按-?減速
*/
#include?

sbit?DU??=?P2^6;???//數碼管段選
sbit?WE??=?P2^7;???//數碼管位選
sbit?S2?=?P3^0;
sbit?S3?=?P3^1;

?/*====================================
?自定義類型名
====================================*/
typedef?unsigned?char?INT8U;
typedef?unsigned?char?uchar;

typedef?unsigned?int?INT16U;
typedef?unsigned?int?uint;
/*====================================
?硬件接口位聲明
====================================*/
sbit?IR??=?P3^2;?????//定義紅外脈沖數據接口 外部中斷O輸入口

uchar?IRtime;? //檢測紅外高電平持續時間(脈寬)
uchar?IRcord[4];????//此數組用于儲存分離出來的4個字節的數據(用戶碼2個字節+鍵值碼2個字節)
uchar?IRdata[33];???//此數組用于儲存紅外的33位數據(第一位為引導碼用戶碼16+鍵值碼16)
bit?IRpro_ok?IRok;??//第一個用于紅外接收4個字節完畢。IRok用為檢測脈寬完畢

unsigned?char?const?discode[]?={?0x3F?0x06?0x5B?0x4F?0x66?0x6D?0x7D?0x07?0x7F0x6F0x400x00/*-*/};

unsigned?char?pwm_left_val?=?225;//左電機占空比值?取值范圍0-170,0最快
unsigned?char?pwm_t;//周期



void?time0()?interrupt?1???//定義定時器0
{
IRtime++;? ???//檢測脈寬,1次為278us
}
//定時器1中斷
void?timer1()?interrupt?3
{
pwm_t++;
if(pwm_t?==?250)
pwm_t?=?P1?=?0;
if(pwm_left_val?==?pwm_t)
P1?=?0xff; ?
}
void?int0()?interrupt?0 ?? //定義外部中斷0
{
static?uchar?i; ? // 聲明靜態變量(在跳出函數后在回來執行的時候不會丟失數值)i用于把33次高電平的持續時間存入IRdata
static?bit?startflag; //開始儲存脈寬標志位
if(startflag) ? //開始接收脈寬檢測
{
if(?(IRtime?=?32)?)?/*判斷是否是引導碼,底電平9000us+高4500us
這個自己可以算我以11.0592來算了NEC協議的引導碼低8000-10000+高4000-5000?
如果已經接收了引導碼那么i不會被置0就會開始依次存入脈寬*/
i?=?0; ?//如果是引導碼那么執行i=0把他存到IRdata的第一個位
IRdata[i]?=?IRtime;?? ?//以T0的溢出次數來計算脈寬,把這個時間存到數組里面到后面判斷
IRtime?=?0; ?//計數清零,下一個下降沿的時候在存入脈寬
i++;? ?//計數脈寬存入的次數
if(i?==?33)? ?//如果存入34次?數組的下標是從0開始i等于33表示執行了34次
{
? IRok?=?1; ?//那么表示脈寬檢測完畢
i?=?0;? ?//把脈寬計數清零準備下次存入
}
}
else ??
{
IRtime?=?0;? ?//引導碼開始進入把脈寬計數清零開始計數
startflag?=?1; ?//開始處理標志位置1
}
}

void?IRcordpro()??? ?//提取它的33次脈寬進行數據解碼
{
uchar?i?j?k?cord?value; /*i用于處理4個字節,j用于處理一個字節中每一位,k用于33次脈寬中的哪一位
cord用于取出脈寬的時間判斷是否符合1的脈寬時間*/
k?=?1;? //從第一位脈寬開始取,丟棄引導碼脈寬
for(i?=?0;?i? {
for(j?=?0;?j? {
cord?=?IRdata[k]; ????//把脈寬存入cord
if(cord?>?5) ? //如果脈寬大于我11.0592的t0溢出率為約278us*5=1390那么判斷為1
value?=?value?|?0x80; /*接收的時候是先接收最低位,
把最低位先放到value的最高位在和0x08按位或一下
這樣不會改變valua的其他位的數值只會讓他最高位為1*/
if(j? {
value?=?value?>>?1; //value位左移依次接收8位數據。
}
k++; //每執行一次脈寬位加1
}
IRcord[i]?=?value; ???//每處理完一個字節把它放入IRcord數組中。
value?=?0;? ???//清零value方便下次在存入數據
}
IRpro_ok?=?1; ???//接收完4個字節后IRpro?ok置1表示紅外解碼完成
}

void?main()
{
unsigned?char?i?=?9;
TMOD?|=?0x20;//T1?8位自動重裝模塊
TH1?=?245;
TL1?=?245;//11.0592M晶振下占空比最大比值是256輸出100HZ
TR1?=?1;//啟動定時器0
ET1?=?1;//允許定時器0中斷
EA =?1;//總中斷允許

TMOD?|=?0x02;?//定時器0工作方式2,8位自動重裝
TH0?=?0x00;??//高8位裝入0那么定時器溢出一次的時間是256個機器周期
TL0?=?0x00;
ET0?=?1; ???//定時器0中斷
TR0?=?1;?????//啟動定時器0

IT0?=?1; ???//設置外部中斷0為跳沿觸發方式,來一個下降沿觸發一次
EX0?=?1; ???//啟動外部中斷0
//delay(2000);
WE?=?1;
P0?=

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-03-17?22:33??51單片機紅外遙控風扇\
?????文件????????4444??2017-04-24?13:51??51單片機紅外遙控風扇\main.c
?????文件????????9791??2017-04-24?13:51??51單片機紅外遙控風扇\main.LST
?????文件????????6479??2017-04-24?13:51??51單片機紅外遙控風扇\main.OBJ
?????文件????????5757??2017-04-24?13:51??51單片機紅外遙控風扇\QXMCU
?????文件????????1333??2017-04-24?13:51??51單片機紅外遙控風扇\QXMCU.hex
?????文件??????????41??2017-04-24?13:51??51單片機紅外遙控風扇\QXMCU.lnp
?????文件????????8972??2017-04-24?13:51??51單片機紅外遙控風扇\QXMCU.M51
?????文件?????????975??2017-04-24?13:53??51單片機紅外遙控風扇\QXMCU.Opt
?????文件?????????206??2017-04-24?14:02??51單片機紅外遙控風扇\QXMCU.plg
?????文件????????2141??2017-04-24?13:53??51單片機紅外遙控風扇\QXMCU.Uv2
?????文件???????????0??2017-04-24?13:50??51單片機紅外遙控風扇\QXMCU_Uv2.Bak
?????文件???????10240??2017-04-24?13:57??51單片機紅外遙控風扇\說明.doc

評論

共有 條評論