新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 簡單的加法計算器單片機c程序設計

        簡單的加法計算器單片機c程序設計

        作者: 時間:2016-11-18 來源:網絡 收藏
        /*

        //----------簡單的加法計算器-----------------
        //------用數碼管顯示兩位數的加法計算器;----------
        //P0作為數碼管的段碼
        //P1作為數碼管的位碼
        //P2口作為矩陣鍵盤0----9,+,=;//本實訓箱只有12個按鍵,P20---P26;P27未用;
        先輸入第一個數,當按+時,清屏,再顯示輸入的第二個數,
        按=時,顯示他們的和,再次按=數據清0;
        //本程序在普中單片機實訓箱上通過

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

        */
        #include"reg51.h"
        #include
        #define uint unsigned int
        #define uchar unsigned char

        uchar code dula[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
        0x7d,0x07,0x7f,0x6f,0x00};
        uchar wula[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
        uchar table[8]={0,0,10,10,10,10,10,10};
        uchar add1[2]={0,10};
        uchar add2[2]={0,10};
        uchar sum[3]={0,10,10};
        uchar sum1,aa,bb,cc;
        bit flagsum,flagadd,flag;
        uchar x,y,z,k,keyword;
        void dispadd1();
        void dispadd2();
        void dispsum();
        void delay(uint z);
        void display();
        void jisuan();
        void keyscan();
        void main()
        {
        keyword=0;
        k=0;
        while(1)
        {
        keyscan();
        if((flagadd==0)&&(flagsum==0))
        dispadd1();
        if((flagadd==1)&&(flagsum==0))
        dispadd2();
        if((flagsum==1))
        dispsum();

        }
        }

        void keyscan()
        {
        uchar temp1,temp2;
        P2=0xf0;
        if(P2!=0xf0)
        {
        delay(100);
        P2=0xf0;
        if(P2!=0xf0)
        {
        temp1=P2;
        P2=0x0f;
        temp2=P2;
        while(P2!=0x0f);
        keyword=temp1|temp2;
        switch(keyword)
        {
        case 0xed: keyword=0;flag=0;break;
        case 0xdd: keyword=1;flag=0;break;
        case 0xbd: keyword=2;flag=0;break;
        case 0x7d: keyword=3;flag=0;break;
        case 0xeb: keyword=4;flag=0;break;
        case 0xdb: keyword=5;flag=0;break;
        case 0xbb: keyword=6;flag=0;break;
        case 0x7b: keyword=7;flag=0;break;
        case 0xe7: keyword=8;flag=0;break;
        case 0xd7: keyword=9;flag=0;break;
        case 0xb7: {flagadd=1;
        flag=1;}break;
        case 0x77: {flagsum=~flagsum;cc++;}break;
        default: break;
        }
        if((flagadd==0)&&(flagsum==0))
        {
        add1[k]=keyword;
        if(k>1)
        k=1;//}
        else
        k++;}
        if((flagadd==1)&&(flagsum==0))
        {if(flag==1)
        {k=0;flag=0;}
        else
        { add2[k]=keyword;
        if(k>1)
        k=1;
        else
        k++;}}
        if(flagsum==1)
        {flagadd=0;flag=0;k=0;
        if(cc==2)
        {cc=0;add1[0]=0;add1[1]=10;
        add2[0]=0;add2[1]=10;
        sum[0]=0;sum[1]=10;sum[2]=10;}
        if(add1[1]!=10)
        aa=add1[0]*10+add1[1];
        else
        aa=add1[0];
        //
        if(add2[1]!=10)
        bb=add2[0]*10+add2[1];
        else
        bb=add2[0];
        sum1=aa+bb;
        sum[0]=sum1/100;
        sum[1]=sum1%100/10;
        sum[2]=sum1%10;

        }
        if(flagsum==0)
        {if(cc==2)
        {cc=0;flagadd=0;flag=0;k=0;
        add1[0]=0;add1[1]=10;
        add2[0]=0;add2[1]=10;
        sum[0]=0;sum[1]=10;sum[2]=10;}
        }

        }
        }
        }

        void dispadd1()
        { uchar i;
        for(i=0;i<2;i++)
        { P0=dula[add1[i]] ;
        P1=wula[i];
        delay(5);
        // P0=0;
        }
        }
        //-----------------
        void dispadd2()
        { uchar i;
        for(i=0;i<2;i++)
        { P0=dula[add2[i]] ;
        P1=wula[i];
        delay(5);
        P0=0;
        }
        }
        //-------------------
        void dispsum()
        { uchar i;
        for(i=0;i<3;i++)
        { P0=dula[sum[i]] ;
        P1=wula[i];
        delay(5);
        P0=0;
        }
        }
        //=====================
        void delay(uint z)
        {
        uint x,y;
        for(x=0;x for(y=0;y<112;y++);
        }



        關鍵詞: 加法計算器單片

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 习水县| 张家口市| 赣州市| 乐都县| 岳西县| 台湾省| 陇西县| 清涧县| 怀化市| 瑞昌市| 望都县| 肇东市| 山丹县| 察隅县| 海林市| 江华| 微山县| 喀喇沁旗| 武清区| 潮州市| 扎鲁特旗| 蕉岭县| 涿州市| 镇平县| 塔城市| 铜陵市| 丰顺县| 扎囊县| 保亭| 正定县| 盐山县| 赤峰市| 兴化市| 松原市| 山东省| 金门县| 遂昌县| 五大连池市| 海盐县| 晋中市| 巴马|