新聞中心

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

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

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

          原理圖:

        本文引用地址:http://www.104case.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)閉
        主站蜘蛛池模板: 双鸭山市| 高淳县| 广州市| 兴海县| 石泉县| 溆浦县| 南宫市| 浏阳市| 屏边| 岢岚县| 钦州市| 元谋县| 平山县| 明溪县| 许昌市| 瓮安县| 新竹县| 安西县| 湘西| 新绛县| 吉木萨尔县| 平安县| 钟山县| 七台河市| 寿阳县| 仁布县| 芦山县| 温州市| 永登县| 烟台市| 深水埗区| 江油市| 太仆寺旗| 平罗县| 石楼县| 洛阳市| 江口县| 吴旗县| 搜索| 壶关县| 滨海县|