新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機學習——獨立按鍵之二

        單片機學習——獨立按鍵之二

        作者: 時間:2016-11-23 來源:網絡 收藏
        題目:數碼管前三位顯示一個跑表,從000到999之間以0.01秒的速度運行,當按下一個獨立按鍵時,跑表停止,按下第二個時計時開始,按下第三個是計數值清零從頭開始。(采用定時器中斷方式)
        解決方案:(C語言編程)
        #include
        #include
        #define uint unsigned int
        #define uchar unsigned char
        uchar bai,shi,ge,num;
        uint shu;
        sbit s=P1^0;
        sbit s2=P1^1;
        sbit s3=P1^2;
        sbit le=P3^6;
        void delay(uint a);
        void dis();
        void display(uchar ba,uchar sh,uchar g);
        uchar code tabledu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
        0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x86,0xc7,0xc7,0xc0,0xff};
        uchar code tablewe[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
        void init()
        {
        shu=0;
        bai=0;
        shi=0;
        ge=0;
        TMOD=0x11;
        TH0=0xd8;
        TL0=0xf0;
        EA=1;
        ET0=1;
        TR0=1;
        }
        void main()
        {
        init();
        while(1){
        if(s==0){
        delay(5);
        if(s==0){
        TR0=0;
        dis();
        }
        }
        if(s2==0){
        delay(5);
        if(s2==0){
        TR0=1;
        dis();
        }
        }
        if(s3==0){
        delay(5);
        if(s3==0){
        TR0=1;
        shu=0;
        dis();
        }
        }
        dis();
        }
        }
        void time0() interrupt 1
        {
        TH0=0xd8;
        TL0=0xf0;
        num++;
        shu++;
        if(shu==999)
        shu=0;
        bai=shu/100;
        shi=shu%100/10;
        ge=shu%10;
        }
        void display(uchar ba,uchar sh,uchar g)
        {
        le=1;
        P2=tablewe[1];
        le=0;
        le=1;
        P0=tabledu[ba];
        le=0;
        delay(5);
        le=1;
        P2=tablewe[2];
        le=0;
        le=1;
        P0=tabledu[sh];
        le=0;
        delay(5);
        le=1;
        P2=tablewe[3];
        le=0;
        le=1;
        P0=tabledu[g];
        le=0;
        delay(5);
        }
        void dis()
        {
        if(num%1==0)
        {
        display(bai,shi,ge);
        }
        if(num%10==0)
        {
        display(bai,shi,ge);
        }
        if(num==10)
        {
        num=0;
        display(bai,shi,ge);
        }
        }
        void delay(uint a) {
        uint i,j;
        for(j=a;j>0;j--)
        for(i=250;i>0;i--);
        }


        關鍵詞: 單片機獨立按

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 收藏| 金乡县| 绥德县| 海门市| 南木林县| 高要市| 临潭县| 吉林省| 阜南县| 石棉县| 于田县| 鄂托克前旗| 棋牌| 会宁县| 莎车县| 通道| 满城县| 屯门区| 嘉黎县| 河南省| 宁波市| 万全县| 错那县| 张家界市| 舞阳县| 七台河市| 民乐县| 芜湖县| 元朗区| 绍兴县| 凌云县| 区。| 万年县| 靖远县| 海盐县| 汨罗市| 屯门区| 东城区| 邢台县| 安庆市| 本溪市|