久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4218|回復: 4
打印 上一主題 下一主題
收起左側

求一個簡易計算器的源代碼!

[復制鏈接]
跳轉到指定樓層
樓主
ID:47438 發(fā)表于 2012-12-25 12:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
求一個簡易計算器的源代碼!89c51的, 8段LED顯示的,只要能最簡單的加減乘除就行,小數(shù)點都不要了,4*4的鍵盤,謝謝了!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:71725 發(fā)表于 2015-1-6 16:32 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:67796 發(fā)表于 2015-1-6 18:37 | 只看該作者
參考宋老師的書第八章第五節(jié):
http://pan.baidu.com/s/1c0zkWIc
回復

使用道具 舉報

地板
ID:77776 發(fā)表于 2015-11-18 22:16 | 只看該作者
我也在找,就是沒找到呀
回復

使用道具 舉報

5#
ID:108699 發(fā)表于 2016-6-8 22:48 | 只看該作者
#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit rs=P2^2; sbit rw=P2^1; sbit e=P2^0; void write_dat(uchar dat);  void write_com(uchar com); void process(void); void keyscan();  /*按鍵功能*/ uchar code table1[]= { 1,2,3,0x2b-0x30,                       // 1,   2,   3,    + 4,5,6,0x2d-0x30,                                   // 4,   5,   6,    - 7,8,9,0x2a-0x30,                                   // 7,   8,   9,    x 0,0x3d-0x30,0x01-0x30,0x2f-0x30           // 0,   =,   清零, / };  uchar k=0,flag=0,num,fuhao[6],i,temp1=0,flag1=0;  long a,b,c,d;   void delay(uint z) {     uint x,y;     for(x=z;x>0;x--)         for(y=110;y>0;y--); } /********按鍵處理***********/ void keyscan() {     uchar temp;     P3=0xfe;     temp=P3;     temp=temp&0xf0;     while(temp!=0xf0)     {        delay(5);        temp=P3;        temp=temp&0xf0;        while(temp!=0xf0)        {            temp=P3;            switch(temp)            {               case 0xee:num=0;                 break;                                       case 0xde:num=1;                     break;               case 0xbe:num=2;                     break;               case 0x7e:num=3;                     break;             }                                      while(temp!=0xf0)                 // 松手檢測                 { temp=P3;                   temp=temp&0xf0;                          }            }        if(num==0||num==1||num==2)        {                          if(flag==0)                a=a*10+table1[num]; //如果沒有按符號鍵,符號前的數(shù)值為a             else if(flag==1)                b=b*10+table1[num];  //如果按了符號鍵,符號后的數(shù)值為b                                           else if(temp1>=2&&flag1==1)                    {                      flag=1;                          flag1=0;                                process();                                                           a=c;                          b=table1[num];                            }                                                                                                            if(k==1)                          {                     k=0;                 write_com(0x01);                        }             }                 else if(num==3)                    {              flag++;                          flag1=1;                          temp1++;                    fuhao[temp1-1]=1;                                          }                                                                                            i=table1[num];    //顯示按下的鍵       write_dat(0x30+i);         }     P3=0xfd;     temp=P3;     temp=temp&0xf0;     while(temp!=0xf0)     {        delay(5);        temp=P3;        temp=temp&0xf0;        while(temp!=0xf0)        {            temp=P3;            switch(temp)            {               case 0xed:num=4;                 break;                                       case 0xdd:num=5;                     break;               case 0xbd:num=6;                     break;               case 0x7d:num=7;                     break;             }                                      while(temp!=0xf0)                 { temp=P3;                  temp=temp&0xf0;                          }            }          if(num==4||num==5||num==6)               {                  if(k==1)                            {                         k=0;                     write_com(0x01);                            }              if(flag==0)                 a=a*10+table1[num];              else if(flag==1)                 b=b*10+table1[num];                          else if(temp1>=2&&flag1==1)                            {                              flag=1;                                  flag1=0;                              process();                                                                        a=c;                                  b=table1[num];                                    }                                                                                                   }          else if(num==7)              {              flag++;                          temp1++;                          flag1=1;                          fuhao[temp1-1]=2;                                                               }          i=table1[num];              write_dat(0x30+i);                    }     P3=0xfb;     temp=P3;     temp=temp&0xf0;     while(temp!=0xf0)     {        delay(5);        temp=P3;        temp=temp&0xf0;        while(temp!=0xf0)        {            temp=P3;            switch(temp)                            {               case 0xeb:num=8;                 break;                                       case 0xdb:num=9;                              break;               case 0xbb:num=10;                     break;                case 0x7b:num=11;                 break;                                        }                                      while(temp!=0xf0)                 { temp=P3;                  temp=temp&0xf0;                          }            }            if(num==8||num==9||num==10)              {                if(k==1)                            {                         k=0;                     write_com(0x01);                            }                if(flag==0)                   a=a*10+table1[num];                else if(flag==1)                   b=b*10+table1[num];                            else if(temp1>=2&&flag1==1)                            {                              flag=1;                                  flag1=0;                              process();                                                                        a=c;                                  b=table1[num];                                    }                                                                   }            else if(num==11)               {                 flag++;                     temp1++;                                 flag1=1;                                 fuhao[temp1-1]=3;                                                                              }                                                                        i=table1[num];            write_dat(0x30+i);                }        P3=0xf7;     temp=P3;     temp=temp&0xf0;     while(temp!=0xf0)     {        delay(5);        temp=P3;        temp=temp&0xf0;        while(temp!=0xf0)        {            temp=P3;            switch(temp)            {               case 0xe7:num=12;    // 0鍵                 break;                                       case 0xd7:num=13;     // '='                     break;               case 0xb7:num=14;         //清零鍵                     break;                case 0x77:num=15;                //除號鍵                 break;                                        }                                      while(temp!=0xf0)                 { temp=P3;                  temp=temp&0xf0;                       }                                            }           switch(num)           {              case 12:                      {                   if(k==1)                            {                         k=0;                     write_com(0x01);                            }                  if(flag==0)                    a=a*10;                  else if(flag==1)                     b=b*10;                                  else if(temp1>=2&&flag1==1)                            {                              flag=1;                                  flag1=0;                              process();                                                                        a=c;                                  b=table1[num];                                    }                                                                write_dat(0x30);                            }                    break;              case 13:                        {                   k=1;                                   if(temp1>=2)                                      fuhao[0]=fuhao[temp1-1];                  if(fuhao[0]==1)                             {                                                write_com(0x80+0x4f);                      write_com(0x04);                              c=a+b;                                          d=c;                      while(c!=0)                                                                          {                         write_dat(0x30+c%10);                                 c=c/10;                                                                                                           }                     write_dat(0x3d);                          fuhao[0]=0;fuhao[1]=0;fuhao[2]=0;                                         fuhao[3]=0;fuhao[4]=0;fuhao[5]=0;                     a=0;b=0;flag=0;flag1=0;temp1=0;                                     }                  if(fuhao[0]==2)                          {                     write_com(0x80+0x4f);                     write_com(0x04);                          if(a>=b)                                 {                            c=a-b;                                           d=c;                       while(c!=0)                                   {                          write_dat(0x30+c%10);                                  c=c/10;                       }                                                                                                                                                        }                     else if(a<b)                                 {                            c=b-a;                                            d=c;                        while(c!=0)                                {                            write_dat(0x30+c%10);                                    c=c/10;                                }                       write_dat(0x2d);                                 }                                               write_dat(0x3d);                     fuhao[0]=0;fuhao[1]=0;fuhao[2]=0;                                         fuhao[3]=0;fuhao[4]=0;fuhao[5]=0;                     a=0;b=0;flag=0;flag1=0;temp1=0;                                                    }                  if(fuhao[0]==3)                            {                     write_com(0x80+0x4f);                     write_com(0x04);                     c=a*b;                                         d=c;                         while(c!=0)                                 {                        write_dat(0x30+c%10);                            c=c/10;                                 }                     write_dat(0x3d);                                                                                                     fuhao[0]=0;fuhao[1]=0;fuhao[2]=0;                                         fuhao[3]=0;fuhao[4]=0;fuhao[5]=0;                     a=0;b=0;flag=0;flag1=0;temp1=0;                                                    }                  if(fuhao[0]==4)                                {                               i=0;                      write_com(0x80+0x4f);                      write_com(0x04);                     c=(long)(((float)a/b)*1000000);                         d=c;                                         while(c!=0)                                 {                        write_dat(0x30+c%10);                            c=c/10;                                i++;                             if(i==6)                                             write_dat(0x2e);                                                                         }                         if(a/b<=0)                      write_dat(0x30);                      write_dat(0x3d);                      fuhao[0]=0;fuhao[1]=0;fuhao[2]=0;                                         fuhao[3]=0;fuhao[4]=0;fuhao[5]=0;                     a=0;b=0;flag=0;flag1=0;temp1=0;                          }                          }               break;                                 case 14:                 { write_com(0x01);                  a=0;b=0;flag=0;temp1=0;flag1=0;                                  fuhao[0]=0;fuhao[1]=0;fuhao[2]=0;                                  fuhao[3]=0;fuhao[4]=0;fuhao[5]=0;                            }                  break;               case 15:                   {                     flag++;                         temp1++;                                         flag1=1;                                     fuhao[temp1-1]=4;                                                  write_dat(0x30+table1[num]);                                        }                    break;                       }                             }                 } /*******led1602顯示*******/ void write_com(uchar com) {    rs=0;    rw=0;    P0=com;    e=1;    delay(5);    e=0; } void write_dat(uchar dat) {    rs=1;    rw=0;    P0=dat;    e=1;    delay(5);    e=0; }  void process(void) {               if(fuhao[temp1-2]==1)    //如果符號鍵是+,執(zhí)行加法運算                  {                     c=a+b;                    b=0;                    }                                            // 如果符號鍵是-,執(zhí)行減法運算          if(fuhao[temp1-2]==2)                   {                     c=a-b;                         b=0;                    }                                                                                                                       if(fuhao[temp1-2]==3)   //如果符號鍵是*執(zhí)行乘法運算                   {                             c=a*b;                         b=0;                     }           if(fuhao[temp1-2]==4)      //如果符號鍵是/ 執(zhí)行除法運算                                  {                      c=(long)((float)a/b);                                 b=0;                                                                                                                                                                                                                  }                                      }  /*液晶的初始化*/ void init()  //初始化 {    delay(15);    write_com(0x38);    delay(6);    write_com(0x38);    delay(6);    write_com(0x38);    write_com(0x38);    write_com(0x0c);  //開顯示,關光標    write_com(0x06);  //光標移動    write_com(0x01);  //清屏   }                                     void main() {             init();     while(1)     {            keyscan();                  } }
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美一级精品久久 | 日韩国产中文字幕 | 亚洲第一av | 成人国产在线视频 | 久久久久久久久久影视 | 国产视频一区二区 | 日韩欧美精品一区 | 在线免费国产视频 | 亚洲成人av在线播放 | 久久久蜜桃 | 天天艹日日干 | 一区二区三区四区视频 | 国产精品久久久久久高潮 | 久久久久亚洲 | 国产精品久久久久久亚洲调教 | 日韩不卡视频在线 | 91精品在线播放 | 国内精品伊人久久久久网站 | 欧美成人a∨高清免费观看 91伊人 | 99久久婷婷国产综合精品电影 | 一区二区影院 | 日韩国产在线观看 | 国产欧美日韩在线播放 | 久久精品亚洲精品国产欧美 | 午夜在线影院 | 狠狠伊人| 免费一区二区 | 欧美黄色性生活视频 | 日本不卡一区 | 日韩欧美视频网站 | 国产精品免费一区二区三区四区 | 夜夜爽99久久国产综合精品女不卡 | 精品成人一区 | 久久久久一区二区三区 | 国产欧美一区二区三区日本久久久 | 在线色网 | 午夜码电影 | 日韩影院在线观看 | 欧美一区二区三区的 | 色资源在线 | 午夜99 |