久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3117|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

紅外遙控制開關(guān)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:60515 發(fā)表于 2015-6-23 09:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


/****************************************************************

程序名稱:  將遙控接收頭接收到的按鍵編碼通過數(shù)碼管顯示出來              
說明:能解碼的遙控編碼必須是NEC 6221/6121/6222編碼方式
      同時(shí)也可以解9012 9018編碼方式
注明: 單片機(jī)使用12M晶體

*****************************************************************/

file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wpsCA.tmp.png


#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define _Nop() _nop_()
#define TURE 1
#define FALSE 0


/*端口定義*/

sbit lcd_rs_port = P3^5;  /*定義LCD控制端口*/
sbit lcd_rw_port = P3^6;
sbit lcd_en_port = P3^4;
#define lcd_data_port P0

///////////////////////////////////
sbit WELA=P2^7; //數(shù)碼管的位選信號(hào)
void delay1 (void)//關(guān)閉數(shù)碼管延時(shí)程序
{
        int k;
        for (k=0; k<1000; k++);

}
////////////////////////////////////

uchar code line0[16]={" user:          "};
uchar code line1[16]={" data:          "};
uchar code lcd_mun_to_char[16]={"0123456789ABCDEF"};

unsigned char  irtime;//紅外用全局變量

bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char   irdata[33];
void ShowString (unsigned char line,char *ptr);

//////////////////////////////////////////////

void Delay(unsigned char mS);
void Ir_work(void);
void Ircordpro(void);


void tim0_isr (void) interrupt 1 using 1//定時(shí)器0中斷服務(wù)函數(shù)
{
        irtime++;
}

void ex0_isr (void) interrupt 0 using 0//外部中斷0服務(wù)函數(shù)
{
        static unsigned char  i;
        static bit startflag;

        if(startflag){
            if(irtime<63&&irtime>=33)//引導(dǎo)碼 TC9012的頭碼
        i=0;   
            irdata[ i]=irtime;
            irtime=0;
            i++;
                   if(i==33){
                          irok=1;
                        i=0;
                          }
                }         
        else{
                irtime=0;
                startflag=1;
                }
}


void TIM0init(void)//定時(shí)器0初始化
{
        TMOD=0x02;//定時(shí)器0工作方式2,TH0是重裝值,TL0是初值
          TH0=0x00;//reload value
          TL0=0x00;//initial value
          ET0=1;//開中斷
          TR0=1;
}

void EX0init(void)
{
        IT0 = 1;   // Configure interrupt 0 for falling edge on /INT0 (P3.2)
        EX0 = 1;   // Enable EX0 Interrupt
        EA = 1;  
}


void Ircordpro(void)//紅外碼值處理函數(shù)
{
        unsigned char i, j, k=1;
        unsigned char cord,value;

        for(i=0;i<4;i++){//處理4個(gè)字節(jié)
                for(j=1;j<=8;j++){ //處理1個(gè)字節(jié)8
                        cord=irdata[k];
                        value=value>>1;
                if(cord>7) value=value|0x80; //大于某值為1
                   k++;
                 }
             IRcord[ i]=value;
             value=0;     
             }
    irpro_ok=1;//處理完畢標(biāo)志位置1   
}
///////////////////////////////////////////
void lcd_delay(uchar ms) /*LCD1602 延時(shí)*/
{
    uchar j;
    while(ms--){
        for(j=0;j<250;j++)
            {;}
        }   
}
//////////////////////////////////////////////
void lcd_busy_wait() /*LCD1602 忙等待*/
{
    lcd_rs_port = 0;
    lcd_rw_port = 1;
    lcd_en_port = 1;
    lcd_data_port = 0xff;
    _Nop();
    _Nop();
        _Nop();
    _Nop();
    while (lcd_data_port&0x80);
    lcd_en_port = 0;
}
///////////////////////////////////////////////
void lcd_command_write(uchar command) /*LCD1602 命令字寫入*/
{
    lcd_busy_wait();
    lcd_rs_port = 0;
    lcd_rw_port = 0;
    lcd_en_port = 0;
    lcd_data_port = command;
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    lcd_en_port = 1;
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    lcd_en_port = 0;     
}
/////////////////////////////////////////
void lcd_system_reset() /*LCD1602 初始化*/
{
    lcd_delay(20);
    lcd_command_write(0x38);
    lcd_delay(100);
    lcd_command_write(0x38);
    lcd_delay(50);
    lcd_command_write(0x38);
    lcd_delay(10);
    lcd_command_write(0x08);
    lcd_command_write(0x01);
    lcd_command_write(0x06);
    lcd_command_write(0x0c);
}
//////////////////////////////////////////////////
void lcd_char_write(uchar x_pos,y_pos,lcd_dat) /*LCD1602 字符寫入*/
{
    x_pos &= 0x0f; /* X位置范圍 0~15 */
    y_pos &= 0x01; /* Y位置范圍 0~ 1 */
    if(y_pos==1) x_pos += 0x40;
    x_pos += 0x80;
    lcd_command_write(x_pos);
    lcd_busy_wait();
    lcd_rs_port = 1;
    lcd_rw_port = 0;
    lcd_en_port = 0;
    lcd_data_port = lcd_dat;
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    lcd_en_port = 1;
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    _Nop();
    lcd_en_port = 0;
}
void Ir_work(void)//紅外鍵值散轉(zhuǎn)程序
                         {
                          switch(IRcord[3])//判斷第三個(gè)數(shù)碼值IRcord[4]
                 {
                        // case 0xDC:P1=0x16;break;//1  有的遙控是解IRcord[2]
                         //case 0x11:P1=0x00;break;//2        只要修改這些健值就可以實(shí)現(xiàn)
                         //case 0x00:P1=0xFF;break;//3
                        // case 0x13:P1=0x4b;break;//0
                         case 0x4B:P1=0xFF;break;// 云龍帶的遙控器是解第四個(gè)健碼。IRcord[3]
                         case 0x07:P1=0x00;break;//
                         case 0x0B:P1=0x16;break;//
                         case 0x13:P1=0x4b;break;//
                         }
                  irpro_ok=0;//處理完成標(biāo)志
                  }
void main(void)
{
        uchar i;
        lcd_system_reset(); /* 初始化LCD1602 */
        lcd_data_port = 0xff;
////////////////////////////////////////////////////////////////
        P0=0XFF;//關(guān)掉數(shù)碼管的位選信號(hào)。阻止數(shù)碼管受到P0口信號(hào)的影響。
        ///P1=0xFF;
        delay1();
        WELA=1;
        delay1();
        WELA=0;
//////////////////////////////////////////////////////////////
        for(i=0;i<16;i++) lcd_char_write(i,0,line0);
        for(i=0;i<16;i++) lcd_char_write(i,1,line1);

        EX0init(); // Enable Global Interrupt Flag
        TIM0init();

         while(1){//主循環(huán)
                  if(irok){   
                           Ircordpro();
                            irok=0;
                          }
            if(irpro_ok){ /*遙控成功接收*/
                        lcd_char_write(8,0,lcd_mun_to_char[IRcord[0]/0x10]);
                        lcd_char_write(9,0,lcd_mun_to_char[IRcord[0]%0x10]);
                        lcd_char_write(11,0,lcd_mun_to_char[IRcord[1]/0x10]);
                        lcd_char_write(12,0,lcd_mun_to_char[IRcord[1]%0x10]);
                        lcd_char_write(8,1,lcd_mun_to_char[IRcord[2]/0x10]);
                        lcd_char_write(9,1,lcd_mun_to_char[IRcord[2]%0x10]);
                        lcd_char_write(11,1,lcd_mun_to_char[IRcord[3]/0x10]);
                        lcd_char_write(12,1,lcd_mun_to_char[IRcord[3]%0x10]);
                        }
                         Ir_work() ;

                  }


}  

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2015-6-23 10:25 | 只看該作者
1602液晶顯示,程序結(jié)構(gòu)清晰,便于修改,按鍵的功能。。非常不錯(cuò)謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 极情综合网 | 久久网站免费视频 | 91精品国产高清一区二区三区 | 日韩高清电影 | 91一区二区在线观看 | 国产一区免费 | 久久久久久久久久久久久91 | 成人超碰在线 | 91高清视频在线观看 | 国产一区久久精品 | 亚洲国产精品一区二区三区 | 中文字幕在线免费观看 | 羞羞视频在线网站观看 | 精品国产一区二区三区久久久久久 | 亚洲国产aⅴ成人精品无吗 亚洲精品久久久一区二区三区 | 亚洲成人av| 亚洲一区二区三区在线免费观看 | 91中文视频 | 国产精品久久久久久久久免费桃花 | 超碰网址 | 99在线观看视频 | 欧美精品成人 | 黄色日本片 | 亚洲精品国产第一综合99久久 | 在线观看亚洲精品视频 | 国产91在线 | 亚洲 | 91九色婷婷 | 日韩美av| 欧美黄色片 | 国内激情av片 | 国产精品久久久亚洲 | 99精品视频免费观看 | 国产精彩视频 | 成人免费一区二区三区牛牛 | 日韩一三区| 成人在线免费观看视频 | 久久成人精品 | 久久久久亚洲 | 国产成人99久久亚洲综合精品 | 男女黄网站 | 国产精品一区二区三区四区 |