别人编码的一个空调红外编码程序

合集下载

红外编码——精选推荐

红外编码——精选推荐

红外编码格式

最近在研究的在S3C6410的上的IRM3638 红外接收器件。发现其中红外编码采用PT2222编码,进一步研究发现,红外编码是有好几种编码.特的将编码格式取出来放在这里.

一.TC9028、TC9012、TC9243 编码方式

TC9028、TC9012和TC9243这三者的编码方式是完全一致的,该码型的一帧数据中含有32 位,

即8 位用户编码,8 位用户编码的重复码,8 位键数据编码(D0~D7)以及他的反码。用户码和键

数据码的发送均是低位在前,高位在后。

如上图1 所示:一帧完整的发射码有引导码、用户编码和键数据码三部分组成。引导码由一个 4.5ms

高电平脉冲及4.5ms 的低电平脉冲组成;八位用户编码,被连续发送两次:八位的键数据码也被连续

发送两次,第一次发送的是键数据码的原码,第二次发送的是键数据码的反码。―1‖和―0‖的区

分取决于脉冲之间的时间,称之为脉冲位置调制方式(PPM)。波形如图4。

当SEL接DRV0 脚时,选中的8 位用户编码为(C7-C0:00001110(0EH)),该码型的输出波形

如图2所示,重复码波形如图 3所示,―1‖和―0‖的波形如图4所示,载波波形如图5所示:

―1‖和―0‖的区分取决与脉冲之间的时间,称之为脉冲位置调制方式(PPM),如图4所示。

发射端输出高电平时按图5的载波波形发送:频率:38KHz;占空比:1/3。

2、UPD6122 和PT2222 编码方式:

PT2222与upd6122 的编码方式完全一致,该码型所发射的一帧码含有一个引导码,8 位的用户

格力空调遥控器红外编码

格力空调遥控器红外编码

格力空调遥控器红外编码

一、基本格式

起始码(S)+35位数据码+连接码(C)+32位数据码二、电平规范

起始码:9000us低电平+4500us高电平

连接码:600us低电平+20000us高电平

数据0:600us低电平+600us高电平

3.3其他定义

需要注意的是,所有数据都按照逆序方式递增。

模式字段定义

表三模式字段定义

仅供个人学习参考

四、校验计算

校验码=【(模式-1)取四位二进制逆序+(温度-16)+2+左右扫风+换气+节能】取二进制后四位的逆序。

仅供个人学习参考

万能遥控器代码表

万能遥控器代码表

万能遥控器代码表

简介

万能遥控器是一种可以通过编程方式控制各种设备的遥控器。它通过发送特定的红外信号来模拟不同设备的遥控指令,从而实现对这些设备进行控制。为了方便用户使用万能遥控器,我们提供了一份代码表,其中包含了各种常见设备的代码。

使用方法

在使用万能遥控器编程时,您需要指定设备的代码。代码

表中的每个设备都有一个对应的代码,您只需将该代码发送给万能遥控器,即可实现对该设备的控制。下面是如何使用代码表的步骤:

1.找到您要控制的设备的品牌和型号。

2.在代码表中找到与该设备对应的代码。

3.使用编程工具将该代码发送给万能遥控器。

现在,让我们看一下代码表的内容。

1

代码表

设备品牌设备型号代码电视LG1001电视Samsung1002电视Sony1003 DVD播放器Philips2001 DVD播放器Panasonic2002 DVD播放器Sony2003空调Gree3001

空调Haier3002

空调Midea3003

请注意,以上仅为代码表的示例,实际代码表将包含更多设备和对应的代码。

注意事项

在使用代码表时,请注意以下事项:

•确保您使用的万能遥控器支持代码表中列出的设备品牌和型号。

•在发送代码之前,先确认您的设备与遥控器之间的红外通信是否已建立。

•如果无法找到您设备的品牌和型号,请查阅设备的说明书或与制造商联系,以获取正确的代码信息。

3

结论

代码表是使用万能遥控器进行设备编程的重要参考文件。通过查阅代码表,用户可以轻松地找到并使用正确的代码来实现对各种设备的控制。希望本文的代码表对您有所帮助,祝您使用万能遥控器愉快!

红外解码程序详解

红外解码程序详解

红外遥控解码程序设计

——————基于uPD6121红外编码制式

红外传感系统是目前应用最为广泛的遥控系统,一个红外遥控系统可分为发射和接收两部分组成,发射端称之为红外遥控器,一般由矩阵键盘,红外编码调制芯片和红外发射管组成;接收端用一体化红外接收头即可,这个东东内置光电放大器和解调部分,信号接收之后一般很微弱须放大后才可解码,为有效发射出去得先托付在载波上所以需经历调制、解调的过程,其实对于发射部分主要工作在于编码,而对于编码方式只有几种主流方式,而目前国内大部分均为uPD6121编码方式(日本NEC公司搞出来的。。),所以我们只须弄清楚这种编码的时序,即可写出万能的红外解码程序,只要是基于这种编码方式的遥控器(家里的电视、空调、电扇遥控器)都可以用该程序来解码(这点也充分证明了C语言的高移植性啊。。)

这种编码的格式其实很简单,开头是一个引导码,人家芯片在编码时将其设计成9ms的高电平和4.5ms的低电平,也就是说你必须跳过这段引导码之后才会接收到数据,第一个问题来了:为什么要加这段引导码?因为红外传感是非常容易受到干扰的,如果直接传送数据很可能并非发送端的信号,很可能来自其他辐射,后面设计程序时会遇到这个问题。所以我们在写程序时在引导码时可以加入检测代码,如果是引导码则继续接收,否则跳出。第二个问题就是:接收数据时我们用外部中断接收,这是考虑到CPU 的执行效率,如果你在主函数里接收数据,就好比CPU一直在问:你接收到数据没?

你接收到没?..很明显不靠谱,和串口通信一样,接收数据用中断这是经验,有利于单片机的执行效率。第三个要注意的就是红外接收端和编码发送的数据是反向的!这点很重要,我看很多资料没有写明这点,让很多童鞋疑惑不解,也就是说引导码编码时确实是9ms高电平和4.5ms 的低电平,但是到了接收端是9ms的低电平和4.5ms的高电平,所以我们在解码时就得注意引导码高电平出现的顺序。对于编码格式,引导码后接了4个字节的数据,前两个字节为用户码和用户反码,简单点说就是器件地址;后两字节为操作码和操作反码,就是我们真正需要的数据。图为发送端编码格式,注意接收到的已反向!

华宝空调红外遥控编码资料

华宝空调红外遥控编码资料

华宝空调红外遥控编码资料

简介

华宝空调是一款广泛使用的家用空调品牌,它提供了方便的红外遥控功能,使得用户可以轻松控制空调的各种设置。本文将介绍华宝空调红外遥控编码资料,包括红外遥控编码的原理、常用编码格式、编码数据的解析和使用方法等。

红外遥控编码原理

红外遥控编码是通过发送特定的红外脉冲信号来实现对设备的控制。华宝空调红外遥控编码原理基于脉冲宽度调制(PWM)技术,即通过调整脉冲信号的宽度来表示不同的控制指令。

常用编码格式

华宝空调红外遥控编码使用了一种常见的编码格式,即NEC编码格式。NEC编码格式是一种广泛应用于红外遥控领域的标准编码格式,它使用了32位二进制数据表示一个完整的红外遥控指令。

NEC编码格式的具体结构如下: - Header:8位数据,用于表示一个遥控指令的开始。 - Address:8位数据,用于表示遥控器的地址。 - Command:8位数据,用于表示具体的遥控指令。 - Inverted Command:8位数据,用于表示Command的反码。

编码数据的解析

要解析华宝空调红外遥控编码数据,可以按照以下步骤进行: 1. 接收红外遥控编码数据。 2. 解析Header,判断是否为一个完整的红外遥控指令。 3. 解析Address,获取遥控器的地址。 4. 解析Command,获取具体的遥控指令。 5. 对Command进行处理,执行相应的操作。

使用方法

要使用华宝空调红外遥控编码,可以按照以下步骤进行: 1. 获取红外遥控编码数据。 2. 解析编码数据,获取遥控指令。 3. 根据遥控指令,执行相应的操作,如调整温度、风速、模式等。

单片机对不同品牌空调红外遥控代码

单片机对不同品牌空调红外遥控代码

单片机对不同品牌空调红外遥控代码

摘要:

I.引言

- 单片机的概念与作用

- 红外遥控技术的发展与应用

- 本文研究内容与目的

II.单片机对空调红外遥控代码的解析

- 单片机简介

- 空调红外遥控器的工作原理

- 单片机对红外遥控代码的接收与解析

III.不同品牌空调红外遥控代码的差异

- 空调品牌与红外遥控代码的关系

- 常见空调品牌红外遥控代码的对比

- 代码差异的原因与影响

IV.单片机对不同品牌空调红外遥控代码的兼容性

- 单片机在空调遥控器中的应用

- 单片机对不同品牌空调红外遥控代码的兼容性设计

- 兼容性实现的方法与技术

V.结论

- 单片机在红外遥控技术中的重要性

- 单片机对不同品牌空调红外遥控代码的兼容性的影响

- 未来发展趋势与展望

正文:

随着科技的飞速发展,人们的生活水平不断提高,对于家电产品的需求也越来越高。空调作为家用电器中的重要组成部分,其遥控器的功能也日益丰富。而单片机技术的出现,则为空调遥控器的发展提供了新的可能。本文将针对单片机对不同品牌空调红外遥控代码进行探讨,分析其解析原理、品牌差异及兼容性。

首先,我们需要了解一下单片机的基本概念。单片机(Microcontroller Unit, MCU)是一种集成了CPU、存储器、外设接口等多种功能于一体的微型计算机。通过编程,单片机可以实现对各种设备的控制与操作。在空调遥控器中,单片机起到了接收与解析红外遥控信号的作用。

空调遥控器通过红外线发射信号,遥控器与空调器之间通过红外信号进行通信。单片机接收到红外信号后,通过内置的解码算法对信号进行解析,识别出遥控器发出的指令,从而实现对空调的控制。这一过程涉及到信号的接收、放大、滤波、解调、解码等多个环节。

格力空调遥控器红外编码讲解学习

格力空调遥控器红外编码讲解学习

格力空调遥控器红外

编码

格力空调遥控器红外编码一、基本格式

起始码(S)+35位数据码+连接码(C)+32位数据码

二、电平规范

起始码:9000us低电平+4500us高电平

连接码:600us低电平+20000us高电平

数据0:600us低电平+600us高电平

数据1:600us低电平+1600us高电平

仅供学习与交流,如有侵权请联系网站删除谢谢2

三、数据编码

3.1 前35位数据码

表一前35位数据码

3.2 后32位数据码

表二后32为数据码仅供学习与交流,如有侵权请联系网站删除谢谢3

3.3 其他定义

需要注意的是,所有数据都按照逆序方式递增。

模式字段定义

表三模式字段定义

四、校验计算

校验码=【(模式-1)取四位二进制逆序+(温度-16)+2+左右扫风+换气+节能】取二进制后四位的逆序。仅供学习与交流,如有侵权请联系网站删除谢谢4

单片机对不同品牌空调红外遥控代码

单片机对不同品牌空调红外遥控代码

单片机对不同品牌空调红外遥控代码

【原创实用版】

目录

1.单片机红外遥控原理及应用

2.不同品牌空调红外遥控代码的差异

3.解码原理及方法

4.实践案例与注意事项

5.总结与展望

正文

一、单片机红外遥控原理及应用

红外遥控技术是一种广泛应用于家电遥控器的技术,它通过红外发射器发射红外光,再由红外接收器接收红外光,从而实现信息的传递。单片机作为核心的控制芯片,可以通过编程实现红外遥控的解码和编码。在众多应用场景中,单片机红外遥控技术在空调遥控器领域表现得尤为突出。

二、不同品牌空调红外遥控代码的差异

由于不同品牌的空调在设计时采用了不同的遥控器编码方案,因此它们之间的红外遥控代码存在差异。这些代码通常由品牌和型号信息、用户码、数据码等组成。为了实现对不同品牌空调的红外遥控,我们需要对这些代码进行解码和分析。

三、解码原理及方法

解码原理主要基于红外遥控器的编码和解码原理。在接收到红外光信号后,单片机首先对其进行解调,然后提取出遥控器编码方案中的品牌和型号信息、用户码、数据码等。解码方法通常包括查找编码表、使用专用解码芯片等。

四、实践案例与注意事项

在实际操作过程中,我们可以通过编写程序实现对不同品牌空调的红外遥控。以某品牌空调为例,首先需要找到该品牌空调的遥控器编码表,然后编写程序实现对红外光信号的解调,并根据编码表提取出相应的用户码和数据码。在编程过程中,需要注意红外接收头的连接、编程环境的配置等问题。

五、总结与展望

随着科技的发展,单片机红外遥控技术在家电控制领域的应用越来越广泛。通过研究不同品牌空调的红外遥控代码,我们可以实现对多种空调设备的遥控,从而提高生活质量。

万能空调遥控器代码

万能空调遥控器代码

万能空调遥控器代码

引言

随着科技的不断发展,空调已经成为了人们生活中不可或缺的电器之一。然而,市场上空调品牌众多,每个品牌都有自己的遥控器。如果你手头上有多个品牌的空调,每个品牌都需要单独的遥控器来操作,那么肯定变得非常不方便。因此,有一种万能空调遥控器的代码成为了越来越多人的需求。

在这篇文档中,我将向您介绍一种万能空调遥控器代码的实现方法,以及使用该代码的步骤和注意事项。

实现方法

万能空调遥控器代码的实现方法基于红外线通信技术。一般来说,空调遥控器通过发送一组红外线编码指令来控制空调的各种功能。因此,通过识别和重写这些红外线编码指令,我们可以实现一个万能空调遥控器。

具体来说,万能空调遥控器的实现方法可以分为以下几个步骤:

1.收集红外线编码指令:首先,您需要收集各个空调品牌的遥控器所发送的红外线编码指令。方法有两种:一是使用红外线信号解析器来获取红外线编码指令的原始数据,二是通过开源项目或者互联网上的数据库来获取已解析的红外线编码指令。

2.分析红外线编码指令:收集到红外线编码指令后,您需要通过一定的方式对这些指令进行分析。具体来说,您需要了解编码指令中的各个字段所代表的含义,包括温度、模式、风速等。只有了解了这些信息,才能更好地对指令进行重写。

3.编写代码实现:在分析完红外线编码指令后,您需要编写一段代码来实现万能空调遥控器的功能。这段代码需要包括红外线编码指令的解析和重写部分。通过解析用户输入的遥控指令,您的代码可以将其转化为相应的红外线编码指令,并发送给空调。

使用步骤

使用万能空调遥控器代码的步骤如下:

格力空调遥控器红外编码

格力空调遥控器红外编码

格力空调遥控器红外编码

一、基本格式

+32 位数据码

起始码(S)+35 位数据码+连接码(C)

二、电平规范

起始码:9000us 低电平+4500us 高电平连接码:600us 低电平+20000us 高电平数据0:600us 低电平+600us 高电平数据1:600us 低电平+1600us 高电平

三、数据编码

3.1 前35 位数据码

3.2后32位数据码

3.3其他定义

需要注意的是,所有数据都按照逆序方式递增。模式字段定义

表三模式字段定义

四、校验计算

校验码=【(模式-1 )取四位二进制逆序+ (温度-16)+2+左右扫风+换气+节能】取二进制后四位的逆序。

(注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

单片机红外编码程序

单片机红外编码程序

#include sbit P3_4 = P2^1;static bit OP; //红外发射管的亮灭static unsigned int count; //延时计数器static unsigned int endcount; //终止延时计数static unsigned char flag; //红外发送标志char iraddr1; //十六位地址的第一个字节char iraddr2; //十六位地址的第二个字节void SendIRdata(char p_irdata);void delay();void main(void) {count = 0;flag = 0;OP = 0;P3_4 = 0;EA = 1; //允许CPU中断 TMOD = 0x11; //设定时器0和1为16位模式1 ET0 = 1; //定时器0中断允许 TH0 = 0xFF; TL0 = 0xE8; //设定时值0为38K 也就是每隔26us中断一次 TR0 = 1;//开始计数iraddr1=3;iraddr2=252;do{unsigned char i;delay();SendIRdata(12);}while(1);} //定时器0中断处理 void timeint(void) interrupt 1 { TH0=0xFF; TL0=0xE8; //设定时值为38K 也就是每隔26us中断一次count++;if (flag==1){OP=~OP;}else{OP = 0;}P3_4 = OP;} void SendIRdata(char p_irdata){int i;char irdata=p_irdata;//发送9ms的起始码endcount=223;flag=1;count=0;do{}while(count//发送4.5ms的结果码endcount=117;flag=0;count=0;do{}while(count//发送十六位地址的前八位irdata=iraddr1;for(i=0;i<8;i++){//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)endcount=10;flag=1;count=0;do{}while(count//停止发送红外信号(即编码中的高电平)if(irdata-(irdata/2)*2) //判断二进制数个位为1还是0{endcount=41; //1为宽的高电平}else{endcount=15; //0为窄的高电平}flag=0;count=0;do{}while(countirdata=irdata>>1;}//发送十六位地址的后八位irdata=iraddr2;for(i=0;i<8;i++){endcount=10;flag=1;count=0;do{}while(countif(irdata-(irdata/2)*2){endcount=41;}else{endcount=15;}flag=0;count=0;do{}while(countirdata=irdata>>1;}//发送八位数据irdata=p_irdata;for(i=0;i<8;i++){endcount=10;flag=1;count=0;do{}while(countif(irdata-(irdata/2)*2){endcount=41;}else{endcount=15;}flag=0;count=0;do{}while(countirdata=irdata>>1;}//发送八位数据的反码irdata=~p_irdata;for(i=0;i<8;i++){endcount=

使用irmp库创建的基于stm32的红外遥控例程+源代码+文档说明

使用irmp库创建的基于stm32的红外遥控例程+源代码+文档说明

使用irmp库创建的基于stm32的红外遥控例程+源代

码+文档说明

全文共四篇示例,供读者参考

第一篇示例:

使用irmp库创建的基于stm32的红外遥控例程

引言

红外遥控技术在现代生活中得到了广泛应用,无论是电视遥控、空调遥控还是其它家用电器遥控,都离不开红外遥控技术。而在嵌入式系统中,基于STM32开发的红外遥控系统也广泛应用于各种智能家居、智能家电中。本文将介绍如何使用irmp库创建一个基于STM32的红外遥控例程,并提供源代码和文档说明。

一、什么是irmp库

irmp库是一个用C语言编写的红外接收器解码库,可以用于解码不同品牌、型号的红外遥控器信号。它支持多种不同的协议,包括NEC、SONY、RC-5等。irmp库可以很方便地在STM32系列的单片机中使用,实现红外信号的接收和解码。

二、STM32开发环境搭建

在使用irmp库创建红外遥控例程之前,首先需要搭建STM32开发环境。可以选择Keil、IAR等集成开发环境进行开发。在安装好开发

环境后,需要配置好对应的STM32系列的芯片支持,包括芯片型号、引脚配置、时钟设置等。然后创建一个新的工程,并导入irmp库的源代码。

三、irmp库的使用

irmp库的使用主要分为两个部分:初始化红外接收器和处理接收到的红外码。首先需要在初始化阶段对红外接收器进行配置,包括选择引脚、设置定时器等。然后就可以启动红外接收器,开始接收红外信号。

在接收到红外信号后,irmp库会自动对信号进行解码,并将解码后的红外码存储在一个全局变量中。在接收到红外码后,可以通过对不同的红外码进行判断,实现不同功能的控制。

红外编码模块 -回复

红外编码模块 -回复

红外编码模块-回复

红外编码模块是一种常用的技术装置,用于将红外线信号转化为数字信号,以便在不同的应用领域中实现数据传输、通信连接和遥控操作等功能。本文将从红外编码模块的基本原理、工作流程以及应用案例等方面,详细介绍红外编码模块的相关知识。

一、红外编码模块的基本原理与工作原理

红外编码模块是一种将红外线信号转化为数字信号的装置。其基本原理是利用红外线的特性,通过红外线发射器将数据信号转化为红外线信号,再通过红外线接收器将红外线信号转化为数字信号。

红外编码模块通常由发送器和接收器两部分组成。发送器部分负责接收待传输的数字信号,并将其转化为红外线信号。接收器部分接收到红外线信号后,通过解码等处理,将其转化为数字信号,以供后续处理或控制使用。

二、红外编码模块的工作流程

红外编码模块的工作流程可以简单概括为以下几个步骤:

1. 发送信号:当有需要传输的数据时,发送器将其转化为红外线信号,然后通过红外线发射装置发送出去。发送信号的方式可以有多种,如调制频率、南京夜网调制宽度等。

2. 接收信号:红外线接收器接收到红外线信号后,将其转化为电信号,并经过一系列的滤波和放大处理后,输出至解码器。

3. 解码处理:解码器根据特定的解码算法,对接收到的信号进行解码处理,将其转化为数字信号。通常,解码器内部会有一个红外线编码表,通过与之对比,可以确定所接收到的信号所代表的具体信息。

4. 输出结果:解码处理完成后,红外编码模块会将解码得到的数字信号输出给其他设备或系统,以实现相应的功能和操作。例如,可以将数字信号传输至电脑进行数据处理,或发送至遥控器驱动相应设备。

ADRUINO红外遥控器解码程序

ADRUINO红外遥控器解码程序

#include // 使用IRRemote函数库const int irReceiverPin = 2; // 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口decode_results results; // 定义results变量为红外结果存放位置void setup(){Serial.begin(9600); // 开启串口,波特率为9600irrecv.enableIRIn(); // 启动红外解码}void loop() {if (irrecv.decode(&results)) { // 解码成功,把数据放入results变量中// 把数据输入到串口Serial.print("irCode: "); Serial.print(results.value, HEX); // 显示红外编码Serial.print(", bits: "); Serial.println(results.bits); // 显示红外编码位数irrecv.resume(); // 继续等待接收下一组信号} delay(600); //延时600毫秒,做一个简单的消抖}

单片机红外发射(原理与设计程序)

单片机红外发射(原理与设计程序)

单片机红外发射(原理与设计程序)

一、引言

随着科技的发展和人们对智能化生活的需求增加,红外发射技术在家电遥控、无线通讯等领域得到广泛应用。单片机是红外发射的一个重要组成部分,通过学习单片机红外发射的原理和设计相关的程序,我们可以更好地理解和应用该技术。

二、红外发射原理

1. 红外通信原理

红外通信是利用红外线传输信息的一种无线通信方式。红外线是一种波长较长、能量较低的电磁波,不会对人体和周围环境产生明显危害。通过调制红外线的频率和幅度,可以传输数字信号和模拟信号。

2. 红外发射原理

红外发射是通过调制器件发射调制后的红外信号。在单片机红外发射中,通常使用红外发射二极管作为发射器件。通过控制单片机的输出引脚,可以使红外发射二极管发射出不同频率和占空比的红外信号。

3. 红外编码原理

在红外通信中,通常需要对信号进行编码,以区分不同的按键和数据。红外编码有多种方式,常用的有NEC编码和RC-5编码。通过将特定的按键和数据映射成不同的编码,可以实现红外通信的多样化功能。

三、单片机红外发射设计程序

1. 硬件连接

,需要将红外发射二极管连接到单片机的输出引脚。具体连接方式可参考所使用的单片机的引脚定义和电路原理图。

2. 程序设计步骤

设计单片机红外发射程序的步骤如下:

1. 初始化单片机的IO引脚,将输出引脚设置为输出模式。

2. 设置红外发射的调制频率和占空比。

3. 根据需要发送的数据,将数据转换成对应的红外编码。

4. 根据红外编码,控制输出引脚的电平变化,以模拟红外信号的调制。

5. 持续一定时间后,停止红外发射,将输出引脚恢复到默认状态。

NEC%三菱%索尼%飞利普%东芝等6种红外遥控器编码及程序

NEC%三菱%索尼%飞利普%东芝等6种红外遥控器编码及程序

HT48CA0 APPLICATION NOTE

. Application Circuit

HOLTEK HT48CA0 (64KEY)

.Working Register Define

;*****************************************************

;@***** Filename : SAMPLE.ASM (Remote 64KEY) ******

;@************** OSC:455KHz CARRY:38KHz ***********

;@****************** HT48CA0 ******************

;;*****************************************************

;;***** System memory Map *****

M_INDIRECT1 equ [00h] ;Indirect addressing register M_MP0 equ [01h] ;Data Memory point

M_ACC equ [05h] ;Accumulator

M_PCL equ [06h] ;Program Counter Lower-order M_TBLP equ [07h] ;Table Pointer

M_TBLH equ [08h] ;Table Higher-order byte

M_STATUS equ [0ah] ;Micro controll status

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include
#define SEGMENT P0
#define BIT_LED P2
#define fosc 12
#define time0 2600 //26us

unsigned char data display_bit,display_buffer[8];
unsigned char data time0_h,time0_l;
unsigned int idata time0_times;
unsigned char data send_data[6]={0xc1,0x60,0x11,0x22,0x33,0x55};

unsigned int showdata;
unsigned char data TEMP;
int *point;
unsigned int shdata;
unsigned int keyin;
unsigned int kbempty;

sbit C =0xA0;
sbit ACC_0=0xE0;
sbit ACC_1=0XE1;
sbit ACC_2=0XE2;
sbit ACC_3=0XE3;
sbit ACC_4=0XE4;
sbit ACC_5=0XE5;
sbit ACC_6=0XE6;
sbit ACC_7=0XE7;
sbit dataout=0xB7;//P3.7

unsigned char get_code(unsigned char i);
void display(void);
void breakdata(void);
void unitial(void);
void delay13us(void);
void send(void);
void getkeyin(void);

/**************************主程序*****************************/
main()
{

unitial();
_nop_();
delay13us();
ACC_0=1;
ACC_1=0;
ACC_2=1;
keyin=ACC;
send();
while(1)
{
getkeyin();
display();

}

}
/**************初始化******************************/
void unitial(void)
{
//point=&display_buffer[0];
display_bit=0x01;
BIT_LED=0;
TMOD=0X02;
// time0_times=65536-time0*fosc/12;
// time0_h=(time0_times/256);
// time0_l=(time0_times%256);
//TH0=time0_h;
//TL0=time0_l;
TH0=0X00;
TL0=0XC0;
TR0=1;
EA=1;
//ET0=1;
dataout=1;
P3_2=1;
P3_7=1;
shdata=keyin;
}
/*********************************************/
void time0_int(void) interrupt 1
{
//TH0=time0_h;
//TL0=time0_l;
P1=~P1;
}
/***********************************************/
unsigned char get_code (unsigned char i)
{
unsigned char p;
switch(i)
{
case 0: p=0x3F; break; /*0*/
case 1: p=0x06; break; /*1*/
case 2: p=0x5B; break; /*2*/
case 3: p=0x4F; break; /*3*/
case 4: p=0x66; break; /*4*/
case 5: p=0x6D; break; /*5*/
case 6: p=0x7D; break; /*6*/
case 7: p=0x07; break; /*7*/
case 8: p=0x7F; break; /*8*/
case 9: p=0x67; break; /*9*/
case 10: p=0x77; break; /*A*/
case 11: p=0x7C; break; /*B*/
case 12: p=0x39; break; /*C*/
case 13: p=0x5E; break; /*D*/
case 14: p=0x79; break; /*E*/
case 15: p=0x71; break; /*F*/
case 16: p=0x00; break; /*

灭灯*/
default: break;
}
return ((~p) & 0x7F);
}

/**************************************************/
void display(void)
{
int f;
showdata=keyin;
breakdata();
for(f=0;f<6;f++)
{unsigned char i;
switch(display_bit)
{
case 1:i=0;break;
case 2:i=1;break;
case 4:i=2;break;
case 8:i=3;break;
case 16:i=4;break;
// case 32:i=5;break;
// case 64:i=6;break;
// case 128:i=7;break;
default:break;
}
BIT_LED=0;
SEGMENT=get_code(display_buffer[i]);
TEMP=SEGMENT;
BIT_LED=display_bit;
if(display_bit<0x32)
{display_bit=display_bit*2;}
else display_bit=0x01;
}
}

/******************数据拆分**********************/
void breakdata(void)
{ int j;
for(j=0;j<6;j++)
{
display_buffer[j]=showdata%10;
showdata=showdata/10;
//*(point+1);
}

}
/*******************************延时13us*********************************/
void delay13us(void)
{ _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/**************************数据发送程序********************************/
void send (void)
{ int n;
unsigned p;
int q;
P3_2=0;

//发送9ms发始码
for(p=0;p<680;p++)//3us 700*13=9100
{
dataout=!dataout;//1us
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}

//发送4.5ms结果
for(p=0;p<333;p++)//300*13=3900
{dataout=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}


for(q=0;q<6;q++)
{ showdata=send_data[q];

for(n=0;n=7;n++) //3us
{ ACC=showdata; //1us
if(ACC_7==1) //3us 发送1
{ int l; //1us
for(l=0;l<42;l++)
{dataout=!dataout;//1
_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}
for(l=0;l<128;l++)//3us
{dataout=1; //1us
_nop_()

;_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}
}
else //调制38K信号,发送0;
{ int m;
for(m=0;m<43;m++)//3us
{
dataout=!dataout;//1us
_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}

for(m=0;m<42;m++)
{dataout=1;
_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}
}
showdata=showdata<<1;//7us
}//10us

for(n=0;n<45;n++)//3us
{
dataout=!dataout;//1us
_nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//12us
}
P3_2=1;
P3_7=1;

}
}
/************************************************************
键盘扫描及取键值程序
unsigned char getkeyin(void)
功能:键值放入keyin。
************************************************************/
void getkeyin(void)
{
unsigned char temp;
P1=0x0f;
temp=P1;
if(temp==0x0f)
{
kbempty=0;
// keyin=0xff;
}


// if(kbempty==0&&temp!=0x0f)//按键有松开过
// {
// for(i=10;i>0;i--); //键盘去抖延迟


P1=0xef; //P1^4=0
temp=P1;
temp=temp&0x0f;
if (temp!=0x0f)
{
switch(temp)
{
case 0x0e:keyin=3;send();break; //keyin='3'
case 0x0d:keyin=7;send();break; //keyin='7'
case 0x0b:keyin=11;send();break; //keyin='11'
case 0x07:keyin=15;send();break; //keyin='15'
// default:keyin=0xff;
}
kbempty=1;
//return(keyin) ;
}

P1=0xdf; //P1^5=0
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
switch(temp)
{
case 0x0e:keyin=2;break; //keyin='2'
case 0x0d:keyin=6;break; //keyin='6'
case 0x0b:keyin=10;break; //keyin='10'
case 0x07:keyin=14;break; //keyin='14'
// default:keyin=0xff;
}
kbempty=1;

//return(keyin) ;
}

P1=0xbf; //P1^6=0
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
switch(temp)
{

case 0x0e:keyin=1;break; //keyin='1'
case 0x0d:keyin=5;break; //keyin='5'
case 0x0b:keyin=9;break; //keyin='9'
case 0x07:keyin=13;break; //keyin='13'
// default:keyin=0xff;
}
kbempty=1;

//return(keyin) ;
}

P1=0x7f; //P1^7=0
temp=P1;
temp=temp & 0x0f;
if (temp!=0x0f)
{
switch(temp)
{
case 0x0e:keyin=0;break; //keyin='0'
case 0x0d:keyin=4;break; //keyin='4'
case 0x0b:keyin=8;break; //keyin='8'
case 0x07:keyin=12;break; //keyin='12'
// default:keyin=0xff;
}
kbempty=1;
}
//return(keyin) ;
}
// keyin=0xff;
//return(keyin);
// }


相关文档
最新文档