找回密码
 注册
关于网站域名变更的通知
查看: 290|回复: 0
打印 上一主题 下一主题

单片机pt2262无线遥控解码器制作源程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-29 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机pt2262无线遥控解码器制作源程序8 j9 s8 ?( e3 P$ ]  {3 Z
  • #include<reg52.h>
  • #include <intrins.h>
  • #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 != '\0')
  • {       // 显示字符ttnu.com
  •    lcd_wdat(dis1);
  •    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;        //接收完毕,退出解码程序
  •                      }
  •         }
  •     }( Z2 {2 p$ b4 G# W$ p) h

8 O3 W( T: I, H# p+ S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-20 12:06 , Processed in 0.078125 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表