在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于51單片機六位整數(shù)計算器源程序

            基于51單片機六位整數(shù)計算器源程序

            作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
            #include

            #define uint unsigned int
            #define uchar unsigned char
            sbit beep=P2^3; //beep用于控制蜂鳴器(每按一次鍵就為0并且叫一下)
            sbit dula=P2^6; //dula通過控制鎖存器1來控制數(shù)碼管段選
            sbit wela=P2^7; //wela通過控制鎖存器2來控制數(shù)碼管位選
            uchar code table[]={ //數(shù)碼管的顯示編碼
            0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x79};
            uchar fuhao=0,scan=0; //全局變量fuhao用來存放運算符的值 scan作為是否按鍵的標志位(按下就為1沒按為0)
            void delay(uint z); //延時Z毫秒
            void display(long n);//用六位數(shù)碼管顯示long值
            uchar keyscan(); //鍵盤掃描并把掃描得到的值返回
            void displayerror();//顯示錯誤操作提示信息

            void main()
            {
            uchar val=0,j=0,i=0,jie,e=0; //i,j用于判斷每次輸入的數(shù)是否超過六位,e為錯誤操作標志位(為1表示已錯誤操作),jie為顯示計算結(jié)果標志位(為1表示要顯示結(jié)果)
            long a=0,b=0,c=0;//a存放第一次輸入的數(shù),b存放第二次輸入的數(shù),c存放計算的結(jié)果
            display(0); //初始化顯示
            delay(1000); //延時1000毫秒
            while(1)
            {
            beep=1; //關(guān)閉蜂鳴器
            val=keyscan(); //把掃描得到的值賦給val
            if(scan==1) //一旦按下鍵我就對其操作
            {
            scan=0; //把按鍵標志位scan復(fù)位
            if(val==10) //如果按下的為復(fù)位鍵
            {
            a=0;b=0;c=0;fuhao=0;jie=0;e=0;i=0;j=0;display(0);

            本文引用地址:http://www.biyoush.com/article/201611/320204.htm

            //復(fù)位操作(初始化) (顯示是不能停)
            continue; //直接進入下一次循環(huán)
            }
            else if(val>=11&&val<=15&&i==0&&fuhao==0)//如果第一次按下的不是數(shù)字鍵
            {
            display(0); //數(shù)碼管顯示不能停
            continue; //直接進入下一次循環(huán)
            }

            else if(val>=12&&val<=15&&fuhao==0&&i!=0)//輸入數(shù)字之后按下的第一個運算符
            {
            fuhao=val; //把掃描得到運算符值賦給fuhao標志位
            i=0; //一旦輸入運算符就把數(shù)字輸入計數(shù)i清零
            display(0); //數(shù)碼管顯示不能停
            }
            else if(fuhao!=0&&val>=11&&val<=15) //只要按下等于或者運算符之前按了數(shù)字鍵和運算符就顯示計算結(jié)果
            {
            jie=1; //計算結(jié)果標志位jie為1(表示要顯示計算結(jié)果c)
            if(fuhao==12) //如果輸入的是運算符‘+’
            {
            c=a+b; //把運算的結(jié)果賦給c
            if(c>999999)//如果計算結(jié)果超出數(shù)碼管的顯示范圍
            {
            displayerror(); //顯示出錯信息
            e=1; //出錯信息標志位置1
            }
            else
            {
            display(c);//不超出顯示范圍就顯示結(jié)果
            }
            }
            else if(fuhao==13)//如果輸入的運算符是‘-’
            {
            if(a{
            displayerror();
            }
            else
            {
            c=a-b;
            display(c);
            }
            }
            else if(fuhao==14) //如果輸入的運算符是‘*’
            {
            c=a*b;
            if(c>999999)
            {
            displayerror();
            e=1;
            }
            else
            {
            display(c);
            }
            }
            else //如果輸入的運算符是‘/’
            {
            c=a/b;
            display(c);
            }
            }
            else if(val>=0&&val<=9)//如果按下的為數(shù)字鍵
            {
            if(fuhao==0)//如果是第一次按下數(shù)字鍵
            {
            a=a*10+val;//把前面顯示的值左移一位再加當前輸入的數(shù)字存放到a(0到9)
            i++;//每輸入一個數(shù)字,數(shù)字計數(shù)i加1
            if(i>6) //如果連續(xù)輸入數(shù)字超過六位
            {
            displayerror();e=1;//顯示出錯信息且錯誤標志位置1
            }
            else
            {
            display(a);//顯示得到的a
            continue;//進入下次次循環(huán)
            }
            }
            else //第二次按下數(shù)字鍵
            {
            b=b*10+val; //把前面顯示的值左移一位再加當前輸入的數(shù)字存放到b(0到9)
            j++; //第二次輸入數(shù)字的計算變量j加1
            if(j>6) //如果輸入超出數(shù)碼管顯示范圍
            {
            displayerror();e=1;
            }
            else
            {
            display(b);
            continue;
            }
            }
            }

            }
            else //如果沒按下鍵(也要顯示)
            {
            if(e==1) displayerror();//如果出錯標志位為1就顯示出錯信息
            else if(fuhao==0) display(a); //如果還沒輸入運算符(到目前為止還只是輸入數(shù)字)就顯示a
            else if(fuhao!=0&&jie==0) display(b); //如果輸入數(shù)字后又輸了運算符且沒輸入運算符和等于就顯示b
            else if(jie==1) display(c); //如果輸入了結(jié)果標志位就顯示計算結(jié)果c
            else display(0); //其余就初始化顯示
            }

            }
            }

            void delay(uint z)
            {
            uint x,y;
            for(x=z;x>0;x--)
            for(y=110;y>0;y--);
            }


            uchar keyscan()
            {
            uchar num,temp1,temp2,temp; //num用于存放掃描到得按鍵值
            P3=0x0f; //給P3口低四位賦0高四位賦1
            temp1=P3; //讀取P3口的值
            if(temp1!=0x0f) //如果P3口發(fā)生變化
            {
            delay(10);//延時消斗
            temp1=P3;//再次讀取P3口的值
            if(temp1!=0x0f)//如果確實有按鍵按下
            {
            P3=0xf0;//再給P3口高四位賦1低四位賦0
            temp2=P3;//讀取P3口的值
            temp=temp1|temp2;//把兩次讀取的值或運算賦給temp
            switch(temp)//判斷temp按下的是哪個鍵再對num賦值
            {
            case 0xee:num=0;
            break;
            case 0xde:num=1;
            break;
            case 0xbe:num=2;
            break;
            case 0x7e:num=3;
            break;
            case 0xed:num=4;
            break;
            case 0xdd:num=5;
            break;
            case 0xbd:num=6;
            break;
            case 0x7d:num=7;
            break;
            case 0xeb:num=8;
            break;
            case 0xdb:num=9;
            break;
            case 0xbb:num=10;
            break;
            case 0x7b:num=11;
            break;
            case 0xe7:num=12;
            break;
            case 0xd7:num=13;
            break;
            case 0xb7:num=14;
            break;
            case 0x77:num=15;break;
            default: num=16;break;
            }
            while(temp2!=0xf0) //松手檢測
            {
            temp2=P3;
            }
            beep=0;//每掃描到一個num蜂鳴器就叫一下
            scan=1;//已按下鍵
            }
            }
            return num; //返回掃描得到的值
            }

            void displayerror() //最高位顯示E表示出錯信息
            {
            dula=1;
            P0=table[10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xdf;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;
            }

            void display(long n)
            {
            uchar j=0;
            long quan=1;
            if(n==0) //如果n為0則初始化顯示(最高位顯示0)
            {
            wela=1;
            P0=0xdf;
            wela=0;
            dula=1;
            P0=table[0];
            dula=0;
            P0=0xff;
            delay(1);
            wela=1;
            P0=0xff; //把數(shù)碼管全關(guān)掉(用于消掉余輝)
            wela=0;
            }
            else
            {
            while(n/quan!=0) //用于判斷l(xiāng)ong為幾位
            {
            quan=quan*10;
            j++; // j用于存放long的位數(shù)
            }
            if(j==1) //如果long為一位
            {
            wela=1;
            P0=0xdf;
            wela=0;
            dula=1;
            P0=table[n];
            dula=0;
            P0=0xff;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;
            }
            else if(j==2)
            {
            dula=1;
            P0=table[n/10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xef;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[n%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xdf;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;
            }
            else if(j==3)
            {
            dula=1;
            P0=table[n/100];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xf7;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/10)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xef;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[n%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xdf;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;
            }
            else if(j==4)
            {
            dula=1;
            P0=table[n/1000];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfb;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/100)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xf7;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/10)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xef;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[n%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xdf;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;
            }
            else if(j==5)
            {
            dula=1;
            P0=table[n/10000];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfd;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/1000)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfb;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/100)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xf7;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/10)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xef;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[n%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xdf;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;
            }
            else
            {
            dula=1;
            P0=table[(n/100000)];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfe;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/10000)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfd;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/1000)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xfb;
            wela=0;
            delay(1);

            dula=1;
            P0=table[(n/100)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xf7;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

            dula=1;
            P0=table[(n/10)%10];
            dula=0;
            P0=0xff;
            wela=1;
            P0=0xef;
            wela=0;
            delay(1);
            wela=1;
            P0=0xff;
            wela=0;

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



            評論


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

            關(guān)閉