⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 red.h~

📁 用Mega32+VS1003做的MP3(FAT32文件系统浏览)——源代码
💻 H~
字号:
#ifndef _RED_INCLUDED_
#define _RED_INCLUDED_         
#include "lcd13164.h" 
#include "cd3315.h"  
#include "comm.h"   

//蜂鸣器红外接口 
#define RDATA PIND.2 //红外数据输入脚  
uchar keyval=0;//键值暂存
unsigned long order=0;//命令暂存处
uchar times=0;//按键次数,此次按下键的次数
bit READY=0; //红外接收到数据     
bit RPlaying=0;//播放收音机标志

void red_init(void)
{   
    //外部中断0 ,任意电平触发
    GICR|=0x40;
    MCUCR=0x01;
    MCUCSR=0x00;
    GIFR=0x40;
    DDRD.2=0;
}
//检测脉冲长短
uchar check(void)
{
    uchar t=0;
    while(RDATA)
    {
        t++;
        delay_us(20);
        if(t==250)return t; //超时溢出
    }
    return t;
}
//处理红外接收  
/*-------------------------协议--------------------------
开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
接着是发送4个8位二进制码,第一二个是遥控识别码(16),第一个为
正码(16),第二个为反码(239),接着两个数据是键值,第一个为正码
第二个为反码.发送完后40ms,遥控再发送一个9ms低,2ms高的脉冲,
表示按键的次数,出现一次则证明只按下了一次,如果出现多次,则可
以认为是持续按下该键.
---------------------------------------------------------*/
interrupt [EXT_INT0] void ext_int0_isr(void)
{                  
    uchar res=0;
    bit OK=0; 
    bit RODATA=0; 
    while(1)
    {        
        if(RDATA)//有高脉冲出现
        {
            res=check();//获得此次高脉冲宽度       
            if(res==250)break;//非有用信号
            if(res>=200&&res<250)OK=1; //获得前导位(4.5ms)
            else if(res>=85&&res<200)  //按键次数加一(2ms)
            {  
                En_backlight=1;//打开背光
                lasttime=0;//背光持续时间计数器清空
                READY=1;//接受到数据
                times++;//按键次数增加
                break;
            }
            else if(res>=50&&res<85)RODATA=1;//1.5ms
            else if(res>=10&&res<50)RODATA=0;//500us
            if(OK)
            {
                order<<=1;
                order+=RODATA; 
                times=0; //按键次数清零
            }   
        } 
    }            
}  
//处理红外键盘
//返回相应的键值
uchar key_process(void)
{               
    uchar t1,t2;   
    t1=order>>24; //红外解码
    t2=(order>>16)&0xff; 
    READY=0;//清除标记  
    if(t1==~t2&&t1==16)//遥控识别码16(00010000)  
    { 
        t1=order>>8;
        t2=order;  
        if(t1==~t2) //处理键值
        {             
            if(PLAYING||RPlaying)//播放模式
            {                                         
                switch(t1)
                {
                    case 250:
                    {
                        if(voltemp[3])voltemp[3]=0;//关等响
                        else voltemp[3]=1;         //开等响
                        break; //等响开关
                    }
                    case 122:
                    {                          
                        if(voltemp[2]<7)voltemp[2]++;//高音增加  
                        break;
                    }
                    case 234:
                    {
                        if(voltemp[2]>-7)voltemp[2]--;//高音减少
                        break;
                    }         
                    case 184://主音量增加
                    {
                        if(voltemp[0]<63)voltemp[0]++;
                        break;
                    }         
                    case 40://主音量减少
                    {
                        if(voltemp[0]>0)voltemp[0]--;
                        break;                    
                    } 
                    case 120:
                    {                          
                        if(voltemp[1]<7)voltemp[1]++;//低音增加  
                        break;
                    }
                    case 232:
                    {
                        if(voltemp[1]>-7)voltemp[1]--;//低音减少
                        break;
                    }    
                    case 106: 
                    case 242: 
                    case 114: 
                    case 176: 
                    case 112:  //dsp设置 ,只在mp3模式下工作
                    {
                        if(PLAYING)    //radio模式
                        {                          
                            delay_ms(90);
                            if(READY&&times<4)return 0;//按键还在继续
                            return t1; 
                        }
                        break; 
                    } 
                    case 168:
                    case 48:
                    {  
                        if(t1==48)SINGLE=!SINGLE;//单曲?
                        if(RPlaying)    //radio模式
                        {                          
                            delay_ms(90);
                            if(READY&&times<4)return 0;//按键还在继续
                            return t1; 
                        } 
                        break;
                    } 
                    case PREV:
                    case NEXT:
                    {
                        delay_ms(90);
                        if(READY&&times<4)return 0;//按键还在继续
                        return t1; 
                    }  
                    default :return t1; 
                }  
                init_cd3315(Audio_Ch);//选择通道四
            }
            return t1;          
        } 
    }     
    return 0;
}  
 
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -