新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機數碼管的代碼例子

        基于51單片機數碼管的代碼例子

        作者: 時間:2016-11-24 來源:網絡 收藏
        #include

        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit dula=P2^6;
        sbit wela=P2^7;
        uchar code table[]={ //編碼表 code為把程序放入ROM區
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,
        0x76,0x79,0x38,0x3f,0};
        uchar temp,t0,t1,bai,shi,ge,flag,flag1; //flag flag1 為2個標志位
        uint shu;
        void init();
        void display(uchar,uchar,uchar,uchar,uchar,uchar);
        void delay(uint z)
        {
        uint t1,y;
        for(t1=z;t1>0;t1--)
        for(y=110;y>0;y--);
        }
        void main()
        {
        init();
        while(1)
        {
        if(flag1!=1)
        display(7,6,5,bai,shi,ge);
        else
        display(16,17,18,18,19,20);
        }
        }

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

        void init()
        {
        shu=432;
        temp=0xfe;
        P1=temp;
        TMOD=0x11;//初始化這里用了2個定時器
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%6;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
        }

        void timer0() interrupt 1 //timer0 定時到處理函數 中斷處理函數
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        t0++;
        if(flag!=1)
        {
        if(t0==10)
        {
        t0=1;
        temp=_crol_(temp,1);
        P1=temp;
        }
        }
        else
        {
        if(t0%4==0)
        P1=~P1;
        if(t0==60)
        {
        TR0=0;
        P1=0xff;
        flag1=1;
        }
        }
        }

        void timer1() interrupt 3 //timer1的定時處理函數, 中斷處理函數
        {
        TH1=(65536-50000)/256;
        TL1=(65536-50000)%6;
        t1++;
        if(t1==2)
        {
        t1=0;
        shu--;
        bai=shu/100;
        shi=shu0/10;
        ge=shu;
        if(shu==398)
        {
        TR0=0;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        TR0=1;
        flag=1;
        t0=0;
        P1=0xff;
        TR1=0;
        }
        }
        }

        void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g)
        {
        dula=1;
        P0=table[aa];
        dula=0;
        P0=0xff;//防止位選的時候其他幾個數碼管有殘影 0xff都關掉了,在賦值位選
        wela=1;
        P0=0xfe;
        wela=0;
        delay(1);

        dula=1;
        P0=table[bb];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(1);

        dula=1;
        P0=table[cc];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(1);
        dula=1;
        P0=table[ba];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        delay(1);

        dula=1;
        P0=table[sh];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xef;
        wela=0;
        delay(1);

        dula=1;
        P0=table[g];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xdf;
        wela=0;
        delay(1);
        }

        以上代碼來源于網絡,僅供參考,我看了遍覺得可以學學。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鹤岗市| 湘潭市| 吴江市| 杂多县| 迁安市| 定安县| 晋州市| 汉沽区| 怀宁县| 莲花县| 宁化县| 赣州市| 昔阳县| 宁德市| 廊坊市| 深州市| 陇川县| 景洪市| 云安县| 如皋市| 绥棱县| 八宿县| 沾化县| 呼玛县| 米易县| 沛县| 县级市| 钦州市| 佛教| 宁波市| 绵阳市| 综艺| 巴林右旗| 蒲城县| 察哈| 辉县市| 开封县| 来凤县| 马尔康县| 江安县| 原阳县|