新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)實(shí)現(xiàn)BPC電波鐘解碼C程序

        51單片機(jī)實(shí)現(xiàn)BPC電波鐘解碼C程序

        作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
        //使用STC12C5202單片機(jī),晶振使用12M的,速度是12倍速的,電波鐘模塊引腳是接在單片機(jī)P3^2口的

        //數(shù)碼管是使用動(dòng)態(tài)掃描的方式,四位數(shù)碼管顯示
        #include
        #define uchar unsigned char
        #define uint unsigned int
        uchar xiaoshi,fenzon;
        uchar tt=0;
        #define duan P1
        uchar code tab[]={ 0x12,/*0*/
        0xD7,/*1*/
        0x4A,/*2*/
        0x43,/*3*/
        0x87,/*4*/
        0x23,/*5*/
        0x22,/*6*/
        0x57,/*7*/
        0x02,/*8*/
        0x03,/*9*/
        };
        sbit fen=P3^3;
        sbit sf =P3^4;
        sbit si =P3^5;
        sbit ss =P3^7;
        sbit led=P3^0;
        /////////////////////////////////////////////////////////////////////////////
        sbit MKin =P3^2; //電波鐘模塊信號(hào)引腳
        uint shu=0;
        uchar a[7];
        void delay(uint k)
        {
        while(k--);
        }
        void duo_MoKuai()
        {
        uchar i=0;
        for(;i<6;i++)
        {
        a[i]=0;
        }
        shu=0;
        while(shu<116) //找啟始碼1.8秒低電平
        {
        if(!MKin)
        {
        delay(12000); //延時(shí)16mS
        shu++;
        }
        else shu=0;
        }
        delay(2000); tt=0;
        while(!MKin)delay(2000); //等待高電平結(jié)束
        delay(12000);
        /////////////////////////////////////////////////////////////////////////////
        while(MKin)delay(2000); //這是第一個(gè)脈沖;//根據(jù)協(xié)議該位只能是0、1、2,不能是3否則超出范圍,表示接收錯(cuò)誤,從新同步
        delay(12000);
        while(!MKin)delay(2000);
        delay(12000);
        while(MKin)delay(2000); //這是第二個(gè)脈沖;//根據(jù)協(xié)議,該位必須為0,否則就是錯(cuò)誤,認(rèn)為丟失同步,故也不需要進(jìn)行效驗(yàn)積累計(jì)算
        delay(12000);
        while(!MKin)delay(2000);
        delay(2000);
        while(MKin) //第三位//這是小時(shí)的十位
        {
        delay(12000);
        a[0]++;
        }
        delay(12000);
        while(!MKin)delay(2000);
        delay(2000);
        while(MKin) //第四位 //這是小時(shí)的個(gè)位
        {
        delay(12000);
        a[1]++;
        }
        delay(12000);
        while(!MKin)delay(2000);
        delay(2000);
        while(MKin) //第五位//這是分鐘的高位
        {
        delay(12000);
        a[2]++;
        }
        delay(12000);
        while(!MKin)delay(2000);
        delay(2000);
        while(MKin) //第六位//這是分鐘的中位
        {
        delay(12000);
        a[3]++;
        }
        delay(12000);
        while(!MKin)delay(2000);
        delay(2000);
        while(MKin) //第七位//這是分鐘的低位
        {
        delay(12000);
        a[4]++;
        }
        delay(12000);
        }
        void Zuan_Huan()
        {
        uchar k;
        duo_MoKuai(); //讀電波鐘模塊
        for(k=0;k<5;k++)
        {
        if(27>(a[k])>23) a[k]=0x03;
        else if(17<(a[k])<21) a[k]=0x02;
        else if(11<(a[k])<15) a[k]=0x01;
        else if(8>(a[k])>5) a[k]=0;
        }

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

        xiaoshi=((a[0])*4)|(a[1]);
        fenzon=(((a[2])*16)|((a[3])*4)|(a[4]));
        }
        /////////////////////////////////////////////////////////////////
        void desplay()
        {
        duan=tab[xiaoshi/10];
        ss=0;
        delay(2000);
        ss=1;
        duan=tab[xiaoshi%10];
        si=0;
        delay(2000);
        si=1;
        duan=tab[fenzon/10];
        sf=0;
        delay(2000);
        sf=1;
        duan=tab[fenzon%10];
        fen=0;
        delay(2000);
        fen=1;
        }

        void main()
        {
        uint aa;
        while(1)
        {
        Zuan_Huan();
        for(aa=0;aa<1000;aa++)
        desplay();
        }
        }



        關(guān)鍵詞: 51單片機(jī)BPC電波鐘解

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 武山县| 郁南县| 哈尔滨市| 吉安县| 固镇县| 邹平县| 内丘县| 福鼎市| 任丘市| 厦门市| 越西县| 阿克陶县| 文水县| 石景山区| 灵宝市| 衡山县| 五指山市| 朝阳县| 陈巴尔虎旗| 息烽县| 巫溪县| 威远县| 开远市| 咸丰县| 望奎县| 同心县| 湘潭市| 杭锦后旗| 行唐县| 株洲市| 大同县| 湘阴县| 台南县| 文昌市| 寻甸| 柳林县| 镇江市| 玉林市| 四川省| 通江县| 民丰县|