#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define TURE 1
#define FALSE 0
//#define up 11
//#define down 13
#define ok 15
#define back 10
#define FUN_SET_8_ETD 0X36 //功能设定,8位并行数据,扩充指令操作,开绘图功能
sbit IR=P3^2;//红外接口标志
//12864F管脚定义
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_E = P3^4;
sbit TLV5618_DIN=P2^1;
sbit TLV5618_SCLK=P2^0;
sbit TLV5618_CS=P1^7;
uchar k;
bit irpro_ok,irok;
unsigned char IRcord[4]; //接收到的4*8个编码
unsigned char irdata[33];
unsigned char jzcl[2]; //键值处理暂存
unsigned char irtime;//红外用全局变量
char count;
bit flag=1;
uchar gain=0;
uchar band=0;
/*******************************************************************/
//
// 延时子程序
//
/*******************************************************************/
/*****************************************************************************
函数功能:定时器0中断服务程序
入口参数:无
出口参数:
*****************************************************************************/
void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
{
irtime++;
}
/*****************************************************************************
函数功能:外部中断服务程序
入口参数:无
出口参数:
*****************************************************************************/
void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
{
static unsigned char i;
static bit startflag;
if(startflag)
{
if(irtime<63&&irtime>=33)//引导码 TC9012的头码
i=0;
irdata[i]=irtime;
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{irtime=0;startflag=1;}
}
/*****************************************************************************
函数功能:定时器初始化
入口参数:无
出口参数:
*****************************************************************************/
void TIM0init(void)//定时器0初始化
{
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00;
TL0=0x00;
ET0=1;//开中断
TR0=1;
}
/*****************************************************************************
函数功能:外部中断初始化
入口参数:无
出口参数:
*****************************************************************************/
void EX0init(void)
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
/*****************************************************************************
函数功能:解码显示
入口参数:无
出口参数:
*****************************************************************************/
void Ir_work(void)//红外键值散转程序
{ //unsigned char k;
switch(IRcord[2])
{
//case 0x03 :Dispstr(2,0," muffle "); break; //消音键
case 0x09 :k=10; break; //关机键
case 0x0d :k=1; break;
case 0x19 :k=2; break;
case 0x1b :k=3; break;
case 0x01 :k=4; break;
case 0x11 :k=5; break;
case 0x15 :k=6; break;
case 0x17 :k=7; break;
case 0x06 :k=8; break;
case 0x12 :k=9; break;
//case 0x4c :Dispstr(2,0," signal "); break;
case 0x16 :k=0; break;
//case 0x54 :Dispstr(2,0," pause "); break; //暂停键
case 0x0e :k=13; break; //UP
case 0x0a :k=12; break; //LEFT
case 0x05 :k=15; break; //OK
case 0x1e :k=14; break; //RIGHT
case 0x1a :k=11; break; //DOWN
//case 0x1c :Dispstr(2,0," menu "); break;
//case 0x51 :Dispstr(2,0," track "); break; //
//case 0x5c :Dispstr(2,0," 9menu "); break;
//case 0x0c :Dispstr(2,0," VOIC - "); break;
//case 0x02 :Dispstr(2,0," VOIC + "); break;
}
irpro_ok=0;
//return k;
}
/*****************************************************************************
函数功能:红外解码
入口参数:无
出口参数:
*****************************************************************************/
void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
k=1;
for(i=0;i<4;i++)//处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
if(cord>7)//大于某值为1
{
value=value|0x80;
}
else
{
value=value;
}
if(j<8)
{
value=value>>1;
}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}
/*****************************************************************************
函数功能:程序外部接口函数
当调用此函数时,显示就键值,并返回键值
入口参数:无
出口参数:
*****************************************************************************/
void jm(void)
{ //char temp;
if(irok)
{
Ircordpro();
irok=0;
}
if(irpro_ok)
{
//Dispstr(1,0,disp);
Ir_work();
// if(k==up)
/*{ count++;
if(count>4)count=0;
}
else if(k==down)
{ count--;
if(count<1)count=4;
} */
}
}
void Delay(int ms)
{
int i;
while(ms--) //
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void Delay_ms(uint t)
{
uint i;
while(t--)
{
for(i=0; i<125; i++)
{; }
}
}
void delay_1ms(uint time2) //延时约 time *1ms
{
//uchar ttt;
uint t1;
while(time2--)
{t1=89;
while(t1--);
}
}
/*us级延时,延时时间约4+2*i*/
/*void Delayus(uchar j)
{
while(--j);
}
/*******************************************************************/
//
// 检查LCD忙状态
// lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。
//
/*******************************************************************/
bit Lcd_busy()
{
bit result;
Delay(1);
P0 = 0XFF;
LCD_RS = 0;
LCD_RW = 1;
LCD_E = 1;
_nop_();
评论0