2262+c语言软件解码,基于AVR单片机的PT2262软件解码程序

#include

#include

void delay_ms(void)                         //毫秒延时

{

unsigned int i;

for (i=0;i<140;i++)

{

}

}

void delay_nms(unsigned int n)              //延时周期

{

unsigned int i;

for (i=0;i

{

delay_ms();

}

}

void spaz(void)                             //响蜂鸣器

{

PORTC|=(1<<5);

delay_nms(50);

PORTC&=~(1<<5);

}

unsigned long decode(void)                 //无线解码

{

unsigned long DATA;                    //记录数据

unsigned char count,i;                 //暂时计数

/*一共接收三字节*/

DATA=0;                                //

for (count=0;count<24;count++)         //开始收集

{

/*测量高电平宽度*/

i=0;                                 //宽度计数

while (PINC&(1<<4))           //高位计数

{

asm("nop");           //

i++;                  //计数增加

if (i>192) goto end;  //限时解码

}

/*分辨出电平高低*/

DATA*=2;                       //数据左移

if (i<64)                             //分辨高低

{

if (!((56>i)&(i>24))) goto end;     //电平合法

DATA+=0;                            //记低电平

}

else

{

if (!((168>i)&(i>72))) goto end;    //电平合法

DATA+=1;                            //记高电平

}

/*测量低电平宽度*/

while (!(PINC&(1<<4)))               //低位计数

{

asm("nop");                 //

i++;                        //计数增加

if (i>224) goto end;        //限时解码

}

/*低电平是否过窄*/

if (i<96) goto end;                  //对比宽度

}

/*解码成功返结果*/

return  DATA;                          //成功返回

/*有误码结束解码*/

end:

return 0;                              //误码结束

}

void main(void)

{

unsigned long DATA;                    //

unsigned char D[3];             //

signed char i;                  //

DDRB =0B00000000;                      //定义输入

PORTB=0B11111111;                      //上拉使能

DDRC =0B11101111;                      //输入通道

PORTC=0B11011111;               //上拉选择

DDRD =0B11111111;                      //定义输出

PORTD=0B00000000;               //输出显示

while (1)

{

DATA =decode();                      //解码程序

if (DATA>0)                          //

{

spaz();                            //解码成功

for (i=2;i>=0;i--)                 //数据转换

{

D[i]=DATA;                       //

DATA>>=8;                        //

}

i=0;                               //转换完毕

while (1)                          //输出显示

{

if (!(PINB&(1<<0)))              //按键检查

{

delay_nms(20);                 //防误处理

if (!(PINB&(1<<0)))            //

{

i++;                         //显示值加

spaz();

}

while (!(PINB&(1<<0)))         //按键弹起

{

delay_nms(20);               //防误处理

}

}

if (i>2) break;                  //

PORTD=D[i];                      //输出显示

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值