1、接收系统仿真原理图如图4所示。图4红外接收系统模块3.LED数码显示系统模块 采用多位一体数码管显示,以发光二极管为组成单元的显示器件。采用共阴极数码管工作模式:阴极接在一起,低电平,阳极为高电平时,则对应的LED灯亮。工作原理图如图5所示。图5 LED数码管工作原理图系统红外接收LED数码显示模块Multisim原理图如图6所示。图6数码显示模块原理图二、软件设计模块1.发送模块程序设计 通过按键来控制I/O口电平高低转换。由I/O口电平转换,组成红外编码时序图,然后通过开关上移、下移、左移、右移按键控制响应功能程序,并实现红外编码的调制。相应程序设计流程图如图7所示。图7 发送模块程序设计
2、流程图2.接收模块程序设计 (1)红外接收模块是通过中断的方式来接收红外的信号,具体接收流程图如图8所示。图 8 中断接收流程图(2)通过中断接收的红外调制信号,按照图9所示的解调和解码。解码过程中,通过判读是否接收到引导码来判断接收的信号是否是用户码,然后并对用户码进行识别,确认键码后解码。利用接收波形的下降沿使单片机产生中断,相邻两次中断(两个下降沿)的间隔时间由定时器计时图9解码流程图3.数码管显示程序设计数码管显示模块,通过单片机识别解码数据,并根据数据十进制高地位进行显示,设定片选每一位的显示时间。每次中断切换数码管,四次为一个周期,定时时间4ms。已知三个数码管分别显示十位、个位和
3、十分位,对解码后的程序首先进行十位判断,如果有值则进行零值判断,如果无值则进行个位判断,依次到十分位判断,三个有效位依次根据判断顺序进行查表,并通过单片机程序片选十位、个位和十分位数码管进行显示。根据一个周期4ms,对数码管进行扫描显示,就形成了红外编码显示。具体程序设计流程图如图10所示。图10 数码管显示程序设计流程图8051源程序#include / 函数原型 void SystemInit(void); void Delay_840us(void);void Delay_2400us(void);void LedDisp();unsigned char GetCode(void);/获
4、得码 void delay(unsigned char loop); / 位变量 sbit IRIN = P32;sbit BEEP = P16;sbit swch = P17; / 变量 unsigned char KeyValue; /机器码 unsigned char MaValue; /键值码;unsigned char disbuf4; /数码管显示缓冲 unsigned char scan4=0x04,0x08,0x10,0x20; /p2位选择 unsigned char code table16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
5、,0x7f,0x6f,0x77,0x7C,0x39,0x5E,0x79,0x71; /*延时 */ void delay(unsigned char loop) unsigned char i; for(i=0;i8); TR1=1; while(!TF1); TF1=0; TR1=0; /*延时9ms */ void Delay_9000us(void) TL1 = 153.6; TH1 = 223.6; TR1 = 1; TF1 = 0; TR1 = 0; /*延时4.5ms */ void Delay_4500us(void) TH1 = 239.8; TL1 = 204.8; /*系统
6、初始化*/ void SystemInit(void) IRIN = 1; IT0 = 1; /INT0负跳变触发 TMOD = 0x10; /定时器1工作在方式1 EA = 1; EX0 = 1;/*读码*/ unsigned char GetCode() unsigned char n; static temp = 0; for( n = 0; n 1); / 1 while(IRIN); /等待跳变成低电平 else temp=(0x00|(temp / 0 return temp; /*数码管显示*/ void LedDisp() i4)&0x0f); disbuf1=KeyValue
7、&0x0f; disbuf2=(MaValue& disbuf3=MaValue& LedDisp(); void interr_ir(void) interrupt 0 /*用户码和机器码*/ unsigned char addrl,addrh,num1,num2; EA = 0; /先关闭外部中断0 Delay_9000us(); / 检测9ms开始码 if (IRIN) / 检测是否为干扰信号 / 重新开启外部中断0 return ; / 退出解码 / 等待跳为高电平 Delay_4500us(); / 检测4.5ms结果码 / 读码 addrl=GetCode(); / 用户编码高位 addrh=GetCode(); / 用户编码低位 num1=GetCode(); / 机器码 num2=GetCode(); / 机器码反码 /校验是否为错码 if(num1!=num2) KeyValue=14; EA=1; return; KeyValue=num2; MaValue=addrh;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1