找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2236|回复: 5
收起左侧

关于单片机解码格力空调源代码,求大佬解答

[复制链接]
ID:633855 发表于 2019-11-1 14:59 来自手机 | 显示全部楼层 |阅读模式
用的STC15F60S2单片机,本来以为挺简单的,做个PCB然后写代码就行,但是按照百度搜到的代码,也写了出来,控制单片机发送起始码加35位控制码加中断码加32位控制码,但是空调没反应,不知道是啥地方出了问题。。。
回复

使用道具 举报

ID:213173 发表于 2019-11-1 15:52 | 显示全部楼层
空调遥控器芯片多为定制,同一品牌的遥控器都未必能通用。马云家搜一下,挺便宜,不必自己劳神写代码。如果是练手就另当别论。
回复

使用道具 举报

ID:610681 发表于 2019-11-1 15:53 | 显示全部楼层
你好!
空调的红外控制难度是比较大的,原因呢
1、原理图或PCB本身有问题
2、程序问题,38K发射载波有问题
3、你这什么都没发,只能说这些了
回复

使用道具 举报

ID:633855 发表于 2019-11-1 22:47 | 显示全部楼层
来51学习的 发表于 2019-11-1 15:53
你好!
空调的红外控制难度是比较大的,原因呢
1、原理图或PCB本身有问题

参加学校的比赛然后复试是做这个,第一次接触这类东西,代码也是按着百度搜到的红外协议直接写的代码,很菜....不过PCB应该没啥问题,装个单片机,液晶显示屏,复位开关,红外发射模块,这些都具备,代码如下:
#include <STC15F2K60S2.H>
#include <intrins.h>

#define LCD_DATA P2    //D0~D7的8位数据口
sbit E =P3^7;sbit RW=P3^6;sbit RS=P3^5;//使能(启用)端,读写控制端
        void check_busy()                        //液晶忙检测函数,用户无须调用
{
  LCD_DATA=0xff;
  RS=0;RW=1;E=0;E=1;
  while(LCD_DATA&0x80){E=0;E=1;}       //如果最高位为1说明正忙,尝试再写入
}
        void write_command(unsigned char command)//液晶命令控制函数
        {
  check_busy();
  E=1;                //使能液晶
  RW=RS=0;            //命令模式     
  LCD_DATA=command;   //写入数据
  E=0;               
}
void write_data(unsigned char Data)      //液晶显示字符函数
{
  check_busy();
  RW=0;
  RS=E=1;
  LCD_DATA=Data;
  E=0;
}
void LCD_init()          //液晶初始化函数
{
  write_command(0x38); //显示5*7点阵数据
  write_command(0x0c); //开显示,显示闪烁光标
  write_command(0x06); //每写入一个字符光标自动右移一位
  write_command(0x01); //清屏
}
   void Delay9000us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        i = 97;
        j = 207;
        do
        {
                while (--j);
        } while (--i);
}
void Delay1660us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 18;
        j = 216;
        do
        {
                while (--j);
        } while (--i);
}

void Delay550us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        _nop_();
        i = 6;
        j = 231;
        do
        {
                while (--j);
        } while (--i);
}

          void Delay4500us()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        i = 49;
        j = 101;
        do
        {
                while (--j);
        } while (--i);
}
void Delay20000us()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 216;
        k = 35;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void main()
{        int i=1;
        LCD_init();
        if(P13==0)
        {
                P34=0;
                Delay9000us();
                P34=1;
                Delay4500us();
                for(i=1;i<7;i++)
                {
                  P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                 
                }
                P34=0;
                Delay550us();
                P34=1;
                Delay1660us();
                for(i=1;i<22;i++)
                {
                 P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                }
                 P34=0;
                Delay550us();
                P34=1;
                Delay1660us();
                 P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                 P34=0;
                Delay550us();
                P34=1;
                Delay1660us();
           P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                  P34=0;
                  Delay550us();
                  P34=1;          
                  Delay550us();
                  P34=0;
                Delay550us();
                P34=1;
                Delay1660us();
                P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                  P34=0;
                  Delay550us();
                  P34=1;
                  Delay20000us();
                  for(i=1;i<9;i++)
                  {
                   P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                  }
                   P34=0;
                Delay550us();
                P34=1;
                Delay1660us();
                for(i=1;i<21;i++)
                  {
                   P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                  }
                   P34=0;
                Delay550us();
                P34=1;
                Delay1660us();
           P34=0;
                  Delay550us();
                  P34=1;
                  Delay550us();
                   P34=0;
                Delay550us();
                P34=1;
                Delay1660us();

                }
       
        else
                P13=0;

}
回复

使用道具 举报

ID:633855 发表于 2019-11-1 22:48 | 显示全部楼层
wulin 发表于 2019-11-1 15:52
空调遥控器芯片多为定制,同一品牌的遥控器都未必能通用。马云家搜一下,挺便宜,不必自己劳神写代码。如果 ...

嗯,确实是练手,参加学校的比赛用到
回复

使用道具 举报

ID:235200 发表于 2019-11-2 13:21 | 显示全部楼层
先用正常的遥控器去测试所发出的波,再用单片机模拟发射
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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