當前位置:首頁 » 編程語言 » c語言編寫遙控電風扇的代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言編寫遙控電風扇的代碼

發布時間: 2022-03-02 23:43:10

⑴ 基於51單片機紅外遙控代碼(c語言

以下文件是51單片機實現遙控解碼,通過數碼管顯示鍵碼的程序,P0口驅動數碼管段選,p2.6和p2.7為數碼管位選,接收頭連到P3.2口。此程序以通過驗證,可以直接編譯使用,另外還有一個繼電器和蜂鳴器的控制,不用可以屏蔽掉。

;********************************************************************************
;* 描述: *
;* 遙控鍵值讀取器 *
;* 數碼管顯示, P0口為數碼管的數據口 *
;* *
;********************************************************************************
;遙控鍵值解碼-數碼管顯示 *
;********************************************************************************/

#include <reg51.h>
#include <intrins.h>

void IR_SHOW();
void delay(unsigned char x);//x*0.14MS
void delay1(unsigned char ms);
void beep();

sbit IRIN = P3^2;
sbit BEEP = P3^7;
sbit RELAY= P1^3;
sbit GEWEI= P2^7;
sbit SHIWEI= P2^6;

unsigned char IRCOM[8];
unsigned char code table[16] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
main()
{
IE = 0x81; //允許總中斷中斷,使能 INT0 外部中斷
TCON = 0x1; //觸發方式為脈沖負邊沿觸發
delay(1);

IRIN=1;
BEEP=1;
RELAY=1;
for(;;)
{
IR_SHOW();
}

} //end main

void IR_IN() interrupt 0 using 0
{
unsigned char i,j,k,N=0;
EA = 0;
I1:
for (i=0;i<4;i++)
{
if (IRIN==0) break;
if (i==3) {EA =1;return;}
}
delay(20);
if (IRIN==1) goto I1; //確認IR信號出現
while (!IRIN) //等 IR 變為高電平
{delay(1);}

for (j=0;j<4;j++)
{
for (k=0;k<8;k++)
{
while (IRIN) //等 IR 變為低電平
{delay(1);}
while (!IRIN) //等 IR 變為高電平
{delay(1);}
while (IRIN) //計算IR高電平時長
{
delay(1);
N++;
if (N>=30) {EA=1;return;}
}
IRCOM[j]=IRCOM[j] >> 1;
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}
N=0;
}//end for k
}//end for j

if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}
IRCOM[5]=IRCOM[2] & 0x0F;
IRCOM[6]=IRCOM[2] & 0xF0;
IRCOM[6]=IRCOM[6] >> 4;
beep();
EA = 1;

}

void IR_SHOW()
{
P0 = table[IRCOM[5]];
GEWEI = 0;
SHIWEI = 1;
delay1(4);
P0 = table[IRCOM[6]];
SHIWEI = 0;
GEWEI = 1;
delay1(4);
}

void beep()
{
unsigned char i;
for (i=0;i<100;i++)
{
delay(5);
BEEP=!BEEP;
}
BEEP=1;
}

void delay(unsigned char x)//x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}

void delay1(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i<120; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

⑵ 基於51單片機的溫控遙控電風扇用c語言寫的程序

#include<stdio.h>
void main()
{
char a[4]=;
int i,j,k;
char space=' ';
for(i=0;i<4;i++)
{
printf("\n");
printf(" ");
for(j=1;j<=i;j++)
printf("%c",space);
for(k=0;k<4;k++)
printf("%c",a[k]);
}
printf("\n");
}

⑶ 用52單片機做個簡單的遙控電風扇控制 要c語言編的程序

我這里有,不過才10分啊,不值得發

⑷ 小製作:紅外遙控電風扇

網頁中不是說的很清楚嗎?電子元件僅僅需要發射管、接收管、三極體、我估計應該還有(電阻),因為作者沒有給出來電路圖,所以就需要自己捉摸如何接了。

⑸ 以下是一格力空調遙控器控制溫度的C語言,請幫我解釋一下語句的意思原理是什麼145、75是什麼意思

只有這些代碼看不到send_precode之類的封裝內容,基本不可能看出邏輯,除非是做這方面的技術人員。
至於純代碼的意思很好理解。
由於send_precode、send_8bit_code、send_final_code等函數封裝不可見,
所以大致只能猜測。
send_precode(145,75);
send_8bit_code(wen[wen_value][0]);
send_8bit_code(wen[wen_value][1]);
send_8bit_code(wen[wen_value][2]);
send_8bit_code(wen[wen_value][3]);
send_4bit_code(wen[wen_value][4]);
send_final_code();
wen這個是一個溫度的二維數組,
send_precode(145,75);
這個應該是發送一個類似初始化命令的消息。根據兩個函數都調用了此方法,而函數的命名也可以看出是在編碼之前發送的一個消息。
send_8bit_code 這應該是發送一個溫度的信息。
send_final_code();應該表示的是發送溫度信息的結束。
if(wen_value==15)
wen_value=0;
}這個應該不用解釋了吧,就是如果當前溫度為15 就自動設置到最低也就是0.
根據代碼可以看出,允許的最高溫度就是15.

⑹ 紅外遙控器同一個鍵控制一個I/O口,第一次開,第二次關,比如P0^1開啟關閉C語言代碼高手請進。

第一,收到你要的按鍵後,是取反某個位,而不是賦值。如P10=~P10;(建議取個名字)
第二,為了避免一次按鍵,多次觸發,對按鍵值操作後,需要進行清除處理;(即賦值成無效的按鍵值),如 IrValue[2]=0xff;(如果沒有按鍵是 0xff的話)
第三,最正確的做法是,收到遙控後,額外提供一個標志位(如 IR_UpdateFlag),程序識別標志位後,進行按鍵選擇,處理完按鍵後,清除標志位。這樣可以避免程序重復、多餘執行按鍵選擇(雖然是無效的按鍵,但那也是選擇),可以提高系統執行效率!

⑺ 遙控電風扇

一、遙控器

為了能遠離距的控制電風扇,採用了紅外遙控器。通常紅外遙控器由發射和接收兩部分組成,發射部分由單片機 80C2051等構成。接收部分由單片機89C51等構成。

1. 工作原理及組成部分

(1)CPU 採用AT89C2051單片機,AT89C2051的功能:

和 MCS-8051產品兼容、2KB可重編程閃速存儲器、耐久性:1000寫/擦除周期、2.7V~6V的操作范圍、全靜態操作:0Hz~24MHz、兩級加密程序存儲器、128×8位內部RAM、15根可編程I/O引線、6個中斷源、可編程串列UART通道、直接LED驅動輸出、片內模擬比較器、低耗空載和掉電方式。

(2)電源採用4節7號電池來提供電源,並用一個二極體(IN4148)進行降壓。

(3)調制部分:採用CD40106進行緩沖放大並整形.發送的數字信號與38K的載波進行相與,將其調制在一起,整形並緩沖放大,經過8050進行放大驅動紅外發射管,使其發射紅外光。
2.紅外發射

(1)發射部分包括鍵盤矩陣、編碼調制、紅外發送器。使用89C2051晶元 將按鍵信號調制在 38KHz 的載波信號上通過三極體放大後發射出去。紅外編碼為: 全碼 =引導碼+系統碼+系統反碼+數據碼+數據反碼。89C2051 的 P1口構成矩陣式鍵盤,用T1產生定時中斷,驅動P3.3產生一個38K的方波,作為紅外線的調制基波。將發送的數據和P3.0進行邏輯與後,經過40106整形,用三極體驅動紅外發射管發射。

(2)按鍵功能

K1:低檔、中檔、高檔;鍵值為 01H

K2彩燈:鍵值為 02H

K3:自然風、睡眠風、正常風鍵;值為03H

K4定時;鍵值為04H

K5開/關機;鍵值為05H

(3)當無鍵按下時,延時10秒後進入待機狀態,系統處於低功耗模式。 當有按鍵按下時,INT0中斷產生中斷,同時喚醒CPU進行工作狀態。

3.紅外發射的編碼方式

遙控發射器專用晶元很多,根據編碼格式可以分成兩大類,這里我們以運用比較廣泛,解碼比較容易的一類來加以說明,現以日本 NEC的uPD6121G組成發射電路為例說明編碼原理。當發射器按鍵按下後,即有遙控碼發出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特徵:

(1)採用脈寬調制的串列碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的「0」;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的「1」。

「0」和「1」組成的32位二進制碼經38kHz的載頻進行二次調制以提高發射效率,達到降低電源功耗的目的。然後再通過紅外發射二極體發射。

(2)遙控編碼是連續的32位二進制碼組,其中前16位為用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾。該晶元的用戶識別碼固定為十六進制0FFH;後16位為8位操作碼(功能碼)及其反碼。

(3)遙控器在按鍵按下後,周期性地發出同一種32位二進制碼,周期約為108ms。一組碼本身的持續時間隨它包含的二進制「0」和「1」的個數不同而不同,大約在45~63ms之間。

二、 電風扇控制板
1.工作原理及組成部分: 紅外接收部分包括光電轉換放大器、解調、解碼電路。

(1)CPU板將單片機、控制、鍵盤組合在一起完成了人機對話。 用 AT89C51單片機來作主晶元控制,採用紅外T1838接收頭,用雙向可控硅MC97A6控制電機檔位,具有紅外遙控功能。

(2)電源部分:交流220V經變壓器降壓為2×8V,全波整流後再由三端穩壓器LM7805穩壓,供給控制板

⑻ C語言編程,52單片機

這風扇速度快慢好像與單片機沒啥關系吧,那風扇速度是用單片機控制的嗎,是怎麼控制的?
家用電風扇調速也沒用什麼單片機的,也是三個鍵,3檔速度,再加一個復位鍵,即停止鍵。

⑼ 紅外線遙控器解碼C語言程序代碼 SM0038接受頭

//////////////////////////////////////
//晶振頻率為6MHz 一個機器周期2us //
//實現按鍵地址碼、指令碼的數碼管顯示//
//2010-06-01 //
//////////////////////////////////////
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit la=P2^6;
sbit wela=P2^7;
bit overflag,dataover;//開始接收數據,數據處理完畢

uchar timedata;//定時器0溢出次數
uchar chubus[33];//33Byte數據 timedata組成的數組
uchar jieguos[4];//地址碼,地址反碼,數據碼,數據反碼;

void initial()//初始化
{
IT0=1;EX0=1;//負邊沿觸發

TMOD=0x01;ET0=1;TR0=1;//模式1,十六位定時器
TH0=0xff;TL0=0x06;//0.5ms溢出

EA=1; //開總中斷
}

void time0() interrupt 1//定時器0中斷
{TH0=0xff;TL0=0x06;
timedata++;
}

void ex0() interrupt 0//外部中斷0,接收數據
{
static bit startflag;//開始接收
static uchar i;

if(startflag)
{
if(timedata<32&&timedata>=16) i=0;
chubus[i]=timedata;
timedata=0;
i++;
if(i==33){overflag=1;i=0;}

}
else
{
startflag=1;
timedata=0;
}
}

void chulidata()
{
uchar chubu;//初步數據
uchar jieguo;//結果數據
uchar x,y,z=1;
for(x=0;x<4;x++)//處理四組數據
{
for(y=1;y<=8;y++)//處理一組數據8Byte
{
chubu=chubus[z];
jieguo=jieguo>>1;
if(chubu>3) jieguo=jieguo|0x80;//大於1.5mS為1
z++;
}
jieguos[x]=jieguo;
jieguo=0;
}
dataover=1;

}

void delay(uint z)
{
uint x ,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void display()
{
uchar gao,gao1;
uchar di,di1;

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
gao1=table[jieguos[0]/16];
di1=table[jieguos[0]%16];
gao=table[jieguos[2]/16];
di=table[jieguos[2]%16];

la=1;
P0=gao1;
la=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delay(2);

la=1;
P0=di1;
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(2);//地址碼

la=1;
P0=gao;
la=0;
P0=0xff;
wela=1;
P0=0x77;
wela=0;
delay(2);

la=1;
P0=di;
la=0;
P0=0xff;
wela=1;
P0=0x6f;
wela=0;
delay(2);//指令碼

}

void main()
{
initial();//初始化
while(1)
{

if(overflag)//數據接收完畢
{
chulidata();//處理數據,完成標志dataover
overflag=0;
}
if(dataover)
{
display();//數碼管顯示
}
}
}

⑽ 電風扇用到的程序編程有哪些

基於51單片機的溫控遙控電風扇用c語言寫程序,基於FLASH只讀程序存儲器,支持在線編程。兼容標准MCS一51指令系統及80C51引腳結構。