历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2020年02月07日 | 单片机pt2262无线遥控解码器制作源程序

2020-02-07 来源:51hei

#include

#include

#define uchar unsigned char


uchar code dis1[] = {" 2262 CODE IS "};

void delay_1s(uchar);

typedef unsigned char BYTE;

typedef unsigned int WORD;

typedef bit BOOL ;

sbit rs = P2^6 ;

sbit rw = P3^6 ;

sbit ep = P2^7 ;


delay(BYTE ms)

{        // 延时子程序

BYTE i;

while(ms--)

{

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

   {

    _nop_();

    _nop_();

    _nop_();

    _nop_();

   }

}

}


BOOL lcd_bz()

{        // 测试LCD忙碌状态

BOOL result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result = (BOOL)(P0 & 0x80);

ep = 0;

return result;

}


lcd_wcmd(BYTE cmd)

{        // 写入指令数据到LCD

while(lcd_bz());

rs = 0;

rw = 0;

ep = 0;

_nop_();

_nop_();

P0 = cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;  

}


lcd_pos(BYTE pos)

{        //设定显示位置

lcd_wcmd(pos | 0x80);

}


lcd_wdat(BYTE dat)

{        //写入字符显示数据到LCD

while(lcd_bz());

rs = 1;

rw = 0;

ep = 0;

P0 = dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

ep = 0;

}


lcd_init()

{        //LCD初始化设定

lcd_wcmd(0x38);    //

delay(1);

lcd_wcmd(0x0c);    //

delay(1);

lcd_wcmd(0x06);    //

delay(1);

lcd_wcmd(0x01);    //清除LCD的显示内容

delay(1);

}

bit T0Action;

bit Action;

bit RECEIVE; //接收标志


sbit P1_7=P1^1;   //接收脚

sbit P3_5=P1^3; //发光二极管


void main()

{

uchar temp,data0,data1,counttime,i=0;

int time,time1,time2;

lcd_init(); // 初始化LCD


T0Action=0;

RECEIVE=0;    //接收标志位

Action=0;

TMOD = 0x01;        // 定时器0 工作方式1

TH0=0x00;

TL0=0x00;

P3_5=1;

lcd_pos(0x00);

   while(dis1[i] != '')

{       // 显示字符ttnu.com

   lcd_wdat(dis1[i]);

   i++;

}

while(1)              

{

   do{P3_5=1;}while(P1_7==1);

   if((P1_7==0) && (T0Action==0))      //等待低电平,低电平开始记时

     {

       TR0=0; TH0=0x00;   TL0=0x00;   TF0=0;   TR0=1;   T0Action=1;

      while(1)

       {

          if((P1_7==1) && (T0Action==1))

         {

           TR0=0;

           time=TH0*256+TL0;     //记下低电平宽度时间

           T0Action=0;

            break;

          }

        }

       }

if((time>9500) && (time<11500))            //检测同步码约11ms

     {

      counttime=0;

      data0=0;

      data1=0;

      time=0;

      RECEIVE=1;    //检测到同步码时 置标志位 RECEIVE=1

      P3_5=0;                 //绿发光二极管灯亮(调试用)

      }

if(RECEIVE==1)                    //检测到同步码后开始解码

    {

       RECEIVE=0;

    lcd_pos(0x42);

       while(1)

       {

          do{}while(P1_7==1);

          if((P1_7==0) && (T0Action==0))     //等待第一个低电平,一有低电平马上记时

            {

             TR0=0; T0Action=1; TH0=0x00; TL0=0x00; TF0=0; TR0=1;

             while(1)

              {

                if((P1_7==1) && (T0Action==1))

                 {

                    TR0=0;

                    time=TH0*256+TL0;    //记下第一个低电平宽度时间

                    T0Action=0;

                    TH0=0x00;TL0=0x00; TF0=0;TR0=1;       //开始记高电平时间

                    break;

                  }

               }

             }

           do{}while(P1_7==1);

           if((P1_7==0) && (T0Action==0))       //等待第二个低电平,一有低电平马上记时

            {

              TR0=0;

              time2=TH0*256+TL0;           //记下一个高电平宽度时间

              T0Action=1;

              TH0=0x00; TL0=0x00; TF0=0; TR0=1;

              while(1)

                {

                  if((P1_7==1) && (T0Action==1))

                    {

                       TR0=0;

                       time1=TH0*256+TL0;       //记下第二个低电平宽度时间

                       T0Action=0; break;

                     }

                }

            }

           if((time<1500))    //判断两个低电平宽度时间是否相等,限时1500us

               {

                 if(((time-time1)>=-600&&(time-time1)<=600) && (time>780) && (time<1150))    //低电平宽度时间

                  {

                     if((time2>210) && (time2<450))   //高电平宽度时间

                     lcd_wdat('0');temp=0x00;       //0

          }

                 if(((time-time1)>=-600&&(time-time1)<=600) && (time>210) && (time<450))   //低电平宽度时间

                    {          

                        if((time2>780) && (time2<1150))   //高电平宽度时间

                        lcd_wdat('1');temp=0x01;       //1


                    }

     if((time>780) && (time<1150)&&(time1>210) && (time1<450))

          lcd_wdat('f');      // f

               counttime++;


                 if(counttime<=8)                         //开始接收前8位   地址码

          data0=(data0<<1)|temp;


       else if((counttime>8) && (counttime<=12)) //开始接收后4位 数据码

                    data1=(data1<<1)|temp;

                 if(counttime==12)                     // 第12位

                     {

                      Action=1;

                      break;        //接收完毕,退出解码程序

                     }

        }

    }


推荐阅读

史海拾趣

Defense Supply Center Columbus公司的发展小趣事

在电子行业,产品质量是企业生存和发展的关键。Defense Supply Center Columbus公司始终将质量管理放在首位,建立起一套完善的质量管理体系。公司严格按照国际标准进行生产和检测,确保每一件产品都符合质量要求。同时,公司还注重员工的培训和教育,提高员工的质量意识和操作技能。这些措施的实施,使得公司的产品质量得到了显著提升,赢得了客户的广泛赞誉。

Arduino公司的发展小趣事

随着Arduino平台的不断发展,为了满足不同项目和应用的需求,Arduino推出了多种不同规格和功能的主板。例如,Arduino Diecimila和Arduino Uno等主板的推出,进一步丰富了Arduino的产品线。这些主板各具特色,适用于各种场景,使得Arduino平台在物联网和嵌入式系统的开发中发挥了越来越重要的作用。

Fractus公司的发展小趣事

Fractus公司的创新之路可以追溯到上世纪八十年代后期,在加泰罗尼亚理工大学(UPC)的研究实验室中,关于天线技术的早期研究拉开了序幕。这一时期的学术研究为后来Fractus的技术创新奠定了坚实的基础。随着研究的深入,Fractus逐渐掌握了几何结构天线设计的核心技术,并开始探索其在无线通信领域的应用潜力。

Chips And Technologies Inc公司的发展小趣事

随着公司规模的扩大和市场份额的提升,C&T开始积极拓展海外市场。通过设立分支机构、参加国际展会等方式,C&T的产品逐渐打入国际市场,赢得了全球客户的认可。同时,C&T还积极与海外企业开展合作,共同推动半导体技术的发展和应用。

ACT [Advanced Crystal Technology]公司的发展小趣事

在创立初期,C&T就展现出了强大的技术创新能力。公司不断推出新产品,这些产品不仅性能卓越,而且具有高度的集成性和稳定性,深受市场欢迎。此外,C&T还积极与业界合作,推动技术标准的制定和完善,为整个行业的发展做出了重要贡献。

GMT(致新科技)公司的发展小趣事
首先,需要找到并进入收音机的设置界面,这通常通过按收音机上的特定按钮(如“MENU”或“设置”按钮)来实现。

问答坊 | AI 解惑

Verilog的程式实现

我想请教各位大大 我正在写一个关于时间和频率最大相似估测的程式 他里面有个方块图是这样的 ρ/2 〖|.|〗^2 我知道ρ的运算过程是这样的... ρ= (E{〖|s(k)|〗^2})/(E{|〖s(k)〗^2 | }+E{|〖w(k)〗^2 |})=(σ_s^2)/(σ_s^2+σ_w^2 )=SNR/(SNR ...…

查看全部问答>

神啊,救救我啊,还是红外接收的

上午去买了几个新的红外接收管 回来写了个小程序测试,接收管接收到红外信号就会输出一个低信号,然后MCU就控制一个红灯亮一下 开始我用电视遥控器试发现红灯亮的和我按的不一致,不是我按了它不亮就是我没按它却亮了, 后来发现原来我只要用手一 ...…

查看全部问答>

找个精通C51的帮手兼职做项目;

地点限于浙江宁波;有意的回tangqinyan@163.net;在杭州的也可以考虑.…

查看全部问答>

为DC/DC转换器选择正确的电感器与电容器

本帖最后由 dontium 于 2015-1-23 13:31 编辑 为DC/DC转换器选择正确的电感器与电容器 随着便携式电子产品的体积在不断缩小,其复杂性同时也在相应的提高。这使得设计工 程师面临的问题越来越多,如电池使用寿命、占板空间、散热或功耗等。本文 ...…

查看全部问答>

关于dma的

有没有人用em-stm3210e这款开发板的?貌似公司提供的DMA例程有问题 连一些基本的显示都没有有没有人知道怎么改? …

查看全部问答>

MC9S08QE32 SCI 通信

大家好!     我们用MC9S08QE32发现串口数据紊乱,但是用MC9S08QE128发现程序正常,请问大家是什么原因? 下面是我们的测试代码:   unsigned char *string1=\"  Welcome \\r\\n\";   MCU_Init();  ...…

查看全部问答>

【X-Nucleo深度评测】之一 收到板子了。

本帖最后由 damiaa 于 2014-11-23 17:05 编辑 今天收到X-NUCLEO-IDB04A1的板子了。于是呼在ST网站下了些资料。X-NUCLEO-IDB04A1板子资料 BlueNRG芯片资料 这个芯片网站标价1.8美元,按市面上的芯片售价和ST标价折算 ,估计以后在淘宝销 ...…

查看全部问答>

请问去哪可以下载到LM1117和LM1084的IBIS模型呢?

请问去哪可以下载到LM1117和LM1084的IBIS模型呢?…

查看全部问答>

PWM直流电机调速怎样测量电流?

想做一个直流电机PWM调速板,为了保护功率管做个过流保护,在功率管上串个采样电阻到地,采样电压经过阻容滤波后到单片机AD检测控制,在电机上串了几种电流表测量,PWM占空比不同时检测出的电流在各种电流表上相差很大,现在我想问的是:比如PWM频 ...…

查看全部问答>