⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xxx.c

📁 一个红外线的源程序,可以在KEIL下编译通过,而且是C中潜入汇编,内含红外的资料文档
💻 C
字号:
#include <AT89X51.H>

unsigned int disp[10] = {0x3f,0x30,0x6d,0x79,0x72,0x5b,0x5f,0x31,0x7f,0x7b};
                  		  //0,    1,   2   3    4    5    6    7    8    9 
unsigned char i,j,k,ge,shi,hong; 

void displed()             //主程序温度显示函数
{
	ge=hong%10;
 	 shi=hong/10;
 	P0=disp[ge];
    P2=0x40;
    for(i=0; i<10; i++)    //延时部分
    for(j=0; j<100; j++)
	{;}
	//P2=0;
    P0=disp[shi];
    P2=0x80;
    for(i=0; i<10; i++)    //延时部分
    for(j=0; j<100; j++)
	{;}
}

main()
{

	EA =1;
 	IT0 =1;
 	EX0=1 	;

    
	while(1)
	{
	//	hong=P1;
		displed();
	}
}

////////////////////把接受并转换好的二进制码存入入P1中/////////////////////

 void int0_int(void) interrupt 0	
 { 
   #pragma asm 
   jmp xxx
YS1: MOV R4,#20 ;延时子程序1,精确延时882微秒
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1 
RET
YS2: MOV R4,#10 ;延时子程序2,精确延时4740微秒
D2: MOV R5,#235
DJNZ R5,$
DJNZ R4,D2 
RET
YS3: MOV R4,#2;延时程序3,精确延时1000微秒
D3:MOV R5,#248
DJNZ R5,$
DJNZ R4,D3
RET
xxx:
CLR EA ;暂时关闭CPU的所有中断请求
MOV R6,#10
SB: ACALL YS1;调用882微秒延时子程序
JB P3.2,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
DJNZ R6, SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序 
;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲
ACALL YS2 ;延时4.74毫秒避开4.5毫秒的结果码

MOV R7,#26;忽略前26位系统识别码 

JJJJA:JNB P3.2,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
JNC UUUA;如果为0就跳转到UUUA
LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUUA: DJNZ R7,JJJJA

MOV R1,#1AH ;设定1AH为起始RAM区
MOV R2,#2;接收从1AH到1BH的2个内存,用于存放操作码和操作反码 
PP: MOV R3,#8;每组数据为8位 

JJJJ: JNB P3.2,$;等待地址码第一位的高电平信号
LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中
JNC UUU;如果为0就跳转到UUU
LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU: MOV A,@R1;将R1中地址的给A
RRC A;将C中的值0或1移入A中的最低位
MOV @R1,A;将A中的数暂时存放在R1数值的内存中
DJNZ R3,JJJJ;接收满8位换一个内存
INC R1;对R1中的值加1,换下一个RAM
DJNZ R2,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH中

MOV A,1AH
CPL A;对1AH取反后和1BH比较
CJNE A,1BH,EXIT;如果不等表示接收数据发生错误,放弃

MOV hong,1AH;将按键的键值通过P1口的8个LED显示出来!
//SETB P3.5;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
LCALL YS2
LCALL YS2
LCALL YS2
//CLR P3.5;蜂鸣器停止
EXIT: SETB EA ;允许中断
//RETI ;退出解码子程序


  #pragma endasm 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -