红外解码1602液晶显示(小项目)

描述:对红外模块接收到的数据进行处理,然后将其显示到1602LCD上

流程图

二、小知识

1.二进制×2的i次方就是往左移动几位,同样的除以2的i次方就是向右移动几位。

比如0xAB 被除以 16 得到 0xA就是移动4

2.  定时器中断和外部中断要区分开,定时器是在每次溢出时触发中断;外部中断是由外部事件触发的中断。总结来就是定时器中断是基于定时器计数的,而外部中断是基于外部事件的

三、代码:

main.c

#include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include"1602.h"
#include"delay.h"

sbit IR=P3^2;  //红外接口标志

char code Tab[16]="0123456789ABCDEF";   //十六进制字符,用于在Ir_work()函数中将二进制转换为16进制
/*------------------------------------------------
                全局变量声明
------------------------------------------------*/

unsigned char  irtime;//红外用全局变量

bit irpro_ok,irok; //irpro_ok 表示红外信号已经成功解码和处理完毕。 irok  表示红外信号接收完成
/*
irok 的状态:
 
如果 irok 为 0,表示红外信号接收未完成或正在进行中。
如果 irok 为 1,表示红外信号接收完成,可以开始解码处理。
irpro_ok 的状态:
 
如果 irpro_ok 为 0,表示红外信号的数据尚未处理完毕。
如果 irpro_ok 为 1,表示数据处理完成,可以进行数码管的显示操作。
*/
unsigned char IRcord[4];
unsigned char irdata[33];

unsigned char TempData[16];
/*------------------------------------------------
                  函数声明
------------------------------------------------*/
void Ir_work(void);
void Ircordpro(void);

/*------------------------------------------------
                  定时器0中断处理
------------------------------------------------*/

void tim0_isr (void) interrupt 1 using 1
{
       
       
  irtime++;  //用于计数2个下降沿之间的时间
}

/*------------------------------------------------
                  外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
{
       
       

  static unsigned char  i;//接收红外信号处理  于存储信号数据的索引。使用 static 关键字保证在中断处理过程中 i 的值会被保留,即使函数多次调用。 
  static bit startflag;                //用于标记是否开始记录数据
 
if(startflag)                         
{
       
       
  if(irtime<63
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值