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

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

QQ登錄

只需一步,快速開始

搜索
查看: 3213|回復(fù): 1
收起左側(cè)

用STC15W408AS的PCA模塊編寫的NEC編碼紅外遙控器程序

[復(fù)制鏈接]
ID:311310 發(fā)表于 2019-7-14 22:07 來自手機(jī) | 顯示全部樓層 |閱讀模式
/*******標(biāo)準(zhǔn)NEC編碼遙控器*********/
/*采用PCA高速脈沖輸出實(shí)現(xiàn)脈沖調(diào)制*/
/******紅外載波信號(hào)頻率38KHz******/
/*******YUAN HUA FEI*******/
#include<STC15W408AS.h>
#define uchar unsigned char
#define uint unsigned int
#define TOG0_OPEN  0X04//PCA翻轉(zhuǎn)控制位開
#define TOG0_CLOSE 0XFB//PCA翻轉(zhuǎn)控制位關(guān)
#define KEY P1         //矩陣鍵盤在P1口,P10~P15
sbit Ir = P3^7;        //脈沖信號(hào)輸出端口

uchar xdata CODEA=0X28;//用戶碼1
uchar xdata CODEB=0X04;//用戶碼2
uint xdata TS =0;      //中斷計(jì)數(shù)
uchar xdata Keycode;   //存放讀取到的鍵值

void delayms(uint ms)
{
        uchar x,y;
        for(ms;ms>0;ms--)
        for(x=250;x>0;x--)
        for(y=12;y>0;y--);       
}

void Init_PCA()        //初始化PCA
{
        CMOD = 0x02;  //設(shè)置PCA時(shí)鐘源為系統(tǒng)時(shí)鐘SYSclk/2
        CCON = 0;     //初始化PCA控制寄存器
        CCAPM2 = 0X4D;//高速脈沖輸出模式
        CL = 0;
        CH = 0;       //當(dāng)計(jì)數(shù)器值等于PCA寄存器值產(chǎn)生中斷一次
        CCAP2L =0X8A; //設(shè)置PCA寄存器初值
        CCAP2H =0X00;

        CR = 0;       //PCA定時(shí)器關(guān)閉工作
        EA = 1;
}

void PCA_INT() interrupt 7 using 1
{
        TS++;
        CCF2 = 0;//清中斷標(biāo)志
        CL = 0;  //復(fù)位PCA計(jì)數(shù)器
        CH = 0;
}

void Infrared(uchar dat)
{
        uchar xdata m,n;
  uchar xdata user_code;//用戶碼
  uchar xdata data_code;//數(shù)據(jù)碼
       
        CR = 1;
        CCAPM2 |=TOG0_OPEN;//允許脈沖輸出脈沖
        while(TS<687);//9ms脈沖
        TS = 0;
        CCAPM2 &=TOG0_CLOSE;//關(guān)閉脈沖輸出脈沖       
        Ir = 0;       
        while(TS<343);//4.5ms低電平       
        TS = 0;
       
        for(m=0;m<2;m++)
        {
                if(m==0)user_code=CODEA;//用戶碼1
                else    user_code=CODEB;//用戶碼2
               
                for(n=0;n<8;n++)//從最低位依次發(fā)送
                {
                        if(user_code &0X01)
                        {
                                CCAPM2 |=TOG0_OPEN;//允許翻轉(zhuǎn)輸出脈沖               
                                while(TS<43);//0.56ms脈沖
                                TS = 0;
                                CCAPM2 &=TOG0_CLOSE;//關(guān)閉翻轉(zhuǎn)輸出脈沖       
                                Ir = 0;                       
                                while(TS<129);//1.69ms低電平       
                                TS = 0;
                        }
                        else
                        {
                                CCAPM2 |=TOG0_OPEN;//允許翻轉(zhuǎn)輸出脈沖               
                                while(TS<43);//0.56ms脈沖
                                TS = 0;
                                CCAPM2 &=TOG0_CLOSE;//關(guān)閉翻轉(zhuǎn)輸出脈沖
                                Ir = 0;                       
                                while(TS<43);//0.565ms低電平       
                                TS = 0;       
                        }
                                user_code >>=1;
                }
        }

        for(m=0;m<2;m++)
        {
                if(m==0)data_code= dat;//數(shù)據(jù)碼
                else    data_code=~dat;//數(shù)據(jù)碼反碼
          for(n=0;n<8;n++)//從最低位依次發(fā)送
                {
                                if(data_code &0X01)
                                {
                            CCAPM2 |=TOG0_OPEN;//允許翻轉(zhuǎn)輸出                       
                                        while(TS<43);//0.56ms脈沖
                                        TS = 0;
                                        CCAPM2 &=TOG0_CLOSE;//關(guān)閉翻轉(zhuǎn)輸出       
                                        Ir = 0;                                       
                                        while(TS<129);//1.69ms低電平       
                                        TS = 0;
                                }
                                else
                                {
                                        CCAPM2 |=TOG0_OPEN;//允許翻轉(zhuǎn)輸出                               
                                        while(TS<43);//0.56ms脈沖
                                        TS = 0;
                                        CCAPM2 &=TOG0_CLOSE;//關(guān)閉翻轉(zhuǎn)輸出                                       
                                        Ir = 0;                                       
                                        while(TS<43);//0.565ms低電平       
                                        TS = 0;
                                }
                                        data_code >>=1;
                }
        }
       
        CCAPM2 &=TOG0_CLOSE;//關(guān)閉脈沖輸出       
        CR = 0;Ir = 0;
}

void Key_code() //4X2矩陣鍵盤
{
        char n=0;//按鍵釋放時(shí)間,連按操作時(shí)可一直按著
        KEY=0X3C;//先設(shè)置列輸出低電平
        if(KEY!=0X3C) //判斷是否有按鍵按下
        {
                delayms(10);//延時(shí)消除按鍵抖動(dòng)
                if(KEY!=0X3C)//再次檢測(cè)鍵盤是否按下
                {       
                        switch(KEY)//獲取鍵碼行值
                        {
                                case(0X38):        Keycode=1;break;//第1行
                                case(0X34):        Keycode=2;break;//第2行
                                case(0X2C): Keycode=3;break;//第3行
                                case(0X1C):        Keycode=4;break;//第4行                       
                        }
                }       
                KEY=0X03;//設(shè)置行輸出低電平       
                delayms(1);//延時(shí)等待I/O口翻轉(zhuǎn)再檢測(cè)               
                if(KEY!=0X03)//再次檢測(cè)鍵盤是否按下
                {                               
                        switch(KEY)//將行值與列值相加得到鍵碼
                        {
                                case(0X02):Keycode+=0;break;//第1列
                                case(0X01):Keycode+=4;break;//第2列
                        }
                }
                        while((n<50)&&(KEY=0X03))//等待按鍵釋放或計(jì)時(shí)退出
                        {
                                delayms(5);
                                n++;
                        }
                                Infrared(Keycode);//發(fā)送鍵碼        數(shù)據(jù)
        }
}

void main()
{
        P3M0 = 0X80;//將P37設(shè)置為推挽輸出模式
        P3M1 = 0X00;
        Init_PCA();
        while(1)
        {
          Key_code();
        }

}

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:370644 發(fā)表于 2019-8-30 21:04 | 顯示全部樓層
樓主,這個(gè)程序您有測(cè)試過嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线免费中文字幕 | 欧美一级视频免费看 | av一区在线观看 | 91一区| 日韩精品一区二区三区中文字幕 | 欧美一区二区在线观看 | 91精品国产日韩91久久久久久 | 国产黄色精品在线观看 | 91色视频在线观看 | 免费一区在线观看 | av一二三区 | 日本在线免费看最新的电影 | 一级做受毛片免费大片 | 欧美日韩亚洲二区 | 日韩精品网站 | 国产精品一区二区三区久久 | 国产伦一区二区三区视频 | 日韩欧美国产一区二区 | 国产日韩久久久久69影院 | 中文二区 | 美女啪啪国产 | 奇米超碰 | 夜夜爽99久久国产综合精品女不卡 | 视频一区二区中文字幕 | 国产日韩精品一区 | 在线观看中文字幕亚洲 | 国产一区二区三区日韩 | 国产午夜精品一区二区三区四区 | 国产91亚洲精品 | 奇米影视77 | 久久精品成人热国产成 | 欧美一二三 | 国产高清视频一区二区 | 国产成人精品999在线观看 | 日韩有码一区 | 天天影视色综合 | 成人超碰| 亚洲成人动漫在线观看 | 一级毛片网 | 久久亚洲国产 | 久草在线|