历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2018年01月06日 | 多机红外通信发送端程序

2018-01-06 来源:eefocus

多机红外通信发送端程序

#include "reg932.h" 
#define    uchar    unsigned char 

sbit    KEY1=P0^0;                    //定义KEY1


sbit    KEY2=P0^1;                    //定义KEY2 
                     
sbit    Infr=P0^3;                    //定义红外输出端口 
//-------------------------------------- 
void    CCU_Init();                    //CCU初始化 
void    KeyISR_Init();                //键盘中断初始化 
void    ReadKey();                    //判断按键 
void    Power_Down();                //完全掉电 

void    StartDevICe01();            //启动设备1(灯) 
void    StartDevice02();            //启动设备2(门/窗) 
void    SendHead();                    //发送帧头 
void    SendData(uchar Data);        //发送数据 

void    delay400us();                //延时400us 
void    delayms(uchar i);            //ms级延时 
//-------------------------------------- 
void    KEY_ISR() interrupt    7{ 
    EA=0;                            //关中断 
     
    PCONA=0x00;                        //功能模块上电 
    CCU_Init();                        //CCU模块初始化 

    delayms(10);                    //延时10ms 
    ReadKey();                        //判断按键 

    KBCON=0x00;                        //清键盘中断标志 
    delayms(50);                    //延时50ms 
    EA=1;                            //开中断 


//-------------------------------------- 
main() 

    P0M1=0x00;                        //设置P0口为准双向 
    P0M2=0x00; 
    P2M1=0x40;                        //设置P26为开漏                         
    P2M2=0x40; 
    CCU_Init();                        //CCU初始化 
    KeyISR_Init();                    //键盘初始化 
    while(1) 
    { 
        Power_Down();                //完全掉电 
    } 

//-------------------------------------- 
//功能:进入掉电模式 
//-------------------------------------- 
void    Power_Down() 

    PCONA=0xFF;                        //外部功能模块掉电 
    PCON=0x03;                        //进入掉电模式 

//------------------------------------------------------------- 
//功能:    CCU模块初始化,使OCA(P2.7)输出38KHz,50%占空比的PWM波, 
//使用内部RC振荡器时:CCU频率=((7375000/2)/6)*32=9.833MHz 
//定时器重装值=CCU频率/红外线载频=9833333/38000=258.772=0x102 
//------------------------------------------------------------- 
void    CCU_Init() 


    TOR2H=0x02;                     //定时器重装值 
    TOR2L=0x05; 
    OCRAH=0x01;                     //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50% 
    OCRAL=0x02; 
    TCR21=0x85;                     //PLL预分频为5+1 
    CCCRA=1;                        //非反相的PWM在比较匹配时置位,在CCU定时器向下溢出时清0 

    PLLEN=1;                        // 启动 PLL 
    OCA=1; 
    while(PLLEN==0); 
    TCR20=0x82;                        // 设置输出模式,非反相PWM 


//-------------------------------------- 
//功能:键盘中断初始化 
//-------------------------------------- 
void    KeyISR_Init() 

    KBMASK=0x03;                    //设置P01->P00为中断源 
    KBCON=0x00;                        //清除键盘中断标志 
    EKBI=1;                            //键盘中断允许 
    EA=1;                            //开中断 

//-------------------------------------- 
//功能:键盘判断 
//-------------------------------------- 
void ReadKey() 
{     
    delayms(12);                    //延时去抖动 

    if(KEY1==0)                        //等待KEY1按下 
    { 
        while(KEY1==0);                //等待KEY1为1 
        StartDevice01();            //启动设备1(灯) 
    } 
    else if(KEY2==0)                //等待KEY2按下 
    { 
        while(KEY2==0);                //等待KEY2为1 
        StartDevice02();            //启动设备2(门/窗) 
    } 


//-------------------------------------- 
//功能:启动设备1(门/窗)     
//-------------------------------------- 
void StartDevice01()                 

    SendHead();                        //发送帧头 
    SendData(1);                    //发送数据“1”, 

//-------------------------------------- 
//功能:启动设备2(门/窗) 
//-------------------------------------- 
void StartDevice02() 

    SendHead();                        //发送帧头 
    SendData(2);                    //发送数据“2”, 

//-------------------------------------- 
//功能:发送帧头 
//-------------------------------------- 
void SendHead() 

    Infr=0;                            //将Infr拉为低电平 
    delayms(50); 
    Infr=1;                            //将Infr拉为高电平 
    delayms(10); 

    Infr=0;                            //将Infr拉为低电平 
    delayms(1); 
    Infr=1;                            //将Infr拉为高电平 
    delayms(1); 
    Infr=0;                            //将Infr拉为低电平 
    delayms(1); 

//-------------------------------------- 
//功能:发送数据,从高位到低位依次发送8个位 
//入口参数:要发送的数据 
//-------------------------------------- 
void SendData(uchar  Data) 

    uchar    Temp; 
    uchar    i=8; 
    while(i>0) 
    { 
        Temp=Data&0x80;                //取欲发送数的最高位 
        if(Temp==0x80)                //对最高位进行判断. 
        {     
            Infr=1;                    //为1则将Infr拉高 
        } 
        else 
        { 
            Infr=0;                    //为0,则将Infr拉低 
        } 
         
        i--; 
        Data=Data<<1;                //循环移位 
        delay400us();                //延时 
    } 

//-------------------------------------- 
//在内部RC作用的情况下,延时1000.9us 
//-------------------------------------- 
void    delayms(uchar i) 

    int    j; 
    while(i>0) 
    { 
        for(j=0;j<670;j++); 
        i--; 
    } 

//--------------------------------------- 
//在内部RC作用的情况下,延时 401us; 
//--------------------------------------- 
void    delay400us() 

    int    i; 
    for(i=0;i<283;i++); 
}//--------------------------------------- 


推荐阅读

史海拾趣

Hi-G Relays公司的发展小趣事

机顶盒,这一在现代家庭娱乐中扮演重要角色的设备,全称为数字视频变换盒,俗称“机顶盒”或“机上盒”。其专业性体现在作为连接电视与外部信号源的桥梁,能够接收并转换多种来源的数字电视信号,如有线电缆、卫星天线、宽带网络及地面广播,使之在电视机上得以播放。同时,机顶盒还具备强大的解码能力,能将复杂的数字信号转换成电视可识别的视频和音频流,确保用户享受到高清乃至超高清的视觉盛宴。

科普性方面,机顶盒不仅让传统模拟电视机焕发新生,通过数模转换技术,让观众能够观看到数字电视节目,更通过其丰富的增值服务,如电子节目指南、因特网网页浏览等,极大地丰富了电视观看体验。此外,机顶盒还具备网络交互功能,用户可通过其连接到互联网,享受在线购物、观看网络视频、玩游戏等多元化活动,使电视机从单向接收信息的设备转变为智能互动终端。

随着技术的不断进步,机顶盒的功能和应用场景也在不断扩展。从基本的电视观看,到家庭影院般的视听享受,再到智能语音控制、个性化节目推荐等智能化服务,机顶盒正逐步成为现代家庭娱乐不可或缺的一部分。未来,随着高清、超高清技术的普及以及人工智能、云计算等技术的应用,机顶盒将向更加智能化、多功能化的方向发展,为用户带来更加便捷、丰富的娱乐体验。

Aptiv公司的发展小趣事

随着数字化时代的到来,Aptiv积极拥抱数字化转型,通过引入先进的信息技术和管理系统,提升了企业的运营效率和市场竞争力。例如,公司向汽车行业某公司发出EDI对接邀请,计划通过EDI系统实现双方的数据共享和业务协同,从而提高了工作效率和下单准确性。这种数字化转型不仅有助于Aptiv在激烈的市场竞争中保持领先地位,还为整个电子行业的数字化转型提供了有益的借鉴和参考。

这五个故事展示了Aptiv公司在电子行业中的发展历程和成就,从技术创新到全球布局、创新合作、社会责任以及数字化转型等方面,都体现了公司的实力和担当。Aptiv以其卓越的技术实力和市场表现,成为了电子行业中一颗璀璨的明星。

敦泰(FOCALTECH)公司的发展小趣事
调节冰箱温度时,应根据季节和存放食物的需求进行调整。一般来说,冷藏室的温度应设置在2-8℃之间,冷冻室的温度应设置在-18℃以下。可以通过冰箱上的温度调节按钮或触摸屏进行设置。同时,注意避免将温度设置过低或过高,以免影响食物的保鲜效果和冰箱的能耗。
EVER-WAY公司的发展小趣事

作为一家有社会责任感的企业,EVER-WAY公司始终关注环境保护和社会公益事业。公司积极推行绿色生产理念,采用环保材料和节能技术,减少生产过程中的污染和能耗。同时,公司还积极参与社会公益活动,捐款捐物支持灾区重建、教育扶贫等事业。这些社会责任的担当不仅体现了公司的良好形象,也为公司赢得了社会的广泛赞誉和尊重。

E-Switch公司的发展小趣事

在电子行业中,技术创新是企业保持竞争力的关键。E-Switch公司深知这一点,因此不断投入研发力量,寻求技术突破。近年来,公司在开关产品的智能化、小型化、高可靠性等方面取得了显著成果,多项技术处于行业领先地位。这些技术突破不仅提升了产品的性能,也进一步巩固了E-Switch在电子行业中的领先地位。

安森德(Ascend)公司的发展小趣事

安森德公司自创立之初,便以技术创新为核心竞争力。在半导体工艺领域,公司研发团队不断攻坚克难,成功研发出具有自主知识产权的超结MOSFET技术。这一技术的导通损耗和开关损耗均达到行业领先水平,为电源设备带来了更高的效率和更低的能源消耗。凭借这一技术突破,安森德的产品迅速在市场上获得认可,为公司的快速发展奠定了坚实基础。

问答坊 | AI 解惑

航空蓄电池野外充放电车的设计与研制

摘要:航空蓄电池野外充放电车的设计与研制,采用电子集成化模块和开发电源技术,使航空蓄电池野外充放电车的功率大、体积小、稳态精度高。通过在航空兵部队的使用,证明移动式综合充放电设备具重要的经济和军事效益。     关键词: ...…

查看全部问答>

MCS-51单片机温度控制系统

本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 MCS-51单片机温度控制系统  …

查看全部问答>

更快进行原型开发的八个技术考虑

转自:NI 概览 为您下一个嵌入式项目或想法创建功能原型系统是得到预算和从高层管理获得批准的重要步骤。在开始原型开发之前,考虑一下您所有需要的工具。另一个需要记住的重要原则是原型开发应该足够快速,不应该在原型系统上花费过多的时间,投 ...…

查看全部问答>

DC-DC buck降压不稳定请教

设计了一个5.0V输入,可调输出buck电路,1.5M固定频率但是在较大电流输出,并直接开关电源的时候,时不时出现不稳定情况不稳定时前几个占空比很大,直至输出电压过高仿真上非常稳定,PM也足够这可能是什么原因造成的?请教各位!…

查看全部问答>

具备图形加速能力的嵌入式应用系统

具备图形加速能力的嵌入式应用系统…

查看全部问答>

在vxWorks系统中如何使用打印机打印

在一个VxWorks操作系统中,如何通过网络驱动网络打印机(如HP LaserJet 5200网络激光打印机)打一份文本文件。 大家可以给出一些启发性的意见。…

查看全部问答>

硬盘分区

硬盘分区问题 我现在的分区不合理 我想重新分 比如我现在的F盘有三十G、 我想再为它加5G 我已经把这个盘中的所有数据转出来了 我加后会不会影响其它盘的数据? 就是把其它盘的数据搞丢? …

查看全部问答>

LPC1343擦除flash问题

烧写了一个程序,JTAG口被禁了,擦除不了,用flash magic也不行。请高手帮忙…

查看全部问答>

【求助】外接4M晶振不起振

我用的是MSP1121的,在XIN和XOUT两端接一个4M晶振。如下设置后,但是就是不起振。 不知道是什么原因? BCSCTL1 |= XTS; // ACLK= LFXT1= 高频晶体振荡器 do { IFG1 &= ~OFI ...…

查看全部问答>