#include"nec.h"
bit irflag = 0; //红外接收标志,收到一帧正确数据后置1
unsigned char ircode[4]; //红外代码接收缓冲区
void InfraredInit()
{
SetGpioMode(GPIOP3,PIN_2,GPIO_Mode_Out_IN);//设置GPIO模式 5.4 5.5设为推挽 GPIO_Mode_Out_IN准双向 GPIO_Mode_Out_PP推挽 GPIO_Mode_AIN高阻GPIO_Mode_Out_OD开漏
IR_INPUT=1;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //配置T0为模式1模式:01为16位定时器,02为8位自动重装定时器
ET0 = 0; ////禁止T0 中断
TR0 = 0; ////停止T0 计数
IT0 = 1; //设置 INT0 下降沿
EX0 = 1; //使能 INT0 中断
AUXR = 0x00;
}
unsigned int GetHighTime()/* 获取当前高电平的持续时间 */
{
TH0 = 0; //清零T1 计数初值
TL0 = 0;
TR0 = 1; //启动T1 计数
while (IR_INPUT) //红外输入引脚为1 时循环检测等待,变为0 时则结束本循环
{
if (TH0 >= 0x82)
{ //当T1 计数值大于0x4000,即高电平持续时间超过约18ms 时,
break; //强制退出循环,是为了避免信号异常时,程序假死在这里。
}
}
TR0 = 0; //停止T1 计数
return (TH0*256 + TL0); //T1 计数值合成为16bit 整型数,并返回该数
}
unsigned int GetLowTime()/* 获取当前低电平的持续时间 */
{
TH0 = 0; //清零T1 计数初值
TL0 = 0;
TR0 = 1; //启动T1 计数
while (!IR_INPUT) //红外输入引脚为0 时循环检测等待,变为1 时则结束本循环
{
if (TH0 >= 0x82)
{ //当T1 计数值大于0x4000,即低电平持续时间超过约18ms 时,
break; //强制退出循环,是为了避免信号异常时,程序假死在这里。
}
}
TR0 = 0; //停止T1 计数
return (TH0*256 + TL0); //T1 计数值合成为16bit 整型数,并返回该数
}
void InfraredAction()//红外解析
{
if(ircode[2]==0x18)//上 RGB+++ //////////////////////////////////////////////////////////////////////////////////////// 亮度调整++++
{
if(style!=0)
{
switch(style)
{
case 1://
if(redBuf<236)//白
{
redBuf+=20;
greenBuf+=20;
blueBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
break;
case 2://
if(redBuf<236)//红
{
redBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
break;
case 3://
if(greenBuf<236)//绿
{
greenBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
break;
case 4://
if(blueBuf<236)//蓝
{
blueBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
case 5://
if(redBuf<236)//黄
{
redBuf+=20;
greenBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
break;
case 6://
if(blueBuf<236)//紫
{
redBuf+=20;
blueBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
break;
case 7://
if(blueBuf<236)//青
{
greenBuf+=20;
blueBuf+=20;
styleFig=1;//显示改变标志
saveFlag = 1;//保存标志
}
break;
case 8://
if(redBuf<236)//红闪
{
redBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 9://
if(greenBuf<236)//绿闪
{
greenBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 10://
if(blueBuf<236)//蓝闪
{
blueBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 11://
if(redBuf<236)//黄闪
{
redBuf+=20;
greenBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 12://
if(blueBuf<236)//紫闪
{
redBuf+=20;
blueBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 13://
if(blueBuf<236)//青闪
{
greenBuf+=20;
blueBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 14://
if(redBuf<236)//白闪
{
redBuf+=20;
greenBuf+=20;
blueBuf+=20;
saveFlag = 1;//保存标志
}
break;
case 15:// 红呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 16://绿呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 17://蓝呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 18://黄呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 19://紫呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 20://青呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 21://白呼吸
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
case 24:///呼吸七彩切换
if(indexBuf<236)
{
indexBuf+=20;
saveFlag = 1;
}
break;
default:break;
}
}
}else if(ircode[2]==0x52)//下 RGB--- //////////////////////////////////////////////////////////////////////////亮度调整----------
{
if(style!=0)
{
switch(style)
{
case 1://
if(redBuf>19)//白
{
redBuf-=20;
greenBuf-=20;
blueBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 2://
if(redBuf>19)//红
{
redBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 3://
if(greenBuf>19)//绿
{
greenBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 4://
if(blueBuf>19)//蓝
{
blueBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 5://
if(redBuf>19)//黄
{
redBuf-=20;
greenBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 6://
if(blueBuf>19)//紫
{
redBuf-=20;
blueBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 7://
if(blueBuf>19)//青
{
greenBuf-=20;
blueBuf-=20;
styleFig=1;//显示改变标志
saveFlag = 1;
}
break;
case 8://
if(redBuf>19)//红闪
{
redBuf-=20;
saveFlag = 1;
}
break;
case 9://
if(greenBuf>19)//绿闪
{
greenBuf-=20;
saveFlag = 1;
}
break;
case 10://
if(blueBuf>19)//蓝闪
{
blueBuf-=20;
saveFlag = 1;
}
break;
case 11://
if(redBuf>19)//黄闪
{
redBuf-=20;
greenBuf-=20;
saveFlag = 1;
}
没有合适的资源?快使用搜索试试~ 我知道了~
BufNecWs2812_030103.zip
共50个文件
obj:16个
c:8个
lst:8个
0 下载量 183 浏览量
2023-03-01
17:24:25
上传
评论
收藏 191KB ZIP 举报
温馨提示
24种显示效果ws2812灯珠红外遥控控制 驱动芯片8g1k08a
资源推荐
资源详情
资源评论
收起资源包目录
BufNecWs2812_030103.zip (50个子文件)
Source
out.h 139B
ws2812.c 8KB
stc_it.c 2KB
eeprom.h 2KB
timer.c 961B
config.h 3KB
nec.h 445B
eeprom.c 6KB
config.c 4KB
timer.h 215B
nec.c 28KB
main.c 10KB
out.c 264B
ws2812.h 1KB
Output
config.obj 12KB
BufNecWs2812 133KB
nec.obj 47KB
BufNecWs2812.lnp 264B
BufNecWs2812.plg 2KB
ws2812.obj 21KB
timer.obj 8KB
BufNecWs2812.hex 20KB
stc_it.obj 13KB
out.obj 7KB
main.obj 28KB
eeprom.obj 17KB
Project
config.obj 12KB
BufNecWs2812 83KB
BufNecWs2812_Opt.Bak 4KB
stc_it.lst 7KB
nec.obj 11KB
BufNecWs2812.lnp 162B
ws2812.lst 17KB
eeprom.lst 10KB
nec.lst 92KB
BufNecWs2812.Uv2 2KB
main.lst 25KB
BufNecWs2812.plg 5KB
ws2812.obj 14KB
timer.lst 2KB
timer.obj 8KB
out.lst 1KB
stc_it.obj 12KB
BufNecWs2812.Opt 4KB
config.lst 10KB
BufNecWs2812_Uv2.Bak 2KB
out.obj 8KB
main.obj 14KB
eeprom.obj 11KB
BufNecWs2812.M51 125KB
共 50 条
- 1
资源评论
小白q_5793545
- 粉丝: 21
- 资源: 90
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功