找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2570|回复: 5
打印 上一主题 下一主题
收起左侧

单片机遥控风扇程序 5键红外遥控器自制 参考芯片BA5104 未找到减速键

  [复制链接]
回帖奖励 30 黑币 回复本帖可获得 3 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
/*三角牌遥控风扇FS-40-101  5键红外遥控器程序,可通用多种型号  数据总长度:46毫秒两帧有效帧  12MH晶振  12MHz=12,000,000Hz,也就是1秒振荡一千二百万次   13微秒中断一次
STC8G1K08A-36I-SOP8系列单片机是 STC 生产的单时钟/机器周期(1T)的单片机,是宽电压/高速/高可靠/低功耗/强抗静电/较强抗干扰的新一代 8051 单片机,超级加密。指令代码完全兼容传统 8051。*/
//无自动休眠、无任意键唤醒、无减速键  芯片工作电压:1.9V-5.5V  一帧12位,从低位到高位发射   发射顺序:3位起始码(110)、用户码C1C2(11)、指令码0-6位,间隔约8ms重复发一次,至少发两帧有效帧
//为“1”时:发射1.284ms高电平,不发射0.395ms低电平;  为“0”时:发射0.395ms高电平,不发射1.284ms低电平;各毫秒值与参考值近似也可以,参考红外遥控发射芯片:BA5104。

单片机源程序如下:
#include "stc8.h"
sbit ir=P5^5;/*红外发射管控制脚*/unsigned int count/*中断计数*/, set_count; /*设定中断次数*/
sbit key1=P3^0;sbit key2=P3^1;sbit key3=P3^2;sbit key4=P3^3;sbit key5=P5^4;/*5个按键*/
bit irflag;/*红外发送标志位*/unsigned char irdata,ircode,/*发送的红外数据*/irqy=0xfb;/*3位起始码+1位用户码*/
void delayms(unsigned int xms){unsigned int i,j;for(i=xms;i>0;i--) for(j=110;j>0;j--);}
void ir_sendbyte(char ws) //发送4位或8位红外数据
{
unsigned char i;
for(i=0;i<ws;i++)         //判断4位或8位
{
   if(ircode&0x01){       //判断红外编码最低位,
         set_count=95;          //若为1则1.284ms的高电平
         irflag=1;              //启动红外发射二极管发射
   count=0;               //中断计数清0
   TR0=1;                 //开启定时器0
         while(count<set_count);//等待发送完
         TR0=0;                 //关闭定时器0
         set_count=35;          //若为1则0.395ms的低电平
   irflag=0;              //低电平则不发射
   count=0;               //中断计数清0
   TR0=1;                 //开启定时器0
   while(count<set_count);//等待发送完
   TR0=0; }               //关闭定时器0
   else {                 //否则
         set_count=35;          //为0则0.395ms的高电平
         irflag=1;              //启动红外发射二极管发射
   count=0;               //中断计数清0
   TR0=1;                 //开启定时器0
         while(count<set_count);//等待发送完
   TR0=0;                 //关闭定时器0
         set_count=95;          //为0则1.284ms的低电平
         irflag=0;              //低电平则不发射
   count=0;               //中断计数清0
   TR0=1;                 //开启定时器0
   while(count<set_count);//等待发送完
   TR0=0;}                //关闭定时器0
   ircode=ircode>>1;      //将数据右移,即从低位到高位发送
}
}
void ir_send()         //发送红外数据   至少要发出两帧红外帧
{
ircode=irqy;           //发送3位起始码+1位C1用户码(1)
ir_sendbyte(4);        //发送4位红外数据
ircode=irdata;         //发送1位C2用户码(1)+7位指令码
ir_sendbyte(8);        //发送8位红外数据
set_count=550;         /*延时4ms低电平*/
irflag=0;              /*关闭红外发射二极管发射*/
count=0;               /*中断计数先清0*/
TR0=1;                 /*开启定时器0*/
while(count<set_count);/*等待发送完*/
TR0=0;                                   //关闭定时器0
ircode=irqy;           //发送3位起始码+1位C1用户码(1)
ir_sendbyte(4);        //发送4位红外数据
ircode=irdata;         //发送1位C2用户码(1)+7位指令码
ir_sendbyte(8);               //发送8位红外数据
ir=1;    //发射完了关闭红外发射二极管
}
void timer0_init()    //定时器初始化
{
  TMOD=0x02;     //定时0 8位自动重装模式
  TH0=0xf3;      //设置定时初始值 13微秒
        TL0=0xf3;      //设置定时重载值 13微秒
  EA=1;                 //全局中断允许位。EA=1,打开全局中断控制。
  EX0=0;         //外部中断0允许位,1表示允许外部中断0的中断申请;
  ET0=1;         //定时/计数器0中断允许位,1表示允许定时/计数器0的溢出中断;        
        TR0=0;         //关闭定时器0
  count=0;       //中断计数先清0
  irflag=0;      //红外发射标志先置0               
}
void keyscan()//关机:0x81  定时:0x11  风类:0x21  摇头:0x09  彩灯:0xc3  开风速:0x41  减速:无  无:0x05  无:0x63
{
        if(key1==0){delayms(500);if(key1==0){irdata=0x41;/*用户码+指令码*/ir_send();/*发送红外编码*/while(!key1);}} //开风速
        if(key2==0){delayms(500);if(key2==0){irdata=0x11;/*用户码+指令码*/ir_send();/*发送红外编码*/while(!key2);}} //定时
        if(key3==0){delayms(500);if(key3==0){irdata=0x81;/*用户码+指令码*/ir_send();/*发送红外编码*/while(!key3);}} //关机
        if(key4==0){delayms(500);if(key4==0){irdata=0x21;/*用户码+指令码*/ir_send();/*发送红外编码*/while(!key4);}} //风类
        if(key5==0){delayms(500);if(key5==0){irdata=0x09;/*用户码+指令码*/ir_send();/*发送红外编码*/while(!key5);}} //摇头  
}
void main()
{
P5M0=0;P5M1=0;P3M0=0;P3M1=0;/*设置准双向口模式*/timer0_init();//定时0初始化
while(1) { keyscan();/*按键检测*/ }
}
void timer0() interrupt 1 //定时器0中断
{
count++;if(irflag==1) ir=~ir;/*有发射标志,则发射38khz的矩形波*/else ir=1;/*否则不发射,即相当于发射编码中的低电平*/
}

这个是参考波形图

这个是用线槽做的外壳参考图


这是焊接好的3+6键



背面走线


安装上锂电池
注意:锂电是4.2V的,不能与USB串口的5V电源共用,要不然电池会起鼓燃烧。
这里没弄降压电路,充电可另外用4.2V的充电器充。



另外弄了个3+6键、省电程序(掉电模式)、外部中断唤醒,我就不发这里了。

就差画PCB板、弄塑料外壳、充电电路…  也就基本像个正经的遥控器了。

按键不会弄那种导电胶的软按键



评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:98880 发表于 2023-3-23 11:08 | 只看该作者
不错的资料
回复

使用道具 举报

板凳
ID:1069354 发表于 2023-4-2 14:44 | 只看该作者
哈哈哈,挺有意思
回复

使用道具 举报

地板
ID:1067056 发表于 2023-6-25 14:29 | 只看该作者

哈哈哈,挺有意思
回复

使用道具 举报

5#
ID:712097 发表于 2023-6-30 14:40 | 只看该作者
建议加一个4056的充电管理IC,成本3毛多,整个产品也更安全了。
回复

使用道具 举报

6#
ID:796012 发表于 2023-7-2 10:45 | 只看该作者
chxelc 发表于 2023-6-30 14:40
建议加一个4056的充电管理IC,成本3毛多,整个产品也更安全了。

嗯。谢谢你的建议。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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