单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:2102|回复:5

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

 [复制链接]
ID:796012发表于 2023-3-15 17:33|显示全部楼层
/*三角牌遥控风扇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;/*否则不发射,即相当于发射编码中的低电平*/
}

这个是参考波形图
波形对比.png

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


这是焊接好的3+6键
焊接好的正面.jpg



背面走线
背面走线.jpg


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



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

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

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



评分

黑币 +50
收起理由
+ 50
共享资料的黑币奖励!

查看全部评分

ID:98880发表于 2023-3-23 11:08|显示全部楼层
不错的资料
ID:1069354发表于 2023-4-2 14:44|显示全部楼层
哈哈哈,挺有意思
ID:1067056发表于 2023-6-25 14:29|显示全部楼层

哈哈哈,挺有意思
ID:712097发表于 2023-6-30 14:40|显示全部楼层
建议加一个4056的充电管理IC,成本3毛多,整个产品也更安全了。
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 单片机教程网