添加链接描述## 红外无线控制单片机播放图片与音乐
通过无线红外模块来控制51单片机来实现图片、音乐自由切换。
系统概要图:

音乐播放程序:
音乐播放流程图如3-2-1所示
分析音乐播放的过程,其为不同频率声音的组合,当一组恰当频率声音组合按照一定的先后顺序与节拍播放时,即可产生音乐。故要产生音频信号,只要算出某一音频的周期,将此周期除以2即为半周期的时间,利用定时器计时此半周期时间,计时到后取反输出,重复此过程即得到此频率的声音信号。此信号从P2.3脚输出,用ULN2003驱动蜂鸣器播放音乐。其中每个音符使用两个字节表示:低位字节(偶地址)代表音级,表示的音级为c、﹟c、d、﹟d、e、f、……a3、﹟a3、b3;高位字节(奇地址)代表音符的时值(节拍),表示拍数为1/8拍(0.10s)~8拍(6.40s)。
程序设计中用软件延时程序来控制音级, 与红外解码共用定时器0进行节拍的控制,并在播放和暂停播放中随时判断是否有红外信号的改变,以便随时更换或结束音乐。本设计中歌曲的音符存在一个数组中,以在开始位置和在中间位置播放不同的曲目
控制发声频率:
要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。利用STC89C52RC的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0从而产生不同频率。此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为0x00,则表示曲子终了;若查表结果为0xff,则产生相应的停顿效果。
以标准音高A为例,A的频率是440Hz,周期T=1/440=2272us。在占空比为50%的情况下,导通时间=断开时间=半周期t=2272us/2=1136us,利用P3^4端口的位操作,经过不断地反相变换即可得到标准音高A的音频脉冲。端口导通时间与断开时的时间利用定时器实现。具体的方法是将单片机定时器的中断触发时间设为半周期t,这样每隔半周期端口反相,输出连续的对应音高的频率。
设晶振的频率为f0,中断触发时间(半周期)为t,定时器工作在模式1时计数器的初值为THL,高8位为THL,低8位为TL。时钟周期即为1/f0,定时器每一次累加用去一个机器周期,一个机器周期包含12个时钟周期,即定时器每次加一所用时间是12/f0。定时器在模式1下计时采用16位数,最大计数为2^16-1(65535),再次加一(65536)溢出触发中断

12864液晶显示程序
如图3-2-2 12864实物图、3-2-3点阵图所示:
12864点阵液晶显示模块(LCM)就是由12864个液晶显示点组成的一个128列64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数液晶显示模块的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的6464液晶屏拼接而成,每半屏有一个5128 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在6464液晶屏上的位置由行号(line,063)与列号(column,063)确定。5128 bits RAM中某个存储单元的地址由页地址(Xpage,07)和列地址(Yaddress,063)确定。每个存储单元存储8个液晶点的显示信息。
为了使液晶点位置信息与存储地址的对应关系更直观关,将6464液晶屏从上至下8等分为8个显示块,每块包括8行64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。(注意:二进制的高低有效位顺序与行号对应关系因不同商家而不同)存放一个显示块的RAM区称为存储页。即6464液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,07)和列地址(Yaddress,063)。例如点亮12864的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据00010000(也可能是00001000,高低顺序取决于制造商)写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。



数码管显示图片与音乐的编号就不多讲啦
项目代码如下:

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit IR=P3^2;  //红外接口标志
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^0;//定义锁存使能端口 段锁存
sbit LATCH2=P2^1;//                 位锁存
sbit LCD1602=P2^5;
sbit P2_3=P2^3;
void Draw_PM(const uchar *ptr);
void Ir_work(void);
void Ircordpro(void);
uchar time;
unsigned char IRcord[4];
sbit DU = P2^0; //段选,申明U1锁存器的锁存端,锁存器使用的是74HC573
sbit WE= P2^1;  //位选,申明U2锁存器的锁存端,锁存器使用的是74HC573
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
int n;
/*
延时函数
*/
void delay1() //位码的转换   3*5*125=1875ms=1.875s
{for(n=0;n<125;n++);
}
void  xianshi(){
while(IRcord[2]==0x0c){DU=1;P0=0x77;  //第一位断码DU=0;WE=1;P0=0xfe;     //第一位位码WE=0;delay1();DU=1;P0=0x3f;   //第二位断码DU=0;WE=1;P0=0xfd;    //第二位位码WE=0;delay1();DU=1;P0=0x3f;   //第三位断码DU=0;WE=1;P0=0xfb;    //第三位位码WE=0;delay1();DU=1;P0=0x06;   //第四位断码DU=0;WE=1;P0=0xf7;    //第四位位码WE=0;delay1();Ircordpro();}
}
void xianshi1(){
while(IRcord[2]==0x18){DU=1;P0=0x77;  //第一位断码DU=0;WE=1;P0=0xfe;     //第一位位码WE=0;delay1();DU=1;P0=0x3f;   //第二位断码DU=0;WE=1;P0=0xfd;    //第二位位码WE=0;delay1();DU=1;P0=0x3f;   //第三位断码DU=0;WE=1;P0=0xfb;    //第三位位码WE=0;delay1();DU=1;P0=0x59;   //第四位断码DU=0;WE=1;P0=0xf7;    //第四位位码WE=0;delay1();Ircordpro();
}
}
void xianshi2(){
while(IRcord[2]==0x5e){DU=1;P0=0x77;  //第一位断码DU=0;WE=1;P0=0xfe;     //第一位位码WE=0;delay1();DU=1;P0=0x3f;   //第二位断码DU=0;WE=1;P0=0xfd;    //第二位位码WE=0;delay1();DU=1;P0=0x3f;   //第三位断码DU=0;WE=1;P0=0xfb;    //第三位位码WE=0;delay1();DU=1;P0=0x4f;   //第四位断码DU=0;WE=1;P0=0xf7;    //第四位位码WE=0;delay1();Ircordpro();}}
bit flag; //标志音乐输出脚电平的高低
uchar ptr = 0x00; //取音符
uchar high; //计数器高位
uchar low; //计数器低位
// 本曲谱为 "新年好",前两个十六进制表示发声频率,后一个表示发声时间,0xFF,0xFF 表示休止符
// 0x00 表示结束
// 1 _ 1_ 1 .5
uchar code music[] = {
0xFC,0x44,0x7F, 0xFC,0x44,0x7F, 0xFC,0x44,0xFF, 0xFA,0x68,0xFF,
// 3 _ 3_ 3 1
0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
// 1_ 3_ 5 5
0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFD,0x82,0xFF, 0xFD,0x82,0xFF,
// 4_ 3_ 2 -
0xFD,0x23,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFF,0xFF,0xFF,
// 2_ 3_ 4 4
0xFC,0xAC,0x7F, 0xFD,0x23,0x7F, 0xFD,0x34,0xFF, 0xFD,0x34,0xFF,
// 3_ 2_ 3 1
0xFD,0x23,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x23,0xFF, 0xFC,0x44,0xFF,
// 1_ 3_ 2 .5
0xFC,0x44,0x7F, 0xFD,0x23,0x7F, 0xFC,0xAC,0xFF, 0xFA,0x68,0xFF,// .7_ 2_ 1 -
0xFC,0x0C,0x7F, 0xFC,0xAC,0x7F, 0xFC,0x44,0xFF, 0xFF,0xFF,0xFF,
0x00//结束
};
uchar code music1[]={
0xFC,0x44,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x09,0x7F, 0xFC,0x44,0xFF,
// 1 _ 2 3_1           5
0xFC,0x44,0x7F, 0xFC,0xAC,0x7F, 0xFD,0x09,0x7F, 0xFC,0x44,0xFF,
// 1_ 2 3_1
0xFD,0x09,0x7F, 0xFD,0x34,0x7F, 0xFD,0x82,0xFF,
// 3_ 4 5
0xFD,0x09,0x7F, 0xFD,0x34,0x7F, 0xFD,0x82,0xFF,
// 3_ 4 5
0xFD,0x82,0x7F, 0xFD,0xCB,0x7F, 0xFD,0x82,0x7F,0xFD,0x34,0x7F,0xFD,0x09,0X7F,0XFC,0X44,0XFF,
// 5_ 6 5_4 3 1
0xFD,0x82,0x7F, 0xFD,0xCB,0x7F, 0xFD,0x82,0x7F,0xFD,0x34,0x7F,0xFD,0x09,0X7F,0XFC,0X44,0XFF,
// 5_ 6 5_4 3 1
0xFC,0xAC, 0X7F,0xFC,0x44,0X7F, 0xFC,0xAC,0X7F,0xFA,0x44,0xFF,
// 2 5  1 0
0xFC,0xAC,0X7F, 0xFC,0x44,0X7F, 0xFC,0xAC,0X7F, 0xFA,0x44,0xFF,
0x00
};/*********************************************************************************
* 名称:Init()
* 功能:设置计数器0 工作方式,16 位计数,溢出中断方式
**********************************************************************************/
void Init()
{TMOD = 0x10; //定时器0 处于计时方式,16 位EA = 1;ET1 = 1; //定时器0 溢出中断
}
/*********************************************************************************
* 名称:DelayMs(unsigned int time)
* 功能:延时time * 1ms 时间
*********************************************************************************/
void DelayMs(unsigned int time)
{unsigned int i;unsigned int j;for (j =0; j < time; j++) //每个循环 约 3ms{for (i =0; i < 363; i++){;}}
}
void yinyue(){Init();TH1= high;TL1 =low;
}void yinyue1(){while(IRcord[2]==0x08){DU=1;P0=0x77;  //第一位断码DU=0;WE=1;P0=0xfe;     //第一位位码WE=0;delay1();DU=1;P0=0x3f;   //第二位断码DU=0;WE=1;P0=0xfd;    //第二位位码WE=0;delay1();DU=1;P0=0x3f;   //第三位断码DU=0;WE=1;P0=0xfb;    //第三位位码WE=0;delay1();DU=1;P0=0x66;   //第四位断码DU=0;WE=1;P0=0xf7;    //第四位位码WE=0;delay1();Ircordpro();if (music[ptr] != 0xFF && music[ptr] != 0x00)//判断是否是正常音符{TR1 = 0;P2_3 = 1;DelayMs(10); //间歇TR1 = 1;high = music[ptr]; //取设置频率数值的高8 位low = music[ptr + 1]; //取设置频率数值的低8 位time = music[ptr + 2]; //取发声时间DelayMs(time);ptr += 3;}else if (music[ptr] == 0xFF) //判断是否是休止符{time = music[ptr + 2];DelayMs(time); ptr += 3;}else //结束符,停止2 秒后继续{TR1 = 0;P2_3 = 1;DelayMs(2000);ptr = 0;}TR1 = 0;P2_3 = 1;  Ircordpro();}}
void yinyue2(){while(IRcord[2]==0x1c){DU=1;P0=0x77;  //第一位断码DU=0;WE=1;P0=0xfe;      //第一位位码WE=0;delay1();DU=1;P0=0x3f;   //第二位断码DU=0;WE=1;P0=0xfd;    //第二位位码WE=0;delay1();DU=1;P0=0x3f;   //第三位断码DU=0;WE=1;P0=0xfb;    //第三位位码WE=0;delay1();DU=1;P0=0x6d;   //第四位断码DU=0;WE=1;P0=0xf7;    //第四位位码WE=0;delay1();Ircordpro();if (music1[ptr] != 0xFF && music1[ptr] != 0x00)//判断是否是正常音符{TR1 = 0;P2_3 = 1;DelayMs(10); //间歇TR1 = 1;high = music1[ptr]; //取设置频率数值的高8 位low = music1[ptr + 1]; //取设置频率数值的低8 位time = music1[ptr + 2]; //取发声时间DelayMs(time);ptr += 3;}else if (music1[ptr] == 0xFF) //判断是否是休止符{time = music1[ptr + 2];DelayMs(time); ptr += 3;}else //结束符,停止2 秒后继续{TR1 = 0;P2_3 = 1;DelayMs(2000);ptr = 0;}TR1 = 0;P2_3 = 1;   Ircordpro();}}
/*********************************************************************************
* 名称:Count1(void) interrupt 1
* 功能:设置计时器0 溢出中断,每中断一次改变P2_3 引脚电平
*********************************************************************************/
void Count1(void) interrupt 3
{TH1 = high;TL1 = low;if (flag == 0) //改变P2_3 引脚电平{P2_3 = 0;flag = 1;}else{P2_3 = 1;flag = 0;}
}/*------------------------------------------------全局变量声明
------------------------------------------------*/unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char  irtime;//红外用全局变量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];/*12864端口定义*/
#define LCD_data  P0             //数据口
sbit LCD_RS  =  P1^0;            //寄存器选择输入
sbit LCD_RW  =  P1^1;            //液晶读/写控制
sbit LCD_EN  =  P2^5;            //液晶使能控制
sbit LCD_PSB =  P1^2;            //串/并方式控制
sbit wela    =  P2^6;
sbit dula    =  P2^7;unsigned char code zhu[]=        //图片代码
{
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x07,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x03,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x01,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0xFF,0xE1,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0xFF,0xFF,0xFF,
0x4F,0xFF,0xFF,0xFE,0x00,0x61,0xCF,0xFF,0xF9,0xFF,0xC0,0x00,0x00,0xFF,0xFF,0xFF,
0x47,0xFF,0xFF,0xF0,0x00,0x40,0xC7,0xFF,0xF8,0xFF,0xC3,0x80,0x70,0x7F,0xFF,0xFF,
0x47,0xFF,0xFF,0x3E,0x3C,0x04,0x47,0xFF,0xF8,0xFF,0xCF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x44,0x01,0xE1,0x60,0x60,0x04,0x47,0xE1,0xC0,0xFF,0xFF,0xF7,0xBF,0xFF,0xFF,0xFF,
0x44,0x00,0xC0,0xC0,0x40,0x18,0x47,0xC0,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x44,0x44,0x60,0x44,0x40,0x30,0xC7,0xC6,0x08,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,
0x44,0x44,0x60,0x44,0x40,0x61,0xC7,0xC7,0x88,0xFF,0xFF,0x3E,0x3F,0xFF,0xFF,0xFF,
0x44,0x44,0x40,0x44,0x46,0x43,0xC7,0xC7,0x88,0xFF,0xFF,0x9D,0x1F,0xFF,0xFF,0xFF,
0x44,0x44,0x44,0x04,0x04,0x47,0xC7,0xC4,0x88,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,
0x44,0x44,0x60,0x00,0x00,0x00,0xC0,0x60,0x40,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x66,0x66,0x70,0x60,0x00,0x00,0x60,0x30,0xE0,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0x8C,0x7F,0xC3,0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0x80,0x7F,0xF3,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0xB0,0xFE,0x7B,0xFF,0xFF,0xFF,0xFF,0xF0,0x80,0x1B,0xFF,0xFF,0xFF,
0x7F,0xFF,0xFF,0xBF,0xFF,0xFB,0xFF,0xFF,0xFF,0xF8,0xB0,0x20,0x13,0xEF,0xFF,0xFF,
0x7F,0xFF,0xFF,0xFF,0x7E,0xFF,0xFF,0xFF,0xFF,0x00,0xFB,0x80,0x03,0xE0,0x1F,0xFF,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x50,0xE0,0x07,0xE8,0x07,0xFF,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x78,0x7E,0xC0,0x03,0xFF,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x1F,0xEE,0xC0,0x01,0xFF,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x07,0xFC,0xC0,0x00,0xFF,
0x7F,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0x80,0x00,0x02,0x03,0xFD,0x80,0x20,0x7F,
0x7F,0xFF,0xFF,0xF7,0xE1,0xCF,0xFF,0xFF,0x00,0x00,0x01,0x00,0xF9,0x80,0x20,0x3F,
0x7F,0xFF,0xFF,0xFF,0xE0,0x1F,0xFF,0xFE,0x00,0x00,0x00,0x00,0xF9,0x00,0x20,0x3F,
0x7F,0xFF,0xFE,0xDE,0x00,0x1F,0xFF,0xFC,0x00,0x00,0x00,0xF9,0xFF,0x00,0x20,0x3F,
0x7F,0xFF,0xFC,0x0F,0x00,0x00,0x3F,0xF8,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1F,
0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x03,0xF0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1F,
0x7F,0xFF,0xFF,0xFF,0xA3,0xE0,0x03,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1F,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x1B,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x30,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x11,
0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x18,0x00,0x03,0xFF,0xFF,0xFC,0x7F,0xE0,0x01,
0x7F,0xFF,0xC3,0xFF,0xC7,0xFF,0xFE,0x0E,0x00,0x03,0xFF,0xFC,0x00,0x7F,0xE0,0x00,
0x7F,0xF8,0x03,0xFF,0xC3,0xFF,0xFE,0x06,0x00,0x03,0xFF,0x1E,0x78,0x7F,0xE0,0x01,
0x7F,0xC0,0x03,0xFF,0xF8,0x07,0xFE,0x07,0x00,0x03,0xFF,0x8E,0x60,0xFF,0xE0,0x07,
0x7F,0x00,0x03,0xFB,0x00,0x07,0xFC,0x01,0x00,0x03,0xFF,0xC6,0x01,0xFF,0xEE,0x0F,
0x7F,0x00,0x03,0xF3,0x88,0x7F,0xFC,0x00,0x00,0x0B,0xF0,0x06,0x13,0xFF,0xFF,0xFF,
0x7F,0x00,0x03,0xF9,0xF1,0xE7,0xFC,0x03,0xE0,0x01,0xF0,0x7E,0x73,0x1F,0x0F,0xFF,
0x7E,0x00,0x7F,0xFF,0xC0,0x07,0xF7,0x83,0xFF,0x7C,0x7C,0xFE,0x70,0x1F,0x5B,0xFF,
0x7E,0x01,0xFF,0xFB,0xC0,0x03,0xF7,0xD2,0x7E,0xF1,0x7C,0xFE,0x00,0xFC,0xEF,0xFF,
0x7C,0x03,0xFF,0xF3,0xF3,0xE3,0xF3,0x40,0xFE,0x88,0xFC,0xFF,0x09,0xFF,0xFF,0xFF,
0x78,0x03,0xFE,0xF3,0xF2,0x0F,0xE0,0xE0,0x7F,0xE3,0x7C,0xF8,0x39,0xF9,0xF3,0xFF,
0x60,0x03,0xFD,0xF3,0xF2,0x47,0xE1,0xF8,0x7C,0x83,0xDC,0x00,0x38,0xF9,0xE3,0xFF,
0x60,0x03,0xD9,0xFF,0xF8,0x47,0xE1,0xF8,0xFE,0x43,0xFC,0x0F,0x38,0xF3,0xE0,0x7F,
0x40,0xD9,0xE3,0xFE,0x79,0x07,0xC1,0xF0,0xFE,0x05,0xFF,0xFF,0x30,0x73,0xE7,0xFF,
0x00,0xF2,0x01,0xFE,0x71,0x27,0x80,0xE0,0x7F,0x2C,0xFF,0xFF,0x07,0x03,0xE1,0xFF,
0x00,0x50,0x03,0xFC,0x72,0x27,0x00,0x00,0x3F,0xF8,0xFF,0xFF,0x0F,0x83,0xE1,0xFF,
0x01,0x00,0x03,0xFC,0xF2,0x27,0x80,0x00,0x02,0x00,0x7F,0xFF,0xFF,0xFF,0xE3,0xFF,
0x40,0x00,0x03,0xF1,0xF7,0x30,0x00,0x00,0x10,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x40,0x00,0x03,0xF3,0xFF,0xF8,0x20,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x60,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x70,0x00,0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x02,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x78,0x00,0x03,0xFF,0xFF,0xFF,0xA0,0x00,0x02,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x7C,0x00,0x17,0xFF,0xFF,0xFE,0x80,0x00,0x06,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x04,0x00,0x1F,0xFE,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x00,0x00,0x04,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x04,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x04,0x04,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};
unsigned char code zhu1[]=     //图片代码
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0x50,0x00,0x50,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x04,0x00,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0x01,0x0B,0x15,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x40,0x00,0x88,0x00,0x00,0x06,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x80,0x00,0x60,0x00,0x00,0x05,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x03,0x90,0x00,0x01,0xB6,0x36,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x01,0xFE,0x36,0x00,0x00,0x00,
0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x01,0xB6,0x36,0x00,0x00,0x00,
0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0xA0,0x00,0x03,0x6F,0xFF,0x00,0x00,0x00,
0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x1D,0x00,0x00,0x00,0x00,0x2C,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0xC0,0x00,0x00,0x00,0x28,0x00,0x00,0x00,
0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x80,0x00,0x00,0x1F,0x08,0x47,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x20,0x00,0x00,0x3D,0x13,0x0C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x08,0x10,0x00,0x00,0x27,0xA0,0x18,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x10,0x00,0x00,0x3F,0x80,0x38,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x03,0xE0,0x00,0x33,0x90,0x3F,0xC7,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xB0,0x00,0x33,0x10,0x7F,0x87,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x08,0x24,0xF0,0x0C,0x0E,0x00,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xF0,0xC2,0x00,0x00,0xFE,0x1F,0x81,0xB3,0xE6,0xD8,0xF0,0x00,
0x00,0x00,0x08,0x46,0x71,0x06,0x00,0x08,0x3F,0x1F,0x01,0xF6,0x67,0xF9,0xB0,0x00,
0x00,0x00,0x00,0x03,0x20,0x98,0x00,0x00,0x3F,0xFF,0x01,0xB6,0xC6,0xD9,0x80,0x00,
0x00,0x00,0x08,0x40,0xC0,0x24,0x00,0x04,0x3F,0x1F,0x03,0x7F,0xFD,0xBE,0xFC,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1E,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x0E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x87,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x88,0x00,0x01,0x8C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x01,0x8E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0xB6,0x06,0xDB,0x6C,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x06,0xDB,0x6C,0x00,
0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x40,0x00,0x01,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x94,0xA4,0x68,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x42,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x20,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x14,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
unsigned char code zhu2[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0xF0,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0xFF,0xF8,0x3F,0x00,0x00,0x78,0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x07,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,0xDF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0xFC,0x00,0x00,0x00,0x00,0x3F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x0F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x07,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFE,0x00,0x3F,0xFF,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFC,0x00,0x1F,0xFF,0x00,0x10,0x00,0x7F,0xF0,0x07,0x68,0x90,0x00,0x00,0x00,
0x07,0xFC,0x00,0x00,0x7F,0x80,0x3E,0x00,0x3F,0xF0,0x30,0x01,0x80,0x00,0x00,0x00,
0x03,0xF8,0x00,0x00,0x0F,0x80,0x0F,0x80,0x3F,0xF0,0x46,0x00,0x00,0x00,0x00,0x00,
0x01,0xF8,0x00,0x00,0x07,0xC0,0x01,0xC0,0x1F,0xE0,0xB1,0x80,0x02,0x80,0x00,0x00,
0x00,0x70,0x00,0x03,0x00,0xC0,0x44,0x00,0x1F,0xC0,0x42,0xE2,0x80,0x15,0x00,0x00,
0x00,0x30,0x00,0xFF,0xF8,0x00,0x00,0x00,0x0F,0x01,0x92,0x00,0x22,0x01,0x00,0x00,
0x00,0x20,0x00,0x03,0xF8,0x00,0x00,0x00,0x08,0x07,0x48,0xA0,0x0C,0xB0,0x38,0x00,
0x00,0x40,0x00,0x00,0x00,0x00,0x78,0x00,0x08,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x00,0x03,0x80,0x00,0x4F,0x00,0x04,0x0B,0x02,0x00,0x02,0x00,0x00,0x00,
0x00,0xC0,0x00,0x00,0x00,0x00,0x1F,0x80,0x04,0x0D,0xC0,0x00,0x01,0x00,0x40,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x07,0xE0,0x00,0x06,0x2C,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x0C,0x00,0x04,0x03,0xF0,0x00,0x48,0xDE,0x10,0x00,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0xF0,0x18,0x80,0xD0,0x00,0x00,
0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x02,0x00,0xC0,0x01,0xAC,0x00,0x00,0x00,
0x03,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x02,0x01,0xD9,0x00,0x70,0x00,0x00,0x00,
0x03,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x02,0x07,0xFE,0x70,0x80,0x00,0x00,0x00,
0x0E,0x00,0x00,0x3E,0x30,0x00,0x20,0x00,0x03,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,
0x1E,0x00,0x00,0x78,0x1F,0xE0,0x10,0x00,0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,
0x7E,0x00,0x00,0x30,0x0F,0xFC,0x18,0x00,0x03,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0xFE,0x00,0x00,0x10,0x03,0xFF,0x8C,0x00,0x03,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,
0xFE,0x00,0x00,0x0C,0x00,0x7C,0x00,0x00,0x03,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x03,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,
0xFF,0x80,0x00,0x00,0x01,0xFC,0x00,0x00,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,
0xFF,0xC0,0x00,0x00,0x60,0x0F,0xF0,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,
0xFF,0xE0,0x00,0x00,0x30,0x00,0x00,0x00,0x0F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,
0xFF,0xF0,0x00,0x00,0x04,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
0xFF,0xF8,0x00,0x00,0x03,0x80,0x80,0x00,0x3F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFC,0x00,0x00,0x01,0xFF,0x00,0x00,0x7F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0x00,0x00,0x00,0x04,0x00,0x01,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void delay0(uchar x);  //x*0.14MS
//void beep();
//void  dataconv();
void lcd_pos(uchar X,uchar Y);  //确定显示位置void delay(int ms)
{while(ms--){uchar i;for(i=0;i<250;i++)  {_nop_();               _nop_();_nop_();_nop_();}}
}   /*------------------------------------------------定时器0初始化
------------------------------------------------*/
void TIM0init(void)//定时器0初始化 红外定时器
{TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值TH0=0x00; //重载值TL0=0x00; //初始化值ET0=1;    //开中断TR0=1;
}/*------------------------------------------------外部中断0初始化
------------------------------------------------*/
void EX0init(void) //判断红外键值的下降沿
{IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)EX0 = 1;   //使能外部中断EA = 1;    //开总中断
}
/*------------------------------------------------定时器0中断处理
------------------------------------------------*/void tim0_isr (void) interrupt 1 using 1
{irtime++;  //用于计数2个下降沿之间的时间
}/*------------------------------------------------外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
{static unsigned char  i;             //接收红外信号处理static bit startflag;                //是否开始处理标志位if(startflag)                         {if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5msi=0;irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1irtime=0;i++;if(i==33){irok=1;i=0;}}else{irtime=0;startflag=1;}}
/*------------------------------------------------键值处理
------------------------------------------------*/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,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差value|=0x80;if(j<8){value>>=1;}k++;}IRcord[i]=value;value=0;     } irpro_ok=1;//处理完毕标志位置1
}//图片/*******************************************************************/
/*                                                                 */
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*                                                                 */
/*******************************************************************/
bit lcd_busy(){                          bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;delayNOP();result = (bit)(P0&0x80);LCD_EN = 0;return(result); }
/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{                          while(lcd_busy());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_(); P0 = cmd;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;
}
/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(uchar dat)
{                          while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;delayNOP();LCD_EN = 1;delayNOP();LCD_EN = 0;
}
/*******************************************************************/
/*                                                                 */
/*  LCD初始化设定                                                  */
/*                                                                 */
/*******************************************************************/
void lcd_init()
{ LCD_PSB = 1;         //并口方式lcd_wcmd(0x34);      //扩充指令操作delay(5);lcd_wcmd(0x30);      //基本指令操作delay(5);lcd_wcmd(0x0C);      //显示开,关光标delay(5);lcd_wcmd(0x01);      //清除LCD的显示内容delay(5);
}/*******************************************
函数名称:Draw_PM
功    能:在整个液晶屏幕上画图
参    数:无
返回值  :无
********************************************/
void Draw_PM(const uchar *ptr)
{uchar i,j,k;wela=1;dula=1;PT1=1; lcd_wcmd(0x34);        //打开扩展指令集i = 0x80;            for(j = 0;j < 32;j++){lcd_wcmd(i++);lcd_wcmd(0x80);for(k = 0;k < 16;k++){lcd_wdat(*ptr++);}}i = 0x80;for(j = 0;j < 32;j++){lcd_wcmd(i++);lcd_wcmd(0x88);       for(k = 0;k < 16;k++){lcd_wdat(*ptr++);} }  lcd_wcmd(0x36);        //打开绘图显示lcd_wcmd(0x30);        //到基本指令集
}void Ir_work(void)//红外键值散转程序
{switch(IRcord[2])//判断第三个数码值{case 0x0c:Draw_PM(zhu);xianshi();break;//1 显示相应的按键值case 0x18:Draw_PM(zhu1);xianshi1();break;//PT1=1;yinyue()2PT1=0;TR1=1;lcd_wcmd(0x01);yinyue1();Ircordpro();case 0x5e:Draw_PM(zhu2);xianshi2();break;//3DataPort=dofly_DuanMa[3];yinyue1();Ircordpro();break;case 0x08:yinyue1();Ircordpro();break;//4case 0x1c:yinyue2();Ircordpro();break;//5case 0x5a:DataPort=dofly_DuanMa[6];break;//6case 0x42:DataPort=dofly_DuanMa[7];break;//7case 0x52:DataPort=dofly_DuanMa[8];break;//8case 0x4a:DataPort=dofly_DuanMa[9];break;//9default:break;}irpro_ok=0;//处理完成标志}main(){   //      shumaguan();
//    shumaguan1();
//    shumaguan2();xianshi();xianshi1();xianshi2(); //图片wela=1;dula=1;//  uchar time; lcd_init();                //初始化LCD yinyue();yinyue1();   //红外EX0init(); //初始化外部中断TIM0init();//初始化定时器LCD1602=0;DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110LATCH2=1;      //位锁存LATCH2=0;while(1)//主循环不断扫描红外按键{if(irok)                        //如果接收好了进行红外处理{   Ircordpro();irok=0;}if(irpro_ok)                   //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等{Ir_work();
/*     if(IRcord[2]==0x18) {} */}}}

如果大家想看完整项目可以到我上传的资源下载,链接如下:
点击跳转https://download.csdn.net/download/weiweiweiIT/12239736

红外无线控制单片机播放图片与音乐相关推荐

  1. 基于Arduino的红外遥控器控制MP3播放

    基于Arduino的红外遥控器控制MP3播放(MP3音乐模块.红外接收模块.红外遥控器) ✨通过红外遥控器来控制音乐播放

  2. android语音控制歌曲播放,发条 - 支持音乐聚合搜索,歌单导入,语音控制的 APP - Android 应用 - 【最美应用】...

    而小美今天要介绍的这款 App,在一定程度上就可以缓解这个问题: 发条,说起来是一款讯飞出品的语音助手软件,不过功能主要集中在音乐上,它聚合了 QQ音乐.网易云音乐以及酷狗酷我的资源,在使用上也有着独 ...

  3. 当本本遇上蓝牙手机——玩转蓝牙无线上网、无线控制

    蓝牙无线上网 相信所有读者都知道手机能够通过WAP/GPRS上网,不过可能有些读者并不知道通过蓝牙互连,笔记本同样可以通过手机畅游互联网(当然,网速的最大理论值只有115.2Kbps). 安装驱动及设 ...

  4. 单片机并行口控制蜂鸣器播放音乐

    要用单片机并行口控制蜂鸣器播放音乐,需要完成以下步骤: 设计音乐:需要先确定音乐的节拍和音符,并将其转换为代码中的数值. 设置并行口:需要将单片机的并行口配置为输出模式,以便控制蜂鸣器. 编写代码:需 ...

  5. 【毕业设计】43-基于单片机的红外无线防盗报警系统设计与实现(原理图工程源文件+源代码+实物图+答辩论文)

    typora-root-url: ./ [毕业设计]43-基于单片机的红外无线防盗报警系统设计与实现(原理图工程源文件+源代码+实物图+答辩论文) 文章目录 typora-root-url: ./ [ ...

  6. Arduino红外遥控无源蜂鸣器播放音乐

    Arduino红外遥控无源蜂鸣器播放音乐/模拟电子琴 简介 关于频谱 实验材料 接线 实验代码 模拟电子琴 接线 代码 总结 原文链接:https://www.yourcee.com/newsinfo ...

  7. 单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...

    基于C语言的计算机与多单片机红外无线串口通信的实现 基于C语言的计算机与多单片机红外无线 串口通信的实现 黄文亮 信息学院 电子信息工程专业 指导教师 刘传菊 摘要:计算机与一台或多台单片机的通信系统 ...

  8. 单片机音乐播放器课程设计C语言,单片机课程设计简易音乐播放器

    单片机课程设计简易音乐播放器 论文题目:简易音乐播放器所属系部:电子工程系 指导教师: 学生姓名: 学 号: 专 业: 电子信息工程技术 题目: 简易音乐播放器任务与要求:本设计以 MCS-51 系列 ...

  9. 【毕业设计】28-基于单片机的音乐播放器简易音乐播放器设计(原理图+源代码+仿真工程+答辩PPT+答辩论文)

    typora-root-url: ./ [毕业设计]28-基于单片机的音乐播放器简易音乐播放器设计(原理图+源代码+仿真工程+答辩PPT+答辩论文) 文章目录 typora-root-url: ./ ...

最新文章

  1. 如何编辑Subversion中已提交的日志消息?
  2. c语言自学技巧,轻松学C语言,教给你学习技巧
  3. 快讯:Oracle自治事务处理数据库发布和19c路线图
  4. 零样本学习的相关概念——综述
  5. snownlp抛出错误_请教大家有关SnowNLP分词、词性标注、情感分析的问题
  6. 雷塞控制器SMC304简单介绍
  7. 《八扇屏》贯口全本(共22番)
  8. tomcat中的过滤器
  9. 新西兰计算机预科学费多少钱,留学新西兰预科费用及课程
  10. “假努力”与“假关心”
  11. 前端工程师的三种级别,技术决定你能拿5K,还是15K,还是25K
  12. React系统性学习(下)
  13. Python ACM模式
  14. java代码递归查找部门和子部门id
  15. 网站抢单搭建什么服务器,12306抢票、嘀嘀抢单服务器如何搭建?
  16. 2013年9月25日星期三(demo5_2点法式平面)
  17. 素质拓展·【团建宝】千岛湖皮划艇+露营+环岛骑行2日团建-【携程旅游】
  18. 高端电动汽车制造商蔚来使用Panasas ActiveStor存储加速产品设计和开发
  19. Golang 优化之内存对齐
  20. adb命令——上传和下载文件

热门文章

  1. 大数据时代的“小数据 系列3 --Shapiro-Wilk检验
  2. Python xlwings 更新表格sheet
  3. MobaXterm下载及使用教程
  4. 提升“逻辑思维”应该读什么书?
  5. 微信授权登陆步骤(微信客户端内)
  6. chrome代理插件下载安装
  7. 智能锁和普通锁有多大区别?智能锁安装,你知道多少?
  8. 学习第五篇:【SpringBoot-Labs】Spring Boot 调试环境、热部署入门、Lombok、MapStruct入门
  9. USB(三)——如何识别设备插入
  10. 国美海尔联姻能否白头到老?