找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1222|回复: 0
收起左侧

AI8051U单片机TCL空调红外发送和接收程序

[复制链接]
ID:621776 发表于 2024-12-10 15:51 | 显示全部楼层 |阅读模式
本例程基于AI8051U为主控芯片的实验箱进行编写测试。

使用Keil C51编译器,为了达到比较高的效率,一般建议选择"Small"模式。

当编译器出现 "error C249: 'DATA': SEGMENT TOO LARGE" 错误时,则需要手动将部分比较大的数组通过"xdata" 强制分配到 XDATA 区域(例如:char xdata buffer [256];)。

通过硬件I2C接口读取AT24C02前8个字节数据,通过串口打印读取结果.

将读取的数据加1后写回AT24C02前8个字节.

重新读取AT24C02前8个字节数据,通过串口打印读取结果.

MCU上电后执行1次以上动作,可重复断电/上电测试AT24C02前8个字节的数据内容.

串口配置UART1(P3.0,P3.1): 115200,N,8,1.

MCU上电后执行1次以上动作,可重复断电/上电测试AT24C02前8个字节的数据内容.

下载时, 选择时钟 24MHZ (用户可自行修改频率).


发送部分:void start2(void)
{
        uint8_t i=0;
        for(i=0;i<239;i++)
        {
                Delay13us();
                P03=~P03;
        }
        P03=0;
        Delay1600us();
}

void send_38k(void)
{
        uint8_t i=0;
        for(i=0;i<34;i++)
        {
                Delay13us();
                P03=~P03;
        }
        P03=0;
}

void send_IR_Ctl(uint8_t *buf)
{
        uint8_t i=0,j=0,tp;
        start2();
        for(i=0;i<14;i++)
        {
                        tp=buf[ i];
                        for(j=0;j<8;j++)
                        {
                                send_38k();
                                if(tp&0x01)
                                {
                                        Delay450us();
                                }else
                                {
                                        Delay1150us();
                                }
                                tp>>=1;
                        }
        }
        send_38k();
}

接收部分:
void Get_Infrared_Code(uint8_t *buf)
{
        uint8_t data_bits=0,timer_10us=0;
        while(1)
        {
                if(P22==1)
                {
                        if(timer_10us<255)
                                timer_10us++;
                }else
                {
                                
                        buf[data_bits/8]&=~(0x01<<(data_bits%8));
                        if(timer_10us<70)
                                buf[data_bits/8]|=(0x01<<(data_bits%8));

                        if(timer_10us>140)
                                data_bits=0;
                        else
                                data_bits++;
                        timer_10us=0;
                        while(P22==0);
                }
                if(data_bits==112)
                        break;
                Delay10us();
        }
}

硬件连接:
P22->红外接收输出脚
P03->红外接收发送脚
P24->OLED SCL  
P23->OLED SDA
keil c51 编译器
IRC 时钟 33.176MHz

原理图: 无
仿真: 无
代码: 红外遥控器.7z (63.44 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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