微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C52单片机红外遥控器解码

STC89C52单片机红外遥控器解码

时间:11-21 来源:互联网 点击:
//////////////////////////////////////////////////////////////////////////

实现功能: 按实验板所佩带的红外遥控器上面的数字键,把红外遥控器的代码显
示在1602液晶上面,通过此实验也可测试你手上所用红外遥控器的代
码编号,一定注意要跟红外探测头的距离不要太远,而且
程序里只编写了遥控器上的数字键的部分
实验板型号:KBL-XYD-C52
实验名称: 红外控制1602液晶的显示
编写人: 谢应东
编写日期: 2012-5-3
//////////////////////////////////////////////////////////////////////////

#include
#include

#define uchar unsigned char
#define uint unsigned int

sbit IR = P3^3; //红外接收器数据线

uchar code string0[] = {"IR REMOTE CONTROL"}; //定义要显示在1602上的字符串
uchar code string1[] = {"IR-CODE: 0X-- H"}; //定义要显示在1602上的字符串

#define BUSY 0x80 //lcd忙检测标志
#define LCD_DATAPORT P0 //定义P0口为LCD通讯端口

sbit Duan=P2^6;//定义数码管的段选使能端
sbit Wei =P2^7; //定义数码管的位选使能端

#define Digital_tube_Wei_Enable Wei=1;//开启控制数码管的位选使能端
#define Digital_tube_Wei_Disable Wei=0; //关闭控制数码管的位选使能端

#define Digital_tube_Duan_Enable Duan=1;//开启控制数码管的段选使能端
#define Digital_tube_Duan_Disable Duan=0;//关闭控制数码管的段选使能端

sbit LCD_RS=P3^4; //数据/命令端
sbit LCD_RW=P3^5; //读/写选择端
sbit LCD_EN=P3^6;

uchar cIRReceiveData[7];
//////////////////////////////////////////////////////////////////////////

函数名称:毫秒延时函数
函数功能:实现毫秒级的延时
参数介绍:Delay_MS: 定义需要延时的毫秒的数值
iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得
返回值:
注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形
式完成,所以如果改变了晶振的频率,请做相应的改变
//////////////////////////////////////////////////////////////////////////

void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber //用for语句实现单片机的延时
{
iValue=107; //107这个数值是通过测定而得
while(iValue--);
}
}
//////////////////////////////////////////////////////////////////////////

函数名称:Delay
函数功能:延时0.14毫秒,主要是用于红外解码
参数介绍:cDelay:延时0.14ms的次数
返回值:
注意事项:无
//////////////////////////////////////////////////////////////////////////

void Delay(unsigned char cDelay) //x*0.14MS
{
unsigned char cNumber;
while(cDelay--)
{
for (cNumber=0;cNumber<13;cNumber++) {}
}
}
///////////////////////////////////////////////////////////////////////////
函数名称:ReadStatusLCD
函数功能:检测液晶是否忙碌
参数介绍:无
返回值: LCD_DATAPORT
注意事项:无
//////////////////////////////////////////////////////////////////////////

unsigned char ReadStatusLCD()
{
LCD_DATAPORT=0xff;
LCD_RS=0;
LCD_RW=1;
LCD_EN=0;
LCD_EN=0;
LCD_EN=1;
while(LCD_DATAPORT&BUSY);
return(LCD_DATAPORT);
}
//////////////////////////////////////////////////////////////////////////

函数名称:WriteCommandLCD
函数功能:根据1602液晶的时序,通过单片机给1602液晶写一些相关的命令
参数介绍:cCommand:要写入的1602液晶命令
cBusy:1602液晶是否空闲的标志
返回值:
注意事项:无
//////////////////////////////////////////////////////////////////////////

void WriteCommandLCD(uchar cCommand,uchar cBusy)
{
if(cBusy)ReadStatusLCD();//检测忙信号
LCD_DATAPORT=cCommand; //要写入的指令
LCD_RS=0; // 选中指令寄存器
LCD_RW=0; // 写模式
LCD_EN=1;// 开启1602液晶使能端
_nop_();// 等待写入指令
_nop_();
_nop_();
LCD_EN=0; // 关闭1602液晶使能端
}
//////////////////////////////////////////////////////////////////////////
函数名称:WriteDataLCD
函数功能:根据1602液晶的时序,通过单片机给1602写入想要写入的数据
参数介绍:cData:要写入1602的数据
返回值:
注意事项:无
//////////////////////////////////////////////////////////////////////////

void WriteDataLCD(uchar cData)
{
ReadStatusLCD();
LCD_DATAPORT=cData;
LCD_RS=1; // 选中数据寄存器
LCD_RW=0; // 写模式
LCD_EN=1; // 打开1602液晶使能端
_nop_(); // 等待写入数据
_nop_();
_nop_();
LCD_EN=0; // 关闭1602液晶使能端
}
//////////////////////////////////////////////////////////////////////////

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top