历史上的今天
返回首页

历史上的今天

今天是:2025年08月21日(星期四)

正在发生

2020年08月21日 | 单片机红外线发射接收电路

2020-08-21 来源:51hei

单片机源程序如下:

/***************************************************************

        作品:红外线发射

  单片机:STC89C52RC

    晶振:12M

编译环境:Keil uVision4 V9.00

***************************************************************/

//

//        发射引脚(接PNP三极管b极)

//        PNP三极管e极接2Ω电阻,c极接红外发射管

     

#include

#include

#define uchar unsigned char

#define uint  unsigned int


#define SBM   0x80                //识别码


#define m9    (65536-9000)               //约9mS

#define m4_5  (65536-4500)               //约4.5mS

#define m1_6  (65536-1630)               //约1.65mS

#define m_65  (65536-580)               //约0.65mS

#define m_56  (65536-560)               //约0.56mS

#define m40   (65536-40000)       //约40mS

#define m56   (65536-56000)       //56mS

#define m2_25 (65536-2250)        //约2.25mS


sbit IR  = P3^6;                                  //定义发射引脚(接PNP三极管基极)

sbit LED = P3^7;                                  //发射指示灯


uchar KEY(void);

void  SanZhuan(void);

void  ZZ(uchar x);

void  Z0(uchar temp);

void  TT0(bit BT,uint x);

void  YS(uchar time);


/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

函数功能:主函数

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void main(void)

{


  TMOD = 0x01;         //T0 16位工作方式

  IR=1;                                   //发射端口常态为高电平


  while(1)

  {

   SanZhuan();

  }

}

/***************************************************************

函数功能:             4×4矩阵键盘

                           键值                    

P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

│     │    │    │    │    │    │    │    ┃

│     │    │    └────13   14   15   16   ┃   

│     │    └─────────9    10   11   12   ┃   

│     └──────────────5    6    7    8    ┃   

└────────────────────1    2    3    4    ┃  

***************************************************************/

uchar KEY(void)

{

uchar H,L;            //行值,列值

H=0;

L=0;

P1 = 0xf0;            //将键盘端口行值设为1,列值设为0

if(P1!= 0xf0)         //检测是否有按键按下,如果有则hangval必不为0x0f

   {

    YS(10);            //按键去抖动,延时10毫秒

    if(P1!=0xf0)       //确实有按键按下

      {

       H  = P1&0xf0;   //按键后得到按键的行标志位,将行标志位赋值给hangval

       P1 = 0x0f;      //翻转键盘接口输出

       L  = P1&0x0f;   //得到列标志位

      }

        return (H+L);

   }

  return 0;

}

/***************************************************************

函数功能:散转程序

入口参数:v

//

//  13 14 15 16

//  9  10 11 12

//  5  6  7  8

//  1  2  3  4

***************************************************************/

void SanZhuan(void)

{

uchar v;

v = KEY();


switch(v)

{

  case 0x77:ZZ(0x01);v=0;break;                //"  "

  case 0xb7:ZZ(0x02);v=0;break;                //"  "

  case 0xd7:ZZ(0x03);v=0;break;                //"  "

  case 0xe7:ZZ(0x04);v=0;break;                //"  "

  case 0x7b:ZZ(0x05);v=0;break;                //"  "

  case 0xbb:ZZ(0x06);v=0;break;                //"  "

  case 0xdb:ZZ(0x07);v=0;break;                //"  "

  case 0xeb:ZZ(0x08);v=0;break;                //"  "

  case 0x7d:ZZ(0x09);v=0;break;                //"  "

  case 0xbd:ZZ(0x10);v=0;break;                //"  "

  case 0xdd:ZZ(0x11);v=0;break;                //"  "

  case 0xed:ZZ(0x12);v=0;break;                //"  "

  case 0x7e:ZZ(0x13);v=0;break;                //"  "

  case 0xbe:ZZ(0x14);v=0;break;                //"  "

  case 0xde:ZZ(0x15);v=0;break;                //"  "

  case 0xee:ZZ(0x16);v=0;break;                //"  "

  default:v=0;

}

}

/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

函数功能:发送主程序

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void ZZ(uchar x)

{

  TT0(1,m9);                   //高电平9mS

  TT0(0,m4_5);               //低电平4.5mS


  /*┈ 发送4帧数据 ┈*/

  Z0(SBM);                                                                                                                                       

  Z0(~SBM);

  Z0(x);

  Z0(~x);


  /*┈┈ 结束码 ┈┈*/

  TT0(1,m_65);

  TT0(0,m40);


  /*┈┈ 重复码 ┈┈*/

  while(KEY())

   {

        TT0(1,m9);

        TT0(0,m2_25);


        TT0(1,m_56);

        TT0(0,m40);

                TT0(0,m56);

               

                LED = !LED;                  //指示灯                                          

    }


   LED = 1;                    


}

/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

函数功能:单帧发送程序

入口参数:1帧数据

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void Z0(uchar temp)

{

  uchar v;

  for (v=0;v<8;v++)                     //循环8次移位

       {     

                 TT0(1,m_65);                        //高电平0.65mS         

                         if(temp&0x01) TT0(0,m1_6); //发送最低位

                         else          TT0(0,m_56);     

                         temp >>= 1;                //右移一位

        }   

}


/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

函数功能:38KHz脉冲发射 + 延时程序

入口参数:(是否发射脉冲,延时约 x (uS))

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void TT0(bit BT,uint x)

{

  TH0 = x>>8;                    //输入T0初始值

  TL0 = x;

  TF0=0;                                //清0

  TR0=1;                                //启动定时器0

  if(BT == 0) while(!TF0);        //BT=0时不发射38KHz脉冲只延时;BT=1发射38KHz脉冲且延时;

  else while(1)                            //38KHz脉冲,占空比5:26

         {

                  IR = 0;

                  if(TF0)break;

               if(TF0)break;

                  IR = 1;

                if(TF0)break;

                 if(TF0)break;

……………………


推荐阅读

史海拾趣

Fischer Connectors公司的发展小趣事

Fischer Connectors公司在电子行业中的五个发展故事

故事一:创立与初期发展

Fischer Connectors的故事始于1954年,由真空技术专家Walter Werner Fischer在瑞士沃州的莫尔日创立。他凭借对技术的热爱和执着,开发出了世界上第一个高品质密封连接器,专为工业应用而设计。这一创新产品迅速赢得了市场的认可,为公司的发展奠定了坚实的基础。在随后的几年里,Fischer Connectors不断优化产品,并于1962年注册了推拉锁定系统的国际专利,进一步巩固了其在连接器行业的领先地位。

故事二:全球扩张与国际合作

随着业务的不断增长,Fischer Connectors开始积极寻求全球扩张的机会。1988年,公司在英国成立了第一家子公司,标志着其国际商业活动的正式开始。此后,Fischer Connectors相继在欧洲的德国、意大利、法国以及美国等地开设了子公司,形成了全球性的生产和服务网络。这些子公司不仅为当地市场提供了高质量的连接器产品,还促进了Fischer Connectors在全球范围内的技术创新和市场拓展。

故事三:技术创新与产品线扩展

Fischer Connectors始终将技术创新作为企业发展的核心驱动力。进入21世纪后,公司推出了一系列具有创新性的连接器产品,如Fischer Core系列塑料连接器、AluLite™超轻铝连接器以及Fischer UltiMate™系列超坚固连接器等。这些产品不仅满足了不同行业对连接器性能的多样化需求,还推动了整个电子行业的技术进步。同时,Fischer Connectors还不断扩展其产品线,涵盖了多极低电压连接器、同轴高电压连接器等多个领域,进一步巩固了其在连接器市场的领先地位。

故事四:应对行业挑战与定制化解决方案

随着电子行业的快速发展,连接器和线缆系统的应用环境越来越复杂多样。Fischer Connectors凭借其在技术、质量和服务方面的优势,积极应对行业挑战,为客户提供定制化的解决方案。公司拥有一支专业的研发团队和客户服务团队,能够深入了解客户的实际需求,量身定制出最适合客户应用方案的连接器与线缆系统。这种以客户为中心的服务理念赢得了广大客户的信赖和支持。

故事五:数字化转型与可持续发展

近年来,Fischer Connectors积极响应数字化转型的浪潮,利用先进的技术手段提升生产效率和产品质量。公司投入大量资源建设智能化生产线和数字化管理系统,实现了从原材料采购、生产加工到成品出库的全流程信息化管理。同时,Fischer Connectors还注重可持续发展,致力于开发环保型连接器和线缆系统,减少对环境的影响。这些努力不仅提升了公司的竞争力,还为公司赢得了更多的社会认可和赞誉。

Dialog公司的发展小趣事

近年来,Dialog公司通过一系列收购活动实现了快速扩张。例如,Dialog公司收购了Adesto公司,进一步拓展了工业物联网市场。这次收购为Dialog公司带来了一系列新的智能楼宇自动化工业解决方案,为其现有的制造自动化产品提供了非常好的补充。此外,收购Adesto还为Dialog公司带来了近5,000家客户公司,这些公司中大部分对Dialog公司来说是新客户。

EXXELIA Group公司的发展小趣事

到了1981年,Dialog公司从洛克希德导弹航空公司中独立出来,成为了一个子公司,并开始独立经营。在独立发展的初期,Dialog公司继续专注于通信技术的研发,并逐渐将业务范围拓展到了个人便携式应用、低功耗短程无线应用以及LED固态照明、显示和汽车应用等领域。

AVX公司的发展小趣事

近年来,AVX在汽车领域的应用也取得了显著进展。随着汽车行业的快速发展,对电子元件的需求也日益增长。AVX凭借其卓越的技术和品质,成功为汽车安全性、发动机控制、信息娱乐和底盘控制技术的开发提供了关键支持。AVX的产品广泛应用于各类汽车中,为提升汽车性能和安全性做出了积极贡献。

以上五个故事展示了AVX公司在电子行业中的发展历程和取得的成就。从创立初期到如今的全球化布局,AVX始终坚持以技术创新和市场拓展为核心,不断推动公司的发展。同时,AVX也积极关注可持续发展和绿色技术,为行业的进步做出了积极贡献。

Fujisoku Corporation公司的发展小趣事

在电子行业的早期,一家名为“未来电子”的公司(虚构名称,代指类似Fujisoku Corporation的企业)通过自主研发,成功突破了半导体材料的瓶颈,开发出了一种新型的高效能硅基材料。这一创新不仅大幅提升了芯片的性能和稳定性,还降低了生产成本,使“未来电子”迅速在半导体市场崭露头角。公司凭借这一技术优势,不断推出具有竞争力的电子产品,逐步建立起行业领先地位。

ELMOS公司的发展小趣事

1999年,宝马拥有ELMOS公司股份,为ELMOS参与汽车电子化提供了难得的机遇。自此,ELMOS与宝马建立了紧密的合作关系。通过与宝马的深入合作,ELMOS不仅获得了更多的技术支持和市场资源,还积累了丰富的行业经验。这种紧密的合作关系使得ELMOS在汽车电子领域取得了显著的进展,进一步巩固了其在行业中的领先地位。

问答坊 | AI 解惑

UCOS II的电子书

这本书讲的蛮好的,推荐给大家…

查看全部问答>

全球10大半导体厂商排名及简介

全球10大半导体厂商排名: 1.英特尔(Intel) 2.三星(Samsung) 3.德州仪器(TI) 4.东芝(Toshiba) 5.台积电(TSMC) 6.意法半导体会(ST) 7.瑞萨科技(Renesas) 8.海力士(Hynix) 9.索尼(Sony) 10.高通(Qualcomm) 1.美国英特尔(Intel)公司,以 ...…

查看全部问答>

高手来看下E题啊

E题该怎么做啊,高手来救下我们啊…

查看全部问答>

DC-DC电路PCB设计要求

DC-DC电路PCB设计要求:          在设计印刷线路板时,设计工程师都会仔细思考铜线的走线方式和元器件的放置问题。如果没有充分考虑这两点,印刷线路板的效率、最大输出电流、输出纹波及其它特性都将会受到影响。 ...…

查看全部问答>

VS2005开发的程序在wince5.0上不能直接运行,需要什么DLL?

我使用c#,写了一段代码,在wince上运行,发现一个问题,就是生成的EXE不可以在wince上直接运行,必须在使用VS开发环境来运行(只要使用开发环境运行一次,后面几次就可以直接运行我的EXE了),我觉得是VS在下载EXE的同时也在wince上安装了所需要的 ...…

查看全部问答>

WinCE6.0下VGA闪烁的问题! 散分!!

我在S3C6410上做VGA,同样一款显示器,如果分辨率为800x600显示非常正常; 如果我把分辨率改为1024x768时,就有问题。问题如下:     右键刷新时,屏幕会黑下屏,黑1秒左右又正常;     放视频或电影时,每当切换画面比较大 ...…

查看全部问答>

汉王手写输入法 无法正常隐藏

如题,我加载了汉王手写输入法到系统中,能正常手写,识别效果也还满意。 但是当用触笔点击任务栏上的隐藏按钮的时候,它一直以为我是在写字,要很长时间才可以 隐藏。 同样的程序同事在他的目标机上很正常,不知道我的是怎么了。。。 是不是屏 ...…

查看全部问答>

Sql Server Ce 数据库 自定义表问题

请高手指点,企图自己创建一个新的数据库,并输入要创建的表名,但是以出入的名字做表名时出错。 代码如下:               SqlCeEngine Engine = new SqlCeEngine(\"DataSource = \\\\\" + t ...…

查看全部问答>

(高价)(高价)(高价)诚激高手开发:sock5全自动代理自助管理系统,有技术者加QQ详谈,99040008

(高价)(高价)(高价)诚激高手开发:sock5全自动代理自助管理系统,有技术者加QQ详谈,99040008…

查看全部问答>

怎样测试IDE的debugger?

C语言的编译器带有的debugger,如何对它进行测试呢?测试debugger的行为时,因为test case的不同会有很大差异,包括各寄存器的值都会发生变化。 请问有经验的前辈如何测试的?谢谢咯…

查看全部问答>