鼻子整形缩小要多少钱:红外遥控风扇C+汇编程序(有原理图和程序
来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 02:34:04
红外遥控风扇程序,如下:
/*************晶体为11.0592M
***************红外线遥控风扇控制程序*******/
#include
unsigned char data e1 _at_ 0x1A; //分别存放红外线译码后的数据,高8位地址
unsigned char data w1 _at_ 0x1B; //低8位地址
unsigned char data e2 _at_ 0x1C; //编码数据
unsigned char data w2 _at_ 0x1D; //数据反码
sbit Irf="P3"^2; //红外线输入引脚,可自定义
sbit PWM="P3"^3; //PWM控制输出脚
sbit Led1=P3^7; //LED个位控制
sbit Led2=P3^5; //LED十位控制
/*******************红外线查询子程序*******************/
void Irda(void)
{
#pragma asm
MOV R6,#10;
SB:
MOV R4,#19 ;//延时880微秒
D1:
MOV R5,#19;
DJNZ R5,$;
DJNZ R4,D1;
JB P3.2,EXIT ;//延时882微秒后判断P3.2脚是为1
DJNZ R6, SB ;//在8820微秒内如P3.2为1就退出
JNB P3.2, $ ;//等待高电平避开9毫秒低电平引导脉冲
MOV R4,#10 ;//延时4740微秒
D2: MOV R5,#218;
DJNZ R5,$;
DJNZ R4,D2;//延时4.74毫秒避开4.5毫秒的结果码
MOV R1,#1AH ;//设定1AH为起始RAM区
MOV R2,#4 ;//接收从1AH到1DH,用于存放操作码和操作反码
PP:
MOV R3,#8 ;//每组数据为8位
SS:
JNB P3.2,$ ;//等待地址码第一位的高电平信号
MOV R4,#19 ;//延时880微秒
D5:
MOV R5,#19;
DJNZ R5,$;
DJNZ R4,D5 ;//高电平开始后882微秒判断信号的高低电平
MOV C,P3.2 ;//将P3.2引脚此时的电平状态0或1存入C中
JNC TT ;//如果为0就跳转到TT
MOV R4,#2 ;//延时1000微秒
D6:MOV R5,#248;
DJNZ R5,$;
DJNZ R4,D6;//检测到高电平1的话延时1毫秒等待脉冲高电平结束
TT:
MOV A,@R1 ;//将R1中地址的给A
RRC A ;//将C中的值0或1移入A中的最低位
MOV @R1,A ;
DJNZ R3,SS ;//接收满8位换一个内存
INC R1 ;//对R1中的值加1,换下一个RAM
DJNZ R2,PP ;//接收完所有数据
EXIT:
#pragma endasm
}
/*延时程序,由x参数确定延迟时间*/
void msec(int x) // @ 11.0592 MHz
{
int j="0";
while(x>=0)
{
for (j=0;j<1350;j++);
x--;
if(!Irf) break;
}
}
void main(void)//主程序
{ P1=0x41;
Led1=0;
Led2=0;
while(1)
{
if(!Irf)
{
Irfda: e1=e2=0;
Irda(); //调用红外线解码程序
if((e1==~w1)&&(e2==~w2)) //校验,错误码输入返回
{
switch(e2)
{ case 0x1D:P1=0x83;for(;;){PWM=1;msec(1000);PWM=0;msec(5);if(!Irf){P1=0xFF;goto Irfda;}}//按键1,风最大
case 0x11:P1=0x83;for(;;){PWM=1;msec(500);PWM=0;msec(10);if(!Irf){P1=0xFF;goto Irfda;}}//按键2,风最大
case 0x05:P1=0xA1;for(;;){PWM=1;msec(100);PWM=0;msec(10);if(!Irf){P1=0xFF;goto Irfda;}}//按键3,风最大
case 0x5E:P1=0x39;for(;;){PWM=1;msec(60);PWM=0;msec(10);if(!Irf){P1=0xFF;goto Irfda;}}//按键4,风最大
case 0x52:P1=0x25;for(;;){PWM=1;msec(30);PWM=0;msec(10);if(!Irf){P1=0xFF;goto Irfda;}}//按键5,风最大
case 0x46:P1=0x05;for(;;){PWM=1;msec(10);PWM=0;msec(10);if(!Irf){P1=0xFF;goto Irfda;}}//按键6,风最大
case 0x5D:P1=0xF1;for(;;){PWM=1;msec(5);PWM=0;msec(10);if(!Irf){P1=0xFF;goto Irfda;}}//按键7,风最小
case 0x00:P1=0xFE;break;//按键POWER ON/OF,风关闭
case 0x45:P1=0x21;PWM=0x01;e1=e2=0;break;
case 0x50:P1=0x41;PWM=0x01;e1=e2=0;break;
case 0x1C:P1=0x13;PWM=0x01;e1=e2=0;break;
case 0x04:P1=0x86;PWM=0x01;e1=e2=0;break;
case 0x00:P1=0xFE;PWM=0x01;e1=e2=0;break;
default :break;
}
}
}
}
}
PROTEL 99SE画的此程序硬件原理图