<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)設(shè)計(jì)的帶余數(shù)的簡易計(jì)算器

          單片機(jī)設(shè)計(jì)的帶余數(shù)的簡易計(jì)算器

          作者: 時(shí)間:2016-09-29 來源:網(wǎng)絡(luò) 收藏

            原理圖:

          本文引用地址:http://www.ex-cimer.com/article/201609/310574.htm

            

           

            

           

            

           

            程序設(shè)計(jì):

            #include

            #include

            #include

            #define uchar unsigned char

            #define uint unsigned int

            sbit BEEP = P3^6; //蜂鳴器驅(qū)動(dòng)線

            unsigned char code disp_code[]={

            0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

            0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//數(shù)碼管顯示

            uchar key; //鍵盤值

            uchar num; //掃描位數(shù)

            int temp1=0; //結(jié)果整數(shù)部分

            uint temp2=0; //結(jié)果余數(shù)部分

            int m=0; //

            uchar ss[8]; //

            uchar flag; //運(yùn)算標(biāo)志位

            bit c_flag=0; //輔助標(biāo)志位

            unsigned char code key_code[]={

            0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,

            0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 }; //鍵盤編碼

            unsigned char code num_code[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //顯示位數(shù)

            /**********************************************************

            延時(shí)子函數(shù)

            **********************************************************/

            void delayms(uint ms)

            {

            uchar t;

            while(ms--)

            {

            for(t = 0; t < 120; t++);

            }

            }

            /**********************************************************

            x*0.14MS 延時(shí)子函數(shù)

            **********************************************************/

            void delay0(uchar x)

            {

            uchar i;

            while(x--)

            {

            for (i = 0; i<13; i++);

            }

            }

            /**********************************************************

            蜂鳴器驅(qū)動(dòng)子函數(shù)

            **********************************************************/

            void beep()

            {

            uchar i;

            for (i=0;i<180;i++)

            {

            delay0(5);

            BEEP=!BEEP; //BEEP取反

            }

            BEEP=1; //關(guān)閉蜂鳴器

            delayms(250); //延時(shí)

            }

            /**********************************************************

            鍵盤掃描子函數(shù)

            **********************************************************/

            uchar keyscan()

            {

            uchar scan1,scan2,keycode,j;

            P1=0xf0;

            scan1=P1;

            if((scan1&0xf0)!=0xf0) //判鍵是否按下

            {

            delayms(10); //延時(shí)30ms

            scan1=P1;

            if((scan1&0xf0)!=0xf0) //二次判鍵是否按下

            {

            P1=0x0f;

            scan2=P1;

            keycode=scan1|scan2; //組合成鍵編碼

            for(j=0;j<=15;j++)

            {

            if(keycode== key_code[j]) //查表得鍵值

            {

            key=j;

            return(key);

            }

            }

            }

            }

            else P1=0xff;

            return (16);

            }

            /*****************************************************

            顯示數(shù)據(jù)子程序

            ********************************************************/

            void display(int xx,uint yy)

            { uchar tt=0;

            uint x1;

            uint y1=yy;

            while(yy!=0) //顯示余數(shù)

            {ss[tt]=yy%10;

            yy=yy/10;

            tt++ ;

            num=tt;

            }

            if(y1!=0) //顯示——

            {ss[tt]=16;

            tt++;

            ss[tt]=16;

            tt++;

            }

            x1=abs(xx); //顯示整數(shù)

            while(x1!=0)

            {ss[tt]=x1%10;

            x1=x1/10;

            tt++ ;

            num=tt;

            }

            if(xx<0) //顯示符號(hào)

            { ss[tt]=16;

            tt++;

            num=tt;}

            for(tt=0;tt

            {

            P0=disp_code[ss[tt]];

            delayms(5);

            if(P2==num_code[num-1])

            P2= 0x7f;

            else P2=_cror_(P2,1);

            }

            }

            /**********************************************************

            判鍵是否按下子函數(shù)

            **********************************************************/

            void keydown()

            {

            uchar tt=0;

            P1=0xf0;

            if((P1&0xf0)!=0xf0)

            {

            keyscan();

            beep();

            if(key>9&&c_flag==0)

            {switch(key)

            {case 10:flag=1;temp1=m;c_flag=1;m=0;break;

            case 11:flag=2;temp1=m;c_flag=1;m=0;break;

            case 12:flag=3;temp1=m;c_flag=1;m=0;break;

            case 13:flag=4;temp1=m;c_flag=1;m=0;break;

            case 14:m=-m;break;

            case 15:break;

            }

            }

            if(key==14&&c_flag==1)

            m=-m;

            if(key<=9)

            {if(m>=0) m=m*10+key;

            if(m<0) m=m*10-key; }

            if(key<=9&&flag==5)

            {

            flag=0;

            c_flag=0;

            temp1=temp2=0;

            }

            }

            if(key==15)

            {switch(flag)

            {case 1:temp1=temp1+m;break;

            case 2:temp1=temp1-m;break;

            case 3:temp1=temp1*m;break;

            case 4:temp2=abs(temp1)%m;temp1=temp1/m;break;

            default:;

            }

            flag=5;

            m=0;

            }

            }

            void main()

            {

            P0 = 0xc0;

            P2 = 0x7f; //數(shù)碼管顯示"0"

            P1 = 0xff;

            while(1)

            {

            keydown();

            if(flag==5)

            display(temp1,temp2);

            else display(m,0);

            }

            }

            實(shí)物照片:

            



          關(guān)鍵詞: 單片機(jī) 計(jì)算器

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();