历史上的今天
返回首页

历史上的今天

今天是:2025年03月23日(星期日)

正在发生

2021年03月23日 | 51单片机综合学习系统演示程序 - 红外遥控器键

2021-03-23 来源:eefocus

简介:51单片机综合学习系统演示程序 - 红外遥控器键



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


#include

#include


sbitIRIN = P3 ^ 2; //红外接收器数据线

sbit BEEP = P3 ^ 7; //蜂鸣器驱动线

sbit RELAY = P1 ^ 3; //继电器驱动线


unsigned char IRCOM[] =

{

0x00, 0x00, 0x00, 0x00, 0x10, 0x10

};


unsigned char code table[] =

{

0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,//0,1,2,3,4,5,6,7

0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf //8,9,A,B,C,D,E,F,-

};


char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节


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


ms延时子函数


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

void delayms(unsigned int ms)

{

unsigned char k;

while (ms--)

{

for (k = 0; k < 114; k++)

;

}

}


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


us延时子函数


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

void delay(unsigned char x) //x*0.14MS

{

unsigned char i;

while (x--)

{

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

;

}

}


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


蜂鸣器驱动子函数


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

void beep()

{

unsigned char i;

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

{

BEEP = !BEEP; //BEEP取反

delay(6);

}

BEEP = 1; //关闭蜂鸣器

}


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


显示函数


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

void play()

{

P0 = (table[IRCOM[4]]); //个位

P2 = 0xfe;

delayms(1);

P0 = (table[IRCOM[5]]); //十位

P2 = 0xfd;

delayms(1);

P2 = 0xff; //关闭显示

delayms(1);

}


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


主函数


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

void main(void)

{

P0 = 0xff; //I/O口初始化

P2 = 0xff;

IRIN = 1;

BEEP = 1;

RELAY = 1;


IE = 0x81; //允许总中断中断,使能 INT0 外部中断

TCON = 0x01; //触发方式为脉冲负边沿触发


play();


while (1)

{

if (IRCOM[2] == 0x1d)

//UP键

RELAY = 0;

//继电器吸合

if (IRCOM[2] == 0x12)

//DOWN键

RELAY = 1;

//继电器关闭


play(); //显示

}

}


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


INT0 中断服务子函数


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

void IR_IN()interrupt 0

{

unsigned char j, k, Num = 0;


EX0 = 0; //关闭INT0中断

delay(15); //延时

if (IRIN == 1)

//再确认IR信号是否出现

{

EX0 = 1; //开INT0中断

return ; //退出

}


while (!IRIN)

//等IR变为高电平,跳过9ms的前导低电平信号。

{

delay(1);

}


while (IRIN)

//等IR变为低电平,跳过4.5ms的前导高电平信号。

{

delay(1);

}


for (j = 0; j < 4; j++)

//收集四组数据

{

for (k = 0; k < 8; k++)

//每组数据有8位

{

while (IRIN)

//等 IR 变为低电平

{

delay(1);

}

while (!IRIN)

//等 IR 变为高电平

{

delay(1);

}

while (IRIN)

//计算IR高电平时长

{

delay(1);

Num++;

if (Num >= 15)

{

EX0 = 1; //0.14ms计数过长自动离开。

return ;

}

} //高电平计数完毕

IRCOM[j] = IRCOM[j] >> 1; //数据最高位补“0”

if (Num >= 8)

IRCOM[j] = IRCOM[j] | 0x80;

//数据最高位补“1”

Num = 0;

} //end for k

} //end for j


if (IRCOM[0] != 0x00)

//比较用户码

{

EX0 = 1; //开INT0中断

return ; //退出

}

if (IRCOM[2] != ~IRCOM[3])

//接收数据是否正确

{

EX0 = 1; //开INT0中断

return ; //退出

}


IRCOM[4] = IRCOM[2] &0x0F; //取键码的低四位

IRCOM[5] = IRCOM[2] >> 4; //右移4次,高四位变为低四位


play(); //显示键码

beep(); //蜂鸣器响一声

EX0 = 1; //重新开INT0中断

}


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

;================================


;6121码 遥控器(晶控电子)


;******红外遥控器键值表******


00 01 02 03

04 05 06 07

08 09 0A 0B

0C 0D 0E 0F

10 11 12 13

14 15 16 17

18 19 1A 1B


;================================


IRCOM[0] --- 存放用户码 00H

IRCOM[1] --- 存放用户反码ffH

IRCOM[2] --- 存放数据码

IRCOM[3] --- 存放数据反码


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


推荐阅读

史海拾趣

Advanced Monolythic Ceramics公司的发展小趣事

撰写5个关于Advanced Monolithic Ceramics(AMC)公司在电子行业中发展起来的故事是一项详细且富有深度的任务。考虑到每个故事都需要保持500字以上且只描述事实,我将先提供一个故事的示例,以确保其符合您的要求。如果您对这个示例感到满意,我可以继续撰写其余的故事。


AMC公司的第一个里程碑:创新技术的诞生

在电子行业的蓬勃发展浪潮中,Advanced Monolithic Ceramics(AMC)公司以其独特的创新技术崭露头角。公司自创立之初,便专注于研发高性能的单片陶瓷材料,这种材料在电子元件中展现出优异的绝缘性、耐高温性和机械强度。

AMC公司的研发团队经过数年的不懈努力,成功开发出一种新型陶瓷材料,其性能远超当时市场上的同类产品。这一技术的诞生,不仅为AMC公司赢得了业界的广泛认可,也为其在电子行业中奠定了坚实的基础。

随着新型陶瓷材料的推出,AMC公司开始与各大电子制造商建立合作关系,将其产品应用于各类高端电子设备中。这些设备包括高性能计算机、通信设备以及精密仪器等,AMC的陶瓷材料在其中发挥着至关重要的作用。

随着市场需求的不断增长,AMC公司逐渐扩大了生产规模,并加强了与上下游企业的合作。同时,公司还不断投入研发资金,推出更多创新产品,以满足不断变化的市场需求。

如今,AMC公司已成为电子行业中的佼佼者,其单片陶瓷材料在市场上享有极高的声誉。而这一切的成就,都离不开公司创始人及团队的创新精神和不懈努力。


若您对这个故事示例感到满意,请告知我,我将继续撰写其余的故事。每个故事都将围绕AMC公司在电子行业中的不同发展阶段、技术突破、市场扩张等方面展开,确保内容丰富且符合您的要求。

Allegro公司的发展小趣事

Allegro Microsystems, Inc.是一家专注于开发、制造和销售磁性、混合和传感器集成电路的公司。以下是关于Allegro公司发展的五个相关故事:

  1. 创立与早期发展: Allegro公司成立于1967年,最初名为RMS Electronics。该公司最初专注于生产磁性元件和感应器,以满足汽车和工业市场的需求。随着时间的推移,Allegro迅速发展,并在磁性传感器技术领域取得了重要进展。

  2. 成为行业领导者: 在20世纪90年代,Allegro开始将重点转向混合集成电路的开发,这进一步加强了公司在汽车电子和工业自动化市场的地位。Allegro通过不断创新和技术投资,逐渐成为全球领先的磁性传感器和混合集成电路制造商之一。

  3. 技术创新与专利保护: Allegro公司在磁性传感器和混合集成电路领域积累了丰富的专利技术。该公司不断进行研发和技术创新,推出了许多行业领先的产品,如电流传感器、霍尔效应传感器等。Allegro不仅积极保护自己的知识产权,还与其他公司合作,共同推动技术的进步。

  4. 全球化发展: 随着全球汽车和工业市场的不断发展,Allegro公司积极拓展国际业务,并在全球范围内建立了广泛的销售网络和生产基地。公司在美国、欧洲和亚洲设有多个研发中心和制造工厂,以满足不同地区客户的需求。

  5. 可持续发展与未来展望: Allegro公司致力于可持续发展和社会责任,采取了多项措施来减少对环境的影响,如提高能源效率、减少废物排放等。未来,Allegro将继续投入研发和创新,推出更多高性能、低功耗的产品,以满足不断增长的市场需求,并在全球范围内维持其领先地位。

Bkc Semiconductors Inc公司的发展小趣事

Bkc深知人才是企业发展的核心动力。因此,公司高度重视研发团队的建设和人才培养。通过引进业内顶尖的技术人才和提供完善的培训机制,Bkc逐渐打造出一支技术实力雄厚的研发团队。这支团队不仅为公司带来了源源不断的技术创新,也为公司的长远发展奠定了坚实的基础。

Advanced Linear Devices公司的发展小趣事

Bkc Semiconductors Inc最初是一家专注于半导体技术研发的小型创业公司。在公司成立的初期,团队通过不懈的努力,成功研发出了一款具有高性价比的功率半导体芯片,该芯片在能效和稳定性上均达到了行业领先水平。这一技术突破使得Bkc的产品迅速获得了市场的认可,公司开始逐渐在电子行业中崭露头角。

Gore公司的发展小趣事
在隔离型中压大容量直流变换器中,可能存在直流偏磁问题,导致变压器磁路饱和、励磁电流增加、局部过热和噪声增大等问题。
Epistar Corp公司的发展小趣事

作为一家电子产品制造企业,Epistar始终关注环保和可持续发展问题。公司积极采用环保材料和生产工艺减少污染排放和能源消耗;同时,Epistar还加强了对废旧产品的回收和处理工作以减少对环境的负面影响。这些努力不仅提升了公司的社会形象也增强了公司的市场竞争力。

问答坊 | AI 解惑

16舵机双足机器人-----全资料奉上!

本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 来源:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3648721&bbs_page_no=1&bbs_id=9999 暑假学校里做机器人比赛,就是做出一个人型机器人来互相对打,要求无线控制的。 我因为去年做过这个 ...…

查看全部问答>

DIY微功耗基础无线网络

DIY微功耗基础无线网络…

查看全部问答>

直流接触器和交流接触器的区别?

应用场合不同,选择交流或直流取决于线圈,直流接触器的线圈只能通直流,交流接触器的线圈只能通交流工作。一般来说,在交流回路当中,主回路用的交流,辅助助回路一般都是从主回路上取电做控制回路,那么控制回路显然也是交流的,那么就要用交流接 ...…

查看全部问答>

PB5编写FLASH驱动

小弟刚上手驱动开发不久,现在用PB5.0做驱动。 现在是想按扇区读写全部的flash rom,我知道PB中有FMD_WriteSector等函数可以读写扇区,但不知道如何调用? 另外我还想问一下,用PB FOR CE5.0写的驱动能在windows mobile 上面用吗? 谢谢各位高手…

查看全部问答>

在这里居然看到母校的技术交流贴

在这里居然看到母校的技术交流贴,热泪盈眶 老泪纵横!…

查看全部问答>

用过AT24C02的高手请指教!

#include <STM8S105C_S.h> #define uchar unsigned char #define uint unsigned int #define data_out PB_DDR|=0X04; #define data_in PB_DDR&=~0X04; #define scl_H PB_ODR|=0X02; #define scl_L PB_ODR&=~0X02; #define sda_ ...…

查看全部问答>

【求助】换了片子,烧写不成,是什么问题?急!!!

用f123做了个电路板,用的是前2年的片子,烧写调试成功,偶然间不小心烧了片子,换了新的(刚买的),然后就提示60错误,找不到设备,请教斑竹为什么?头都大了,电路没问题的,用的是同样的电路板(同一批做的),元件也一样,是什么问题啊? 1。 ...…

查看全部问答>

【求助】【讨论】关于用149做交流电流0-5mA得采样电路问题

互感器输出为交流0-5mA,用149采样确定电流值!!!! 请高手指点!!!!…

查看全部问答>

请问大家IAR和CCS哪个用的人数多?

新手问一下,IAR和CCS哪个用的人数多,哪个更好用一点?你们更喜欢哪一个?…

查看全部问答>

lowlevel_init.S的system_clock_init函数放到C语言下面实现——更好处理

在uboot原来的代码里,有系统时钟的初始化函数,在board/samsung/smdkv210/lowlevel_init.S的system_clock_init函数,我大概看了一下,寄存器不一样,而且是汇编写的,所以我就改成用c语言来实现,在BL1阶段初始化一下,BL2阶段就不用重新初始化了 ...…

查看全部问答>