⑴ 基于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引脚结构。