普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 806|回复: 0

51单片机串口通信与红外

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2023-10-29 22:27:36 | 显示全部楼层 |阅读模式
3金钱
51单片机红外与串口的结合,想实现红外遥控器按下0-9后数码管显示0-9,且串口助手接收到0-9,但为什么串口助手一直接收00?
#include <REGX52.H>

typedef unsigned int u16;
typedef unsigned char u8;

sbit IR=P3^2;
sbit LATCH1=P2^2;
sbit LATCH2=P2^3;


#define DataPort P0


unsigned char code dofly_DuanMa[11]={0x3f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char irtime;
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
u8 rec_data;

void Ir_work(void);
void Ircordpro(void);
void tim0_isr (void) interrupt 1 using 1
{
irtime++;
}
void EX0_ISR (void) interrupt 0
{
static unsigned char i;
static bit startflag;  
        if(startflag)
                {
                        if(irtime<63&&irtime>=33)
                        i=0;
                        irdata=irtime;
                        irtime=0;
                        i++;
                if(i==33)
                        {
                                irok=1;
                                i=0;
                        }
                }               
        else
                {
                        irtime=0;
                        startflag=1;
                }
}


void TIM0init(void)
{
        TMOD=0x02;
        TH0=0x00;
        TL0=0x00;
        ET0=1;
        TR0=1;
}


void EX0init(void)
{
        IT0 = 1;
        EX0 = 1;
        EA = 1;
}

void UART_SendByte(unsigned char Byte)        
{
        SBUF = Byte;
        while(TI==0);
        TI = 0;
}

//&#188;ü&#214;&#181;
void Ir_work(void)
{
switch(IRcord[2])
{
case 0x16ataPort=dofly_DuanMa[1];UART_SendByte('0');break;//0
case 0x0cataPort=dofly_DuanMa[2];UART_SendByte('1');break;//1
case 0x18ataPort=dofly_DuanMa[3];UART_SendByte('2');break;//2
case 0x5eataPort=dofly_DuanMa[4];UART_SendByte('3');break;//3
case 0x08ataPort=dofly_DuanMa[5];UART_SendByte('4');break;//4
case 0x1cataPort=dofly_DuanMa[6];UART_SendByte('5');break;//5
case 0x5aataPort=dofly_DuanMa[7];UART_SendByte('6');break;//6
case 0x42ataPort=dofly_DuanMa[8];UART_SendByte('7');break;//7
case 0x52ataPort=dofly_DuanMa[9];UART_SendByte('8');break;//8
case 0x4aataPort=dofly_DuanMa[10];UART_SendByte('9');break;//9
default:break;
}
irpro_ok=0;
}


void uart_init(u8 baud)
{
        TMOD|=0X20;        
        SCON=0X50;        
        PCON=0X80;        
        TH1=baud;        
        TL1=baud;
        ES=1;               
        EA=1;               
        TR1=1;                        
}
void Ircordpro(void)
{
unsigned char i, j, k;
unsigned char cord,value;

k=1;
for(i=0;i<4;i++)
{
        for(j=1;j<=8;j++)
                {
                        cord=irdata[k];
                                if(cord>7)
                                        value|=0x80;
                                if(j<8)
                                        {
                                                        value>>=1;
                                        }
                        k++;
                }
        IRcord=value;
        value=0;
}
irpro_ok=1;
}


void main(void)
{
        uart_init(0xFA);
        DataPort = 0;
  EX0init();
  TIM0init();
  DataPort=0xfe;
  LATCH2=1;
  LATCH2=0;
                while(1)
                {
                                if(irok)
                                        {
                                                Ircordpro();
                                                irok=0;
                                        }
                                if(irpro_ok)
                                        {
                                                Ir_work();
                                        }
                }
}

void uart() interrupt 4 {
    if (RI) {
        rec_data = SBUF;
        RI = 0;      
        SBUF = rec_data;
        while (!TI);
        TI = 0;
    }
               
               
}

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有0人回答

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-27 21:22 , Processed in 0.086582 second(s), 29 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表