红外遥控接收模块+普中51单片机+江科大自化协

发布者:Tianyun2021最新更新时间:2024-08-05 来源: cnblogs关键字:红外遥控  接收模块 手机看文章 扫描二维码
随时随地手机看文章


#ifndef _exint0_h_

#define _exint0_h_


void exint0_init(void);

    

#endif


5.4 定时器T0


#include


/**

  * @brief  定时器0初始化,1毫秒@11.0592MHz

  * @param  无

  * @retval 无

  */

void timer0_init(void)        //1毫秒@11.0592MHz

{

    TMOD &= 0xF0;    //设置定时器模式,1111_0000,&,高四位保留,低四位清零

    TMOD |= 0x01;    //设置定时器模式,0000_0001,|,高四位保留,设置模式为T0

    TL0 = 0;        //设置定时初始值

    TH0 = 0;        //设置定时初始值

    TF0 = 0;        //清除TF0标志

    TR0 = 0;        //定时器0暂时不计时

}


void timer0_SetCounter(unsigned int value)

{

    TH0=value/256;

    TL0=value%256;

}


unsigned int timer0_GetCounter(void)

{

    return (TH0<<8)|TL0;

}


void timer0_Run(unsigned char Flag)

{

    TR0=Flag;

}


#ifndef _timer0_h_

#define _timer0_h_


void timer0_init(void);

void timer0_SetCounter(unsigned int value);

unsigned int timer0_GetCounter(void);

void timer0_Run(unsigned char Flag);


#endif


5.5 LCD1602显示函数


#include

#include 'intrins.h'


//引脚配置,硬件原理图,普中A2

sbit LCD1602_RS = P2^6;

sbit LCD1602_RW = P2^5;

sbit LCD1602_E  = P2^7;

#define LCD1602_DATAPORT P0



/**

  * @brief  LCD1602延时函数

  * @param  xms=1, 延时1ms

  * @retval 无

  */

void LCD1602_Delayms(unsigned char xms)        //@11.0592MHz

{

    unsigned char i, j,k;


    for(k=0;k    {

        _nop_();

        i = 2;

        j = 199;

        do

        {

            while (--j);

        } while (--i);

    }


}


/**

  * @brief  LCD1602写命令,时序图

  * @param  Command 要写入的命令

  * @retval 无

  */

void LCD1602_WriteCommand(unsigned char Command)

{

    LCD1602_RS = 0;

    LCD1602_RW = 0;

    LCD1602_DATAPORT  = Command;

    LCD1602_E  = 1;

    LCD1602_Delayms(1);    //延时1ms

    LCD1602_E  = 0;

    LCD1602_Delayms(1);    //延时1ms

}


/**

  * @brief  LCD1602写数据,时序图

  * @param  Data 要写入的数据

  * @retval 无

  */

void LCD1602_WriteData(unsigned char Data)

{

    LCD1602_RS = 1;

    LCD1602_RW = 0;

    LCD1602_DATAPORT  = Data;

    LCD1602_E  = 1;

    LCD1602_Delayms(1);    //延时1ms

    LCD1602_E  = 0;

    LCD1602_Delayms(1);    //延时1ms

}


/**

  * @brief  LCD1602初始化函数

  * @param  无

  * @retval 无

  */

void LCD1602_Init(void)

{

    LCD1602_WriteCommand(0x38);    //0011_1000 功能设置,设置16x2显示,5x7点阵,8位数据接口

    LCD1602_WriteCommand(0x0C);    //0000_1100 显示开关控制,显示开,光标关,闪烁关    

    LCD1602_WriteCommand(0x06);    //0000_0110 输入方式设置,数据写后,AC自动加一,画面不动

    LCD1602_WriteCommand(0x01);    //0000_0001 清屏,数据指针清零、所有显示清零

}

/**

  * @brief  LCD1602设置光标位置

  * @param  Line 行位置,范围:1~2

  * @param  Column 列位置,范围:1~16

  * @retval 无

  */

void LCD1602_SetCursor(unsigned char Line,unsigned char Column)

{

    if(Line == 1)

    {

        LCD1602_WriteCommand(0x80|(Column-1)); //设置要存入数据的DDROM地址,第一行地址

    }

    else

    {

        LCD1602_WriteCommand(0x80|(Column-1)+0x40); //设置要存入数据的DDROM地,第二行地址

    }

}

    


/**

  * @brief  在LCD1602指定位置上显示一个字符

  * @param  Line 行位置,范围:1~2

  * @param  Column 列位置,范围:1~16

  * @param  Char 要显示的字符

  * @retval 无

  */

void LCD1602_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)

{

    LCD1602_SetCursor(Line,Column);

    LCD1602_WriteData(Char);

}


/**

  * @brief  在LCD1602指定位置上显示所给字符串

  * @param  Line 行位置,范围:1~2

  * @param  Column 列位置,范围:1~16

  * @param  Char 要显示的字符串

  * @retval 无

  */

void LCD1602_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)        //指针

{

    unsigned char i;

    LCD1602_SetCursor(Line,Column);

    for(i=0;String[i]!='';i++)    //字符串结束标志''

    {

        LCD1602_WriteData(String[i]);

    }

    

}


/**

  * @brief  返回值=X的Y次方,指数运算

  */

int LCD_Power(int X,int Y)

{

    unsigned char i;

    int result = 1;

    for(i=0;i    {

        result = result * X;

    }

    return result;

}


/**

  * @brief  在LCD1602指定位置开始显示所给数字

  * @param  Line 起始行位置,范围:1~2

  * @param  Column 起始列位置,范围:1~16

  * @param  Number 要显示的数字,范围:0~65535

  * @param  Length 要显示数字的长度,范围:1~5

  * @retval 无

  */

void LCD1602_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)

{

    unsigned char i;

    LCD1602_SetCursor(Line,Column);

    for(i=Length;i>0;i--)

    {

        LCD1602_WriteData('0'+Number/LCD_Power(10,i-1)%10); // '0'=0x30,转换为字符显示;

        

        /** 

          * 789, 789/100%10, 取出百位

          * 789, 789/10%10, 取出十位

          * 789, 789/1%10, 取出个位

         */

    }

}


/**

  * @brief  在LCD1602指定位置开始以有符号十进制显示所给数字

  * @param  Line 起始行位置,范围:1~2

  * @param  Column 起始列位置,范围:1~16

  * @param  Number 要显示的数字,范围:-32768~32767

  * @param  Length 要显示数字的长度,范围:1~5

  * @retval 无

  */

void LCD1602_ShowSignedNum(unsigned char Line,unsigned char Column, int Number,unsigned char Length)

{

    unsigned char i;

    unsigned int Number1; 

    LCD1602_SetCursor(Line,Column);

    if(Number >= 0)

    {

        LCD1602_WriteData('+');

        Number1 = Number;

    }

    else

    {

        LCD1602_WriteData('-');

        Number1 = -Number;     //-32768

    }

    for(i=Length;i>0;i--)

    {

        LCD1602_WriteData('0'+Number1/LCD_Power(10,i-1)%10); 

    }

}


/**

  * @brief  在LCD1602指定位置开始以十六进制显示所给数字

  * @param  Line 起始行位置,范围:1~2

  * @param  Column 起始列位置,范围:1~16

  * @param  Number 要显示的数字,范围:0~0xffff

  * @param  Length 要显示数字的长度,范围:1~4

  * @retval 无

  */

void LCD1602_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)

{

    unsigned char i;

    unsigned char SingleNumber;

    LCD1602_SetCursor(Line,Column);

    for(i=Length;i>0;i--)

    {

        SingleNumber = Number/LCD_Power(16,i-1)%16; //从高位到低位,取出每一个十六进制数字

        if(SingleNumber < 10)

            LCD1602_WriteData('0'+SingleNumber); 

        else

            LCD1602_WriteData('A'+SingleNumber-10); //SingleNumber已含有10+x

    }

}


/**

  * @brief  在LCD1602指定位置开始以二进制显示所给数字

  * @param  Line 起始行位置,范围:1~2

  * @param  Column 起始列位置,范围:1~16

  * @param  Number 要显示的数字,范围:0~1111_1111_1111_1111

  * @param  Length 要显示数字的长度,范围:1~16

  * @retval 无

  */

void LCD1602_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)

{

    unsigned char i;

    LCD1602_SetCursor(Line,Column);

    for(i=Length;i>0;i--)

    {

        LCD1602_WriteData('0'+Number/LCD_Power(2,i-1)%2); //从高位到低位,取出每一个二进制数字

    }

}


#ifndef __LCD1602_H__

#define __LCD1602_H__

    

    void LCD1602_WriteCommand(unsigned char Command);

    void LCD1602_WriteData(unsigned char Data);


    void LCD1602_Init(void);

    void LCD1602_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char);

    void LCD1602_ShowString(unsigned char Line,unsigned char Column,unsigned char *String);

    void LCD1602_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

    void LCD1602_ShowSignedNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

    void LCD1602_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

    void LCD1602_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

    

#endif


6 参考资料


(1)单片机应用实践篇——红外遥控的应用之红外遥控简介,协议分析及硬件电路的设计_哔哩哔哩_bilibili;

[1] [2]
关键字:红外遥控  接收模块 引用地址:红外遥控接收模块+普中51单片机+江科大自化协

上一篇:红外遥控电机调速+普中51单片机+江科大自化协
下一篇:步进电机控制+普中51单片机+普中官方

推荐阅读最新更新时间:2024-11-03 06:17

单片机AD接收UART发送模块电路图PCB与vb上位机源码
Altium Designer画的AD接收UART发送模块电路原理图和PCB图如下: 【简要说明】 一、 尺寸:长50mmX宽25mmX高10mm 二、主要芯片:ATMEGA8 三、工作电压:直流5V 二、 特点: 1、检测模拟量电压范围0~5V 2、数码管显示范围0~5000 3、四位数码管显示 4、输入输出接线简单 5、AD转换频率125K,8位数据转换 6、波特率:9600 , 误差率:0.156% 三、 作用:将0~5V的模拟电压量转换成为0~5000的数字量,由数码管显示出来,并转换成为0~255的十六进制,由单片机UART(即,TXD口发出),经232电平转换后,可以和电脑直接通信。 AD接收UART发送模块AD
[单片机]
单片机AD<font color='red'>接收</font>UART发送<font color='red'>模块</font>电路图PCB与vb上位机源码
自制红外遥控LED电子钟
  自制 LED电子 钟在很多电子报刊杂志上都可以见到,但大多数在断电后都要重新设置时间等参数,给使用带来很多不便。也有用后备电池作为备用 电源 的,但往往体积较大。本文介绍的LED电子钟克服了以往的弊端,而且采用了 家电 通用的红外遥控器进行控制,方便使用。有一路闹铃输出,可以通过遥控器设置闹铃时间及允许与否。   一.工作原理   DS1302为达拉斯公司的一种实时 时钟 芯片,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32768Hz晶振。   AT89C2051作为主控芯片,一是对接收到的红外遥控编码进行判断识别,并执行相应的处理;第二就是定期的读取时钟芯片DS1
[电源管理]
自制<font color='red'>红外遥控</font>LED电子钟
基于可控硅的红外遥控开关
关断单向可控硅的方式有两种:其中一种是众所周知的,就是可控硅的阳极电位低于阴极电位或阳极电流小于维持电流时,可由导通转为关断。别一种则是将可控硅的控制极对地短路,也可以将其关断。单向可控硅具有一触即发实现自锁的功能。本人利用它的这个特性制作了下面这款简单的红外遥控开关电路,如图1所示。 一、工作原理   220V交流电压经电容C1降压,VD1、VD2、C2整流滤波,VD3稳压后输出12V直流电压给本电路供电用。12V直流电压再经R2、VD4、C3进一步稳压滤波后供红外接收头HRM作电源用。   开启过程:静态时脉冲放大管外于饱和状态,集电极输出0.1V低电平,此时可控硅触发电路不工作。瞬间按遥控器(各类彩电、VCD遥控器均
[工业控制]
基于可控硅的<font color='red'>红外遥控</font>开关
Atmega16输入捕捉功能的红外遥控器解码
//以下程序是利用T/C1的输入捕捉功能来实现红外解码 //用1838一体化万能接收头来对红外解码,1838的1脚接ICP1脚即 PD6脚(20脚),2脚接地,3脚接VCC //红外遥控器发出的信号是先发9.5ms高电平(也可能是4.5ms低电平)加4.5ms低电平的前导码, //其中0码由O.56ms高电平和0.56ms低电平组合而成.脉冲宽度为1.12ms;1码由0.56ms高电平和1.69ms低电平组合而成,脉冲宽度为2.25ms //但红外遥控器发出的红外信号经过1838处理后输出到单片机的信号却是相反的,因为1838没检测到红外信号时一直输出高电平,检测到红外信号后就输出低电平 //红外遥控器发出的红外信号经过1838处理
[单片机]
基于EM411 GPS接收模块的便携GPS系统设计
  1 引言   GPS以其高精度,全天候,全球覆盖,方便灵活和优质价廉吸引全世界许多用户。GPS的广泛应用改变了人们的工作方式,提高工作效率,带来巨大的经济效益。这里提出一种基于EM411 GPS接收模块和PIC18F2550单片机的手持式GPS定位系统设计方案。该系统采用点阵字符液晶屏显示接收GPS卫星数据,并用SD卡记录所接收到的GPS信息,从而实现GPS数据导入电子地图。   2 NEMA协议简介   目前,GPS采用NMEA-0183协议做为发送和接收数据的标准,NMEA-0183是美国国家海洋电子协会(NationalMarine Electronics Association)为统一海洋导航规范而制定的标
[嵌入式]
EM78P447红外遥控电动机
;*********************************************************************** ; 红外遥控电动机.dt ;*********************************************************************** PORT5 == 0x05 ;定义端口5,6 PORT6 == 0x06 ;----------------------------------------------------------------------- IOCE == 0x0E
[单片机]
基于阵列除法的数据接收/显示模块设计
  根据系统要求,脉冲雷达高度表通过RS-422串行输出高度数据,要求数据接收模块实时接收,并显示雷达高度数据。接收模块接收到的高度数据采用二进制(BIN)码表示,而数码管等显示设备需要BCD码(即二进制编码的十进制码),所以二者之间的转换非常必要。   BCD码与BIN码的相互转换比较传统的方法是采用DAA调节指令来实现,需要逐位调节,比较费时。文献 提出利用模除,每次移动半字节,使转换效率大为提高,但也仅是软件算法,无法满足数制转换高效率和实时性的要求。文献 提出了采用分段查找EPROM的硬件方法,满足点阵记录实时性的要求,但是该算法需要大容量的EPROM。文献 利用BCD码与BIN码的逻辑对应关系直接转换,需要经过多级复杂
[电源管理]
基于阵列除法的数据<font color='red'>接收</font>/显示<font color='red'>模块</font>设计
电路图天天读(19):局域网红外遥控发射与接收电路设计
红外发射电路模块:单片机发出的信号如何被红外发射管识别,发射管能否正常发射红外信号是发射电路要解决的关键问题。要发射红外信号,必须要有红外发射器件。红外发光二极管是一种能产生红外光的发光二极管,目前大量使用的红外发光二极管发出的红外线波长为940nm 左右,外形与普通发光二极管相同,只是颜色不同。常见的红外发射二极管有黑色,透明色,它与普通发光二极管的最大区别在于所发出的光为不可见光,而普通发光二极管发出的是各种颜色的可见光,通常,红外发光二极管分为两种结构形式:一种是遥控发射型红外发光二极管(即最常用的手持遥控器所用的红外发射二极管);一种是近距离发射型红外发光二极管,这种二极管把红外光的发射与接收共集为一体。由于本设计实现的是
[单片机]
电路图天天读(19):局域网<font color='red'>中</font><font color='red'>红外遥控</font>发射与<font color='red'>接收</font>电路设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved