新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MC-51單片機紅綠燈+數碼管計時實驗

        MC-51單片機紅綠燈+數碼管計時實驗

        作者: 時間:2016-11-24 來源:網絡 收藏
        單片機實驗

        //主機板的P1接口 平接 顯示板P00接口 即數碼管段選接口
        //主機板的P3接口 平接 顯示板P20接口 即數碼管位選接口
        //主機板的P0接口 平接 顯示板燈的接口

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

        #include
        unsigned char time[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
        int n = 2000;//每半秒中斷一次

        bit change=1;
        bit Shan=1;//閃

        //定義顯示管為位選特殊位
        sbit A=P3^7;
        sbit B1=P3^6;
        sbit C=P3^5;
        sbit G1=P3^4;
        sbit daul = P3^3;


        ZY();//左右通行
        SX();//上下通行
        ZYS();//左右綠燈閃
        SXS();//上下綠燈閃

        lock();
        delay();

        //一下定義使燈亮的特殊位
        sbit ZL=P0^0;
        sbit ZH=P0^1;
        sbit SH=P0^2;
        sbit SL=P0^3;
        sbit YH=P0^4;
        sbit YL=P0^5;
        sbit XH=P0^6;
        sbit XL=P0^7;
        //
        unsigned char rl=70;
        unsigned char ud=45;
        unsigned int working=0;//
        unsigned char num;


        main()
        {
        TMOD=2;//設置定時/計數器0工作方式2
        TH0=6;//初值為6,定時4000
        TL0=6;//初值為6
        TR0=1;
        ET0=1;
        EA=1;
        working = rl*2;

        while(1){
        if(change==1&&Shan==1){//
        ZY();
        }else if(change==1&&Shan==0){
        ZYS();
        }else if(change==0&&Shan==1){
        SX();
        }else if(change==0&&Shan==0){
        SXS();
        }

        num=working/2;

        P1=time[num];
        daul=1;
        A=1;B1=1;C=1;
        G1=1;
        delay();
        lock();

        P1=time[num/10];
        daul=1;
        A=0;B1=1;C=1;
        G1=1;
        delay();
        lock();

        }

        //
        }


        //中斷程序

        T0_int() interrupt 1{
        n--;
        if(n==0){
        if(working!=0&&change==1){
        if(working<=4){//最后兩秒閃
        Shan=!Shan;
        }
        working--;
        n=2000;
        }else if(working==0&&change==1){
        change=!change;
        working = ud*2;
        n=2000;
        }else if(working!=0&&change==0){
        if(working<=6){//最后3秒閃
        Shan=!Shan;
        }
        working--;
        n=2000;
        }else if(working==0&&change==0){
        change=!change;
        working = rl*2;
        n=2000;
        }
        }
        }

        ZY(){//左右綠燈亮,上下紅燈亮
        YL=0;//右綠
        ZL=0;//左綠
        SH=0;//上紅
        XH=0;//下紅
        //
        ZH=1;
        YH=1;
        SL=1;
        XL=1;
        }

        SX(){//上下綠燈亮,左右紅燈亮
        YL=1;//
        ZL=1;
        SH=1;
        XH=1;
        //
        ZH=0;
        YH=0;
        SL=0;
        XL=0;
        }

        ZYS(){//左右綠燈閃爍
        YL=1;
        ZL=1;
        SH=0;
        XH=0;
        //
        ZH=1;
        YH=1;
        SL=1;
        XL=1;
        }

        SXS(){//上下綠燈閃爍
        YL=1;//
        ZL=1;
        SH=1;
        XH=1;
        //
        ZH=0;
        YH=0;
        SL=1;
        XL=1;
        }

        lock(){
        daul=0;
        G1=0;
        }

        delay(){
        int i=40;
        while(i>0){
        i--;
        }
        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 峨眉山市| 定州市| 张家港市| 饶平县| 弋阳县| 当阳市| 河津市| 汉川市| 那曲县| 塔河县| 峡江县| 岑溪市| 云浮市| 偃师市| 阿坝县| 耒阳市| 清涧县| 荆门市| 分宜县| 江源县| 徐州市| 扎赉特旗| 兴安盟| 同心县| 冕宁县| 凉城县| 甘肃省| 松阳县| 白朗县| 武宁县| 轮台县| 鹿邑县| 册亨县| 宜兴市| 新邵县| 临桂县| 嘉鱼县| 茶陵县| 南召县| 资兴市| 胶州市|