新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于89C52與DT9122D紅外遙控用數(shù)碼管顯示

        基于89C52與DT9122D紅外遙控用數(shù)碼管顯示

        作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
        本實(shí)驗(yàn)是89C52DT9122D紅外遙控的鍵值顯示在數(shù)碼管上,希望對(duì)朋友們有幫助,程序如下:

        #include
        #include
        typedefunsigned int uint;
        typedefunsigned char uchar;

        本文引用地址:http://www.104case.com/article/201611/322562.htm

        uchar code smg_tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數(shù)碼管段碼0~F

        sbit IRINPUT=P3^2;//紅外線接收頭端口

        uchar IR_Input_Buffer[]={0x00,0x00,0x00,0x00};
        uchar Display_Buffer[]={0x00,0x00};//數(shù)碼管顯示緩沖
        //-------------------------------------------------/
        //函數(shù)功能:延時(shí)函數(shù)(MS)              /
        //入口參數(shù):x/
        //出口函數(shù):無/
        //------------------------------------------------/
        void _delay_ms(uint x)
        {
        uchar i;
        while(x--)for(i=0;i<120;i++);
        }
        //-------------------------------------------------/
        //函數(shù)功能:延時(shí)函數(shù)(140US)           //
        //入口參數(shù):x//
        //出口函數(shù):無//

        void _delay_us(uint x)
        {
        uchar i;
        while(x--)
        for(i=0;i<13;i++);
        }
        //-------------------------------------------------/
        //函數(shù)功能:中斷0初始化             /
        //入口參數(shù):無//
        //出口函數(shù):無//

        void IR_INT0(void)
        {
        EX0=1;
        IT0=1;
        EA=1;
        }
        //------------------------------------------------/
        //函數(shù)功能:顯示函數(shù)(把接收到數(shù)據(jù)顯示在數(shù)碼管)   /
        //入口參數(shù):無/
        //出口函數(shù):無  /
        //------------------------------------------------/
        void Show_IR_Input_Value(void)
        {
        P2=0x7f;
        P0=smg_tab[Display_Buffer[0]];
        _delay_ms(2);
        P2=0xbf;
        P0=smg_tab[Display_Buffer[1]];
        _delay_ms(2);
        }
        //--------------------------------------------------/
        //函數(shù)功能:主函數(shù)(程序入口)            /
        //入口參數(shù):無/
        //出口函數(shù):無  /
        //------------------------------------------------/
        void main(void)
        {
        IR_INT0();
        IRINPUT=1;
        while(1)
        {
        Show_IR_Input_Value();
        }
        }
        //--------------------------------------------------/
        //函數(shù)功能:外部中斷0函數(shù)             /
        //入口參數(shù):無/
        //出口函數(shù):無  /
        //-------------------------------------------------/
        void Display_IR_Input_Value(void) interrupt 0//紅外遙控信號(hào)進(jìn)行鍵值解碼和糾錯(cuò).
        {

        uchar i,j,k,N=0;
        EX0=0;
        _delay_us(15);
        for(i=0;i<14;i++)
        {
        if(IRINPUT)
        {
        EX0=1;
        return;
        }
        }
        while(!IRINPUT)
        _delay_us(1);
        for(j=0;j<4;j++)
        {
        for(k=0;k<8;k++)
        {
        while(IRINPUT)
        _delay_us(1);
        while(!IRINPUT)
        _delay_us(1);
        while(IRINPUT)
        {
        _delay_us(1);
        N++;
        if(N>=30)
        {
        EX0=1;
        return;
        }
        }
        IR_Input_Buffer[j]=IR_Input_Buffer[j]>>1;
        if(N>=8)
        IR_Input_Buffer[j]=IR_Input_Buffer[j]|0x80;
        N=0;
        }
        }
        if(IR_Input_Buffer[2]!=~IR_Input_Buffer[3])
        {
        EX0=1;
        return;
        }
        Display_Buffer[0]=IR_Input_Buffer[2]&0x0f;
        Display_Buffer[1]=IR_Input_Buffer[2]>>4;
        EX0=1;
        }



        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 浦北县| 上饶市| 景洪市| 定陶县| 登封市| 芦溪县| 察哈| 长白| 霞浦县| 翁源县| 夹江县| 治多县| 大兴区| 平顺县| 彭泽县| 青阳县| 铁岭县| 乌拉特后旗| 绩溪县| 河西区| 宜良县| 阳江市| 方正县| 巴青县| 桃源县| 灵丘县| 新蔡县| 宿迁市| 鲁甸县| 乐亭县| 南乐县| 正定县| 云霄县| 东兰县| 都兰县| 峨山| 望都县| 诸暨市| 湖口县| 垦利县| 宜阳县|