×
单片机 > 单片机程序设计 > 详情

单片机红外解码,短按开关灯,长按调光,数码管显示键值

发布时间:2024-05-10 发布时间:
|

//红外解码,实验板测试正常,8位数码管显示遥控编码(用户码,用户反码,右边3位数码管显示PWM值),
//两片74hc573驱动8位共阴数码管
//CH-键短按开关灯,+键长按调光,数码管显示键值;长按调光的解码程序目前网上很难找到,我琢磨了很久才把程序调通//压缩包里有完整的程序代码,有逻辑分析仪测试的连发码的波形

单片机源程序如下:

#include "INCSTC89C52RC.H"

#include "INCMY_SET.H"

#include "INCIR_NEC.H" //调用NEC解码头文件



#define DIGI_PORT P0 // 宏定义数码管端口,如果端口改变,只需修改这一句即可

#define DIGI_NUM 8 // 宏定义数码管个数

unsigned char digiBuf[DIGI_NUM]; //数码管缓冲区

sfr SE = 0x80; //数码管段选 P0:0x80 P1:0x90

sbit wela = P2^7; //位选

sbit dula = P2^6; //段选



sbit led = P1^2;


uint8 PWM_Val=200; //占空比 变量

uint8 flag; //开关灯标志

uint8 flag1;//调光方向标志

uint8 count;

uint8 flag2; //

uint8 num,pwm;

// 0 1 2 3 4 5 6 7 8 9 A B C D E F 不显 -

uint8 code d[]={ 0x3F,0x06,0x5B,0x4F,0x66, 0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,0x40}; //数码管段码 共阴不带小数点段码


void KZ0(); //短按处理

//void KZ1(); //长按处理



/***************** 主函数 ********************/

void main(void)

{

IR_Init(); //红外线解码初始化

while(1)

{

//遥控检测

if(IR_BT==2)

{

KZ0(); //短按处理

IR_BT =0; //清有效标志

//更新显示

digiBuf[0] = NEC[0]/16; //用户码

digiBuf[1] = NEC[0]%16;

digiBuf[2] = NEC[1]/16; //用户反码

digiBuf[3] = NEC[1]%16;

// digiBuf[4] = NEC[2]/16; //数据码

// digiBuf[5] = NEC[2]%16;

// digiBuf[6] = NEC[3]/16; //数据反码

// digiBuf[7] = NEC[3]%16;

}

digiBuf[4] = 16; //不显

digiBuf[5] = PWM_Val/100; //显示pwm值

digiBuf[6] = PWM_Val%100/10;

digiBuf[7] = PWM_Val%10;


if(IR_BT==3 && KeyUpDownFlag==0 ) //长按调光,松手停止调光

{

switch(NEC[2])

{ //长按接收的是连发码,97.11ms高电平,10.15ms低电平

case 0x15: if(IR==1) //if(IR==0)

{

KeyUpDownFlag=1; //如果按键抬起,松手标志置1

}

if(flag1==1 && flag==0) // 开灯状态 +键 长按连加 亮度加

{

if(PWM_Val<200)

{

PWM_Val++; // if(IR==1)用这句

// PWM_Val += 5; //if(IR==0)用这句 加5 灯亮度变化才明显

if(PWM_Val==200)

flag1=0;

}

}

[1] [2]
单片机红外解码短按长按数码管显示

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘