找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2764|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机和LCD1602显示屏,MH矩阵键盘怎么做计算器

[复制链接]
跳转到指定楼层
楼主
ID:156133 发表于 2016-12-20 13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
浏览了好多程序,但是就是做不成,有的程序目标文件生成不了,有的下载了程序不对
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:198338 发表于 2017-7-10 11:00 | 只看该作者
#include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit leden=P3^7; sbit rs=P3^5; sbit rw=P3^6; sbit beep=P3^4; uchar i,j,num,num_1,temp; long a,b,c; float a_c,b_c; uchar flag,fuhao; uchar code table[]={7,8,9,0,                     4,5,6,0,                     1,2,3,0}; uchar code table1[]={7,8,9,0x2f-0x30,                      4,5,6,0x2a-0x30,                      1,2,3,0x2d-0x30,                      0x01-0x30,0,0x3d-0x30,0x2b-0x30}; void delay(uchar xms) { uchar i,j; for(i=xms;i>0;i--)     for(j=200;j>0;j--);  } // void di() //{ // beep=0; // delay(100); // beep=1; //}  void write_com(uint w) {    rs=0;    rw=0;    leden=0;    P0=w;    leden=1;    delay(10);    leden=0;  } void write_data(uint q) {    rs=1;    rw=0;    leden=0;    P0=q;    leden=1;    delay(10);    leden=0;    } void init() {    num=1;    leden=1;    write_com(0x38);    write_com(0x08);    write_com(0x01);    write_com(0x06);    write_com(0x0f);    num_1=0;    i=0;    j=0;    a=0;    b=0;    c=0;    flag=0;    fuhao=0; }  void keyscan() {    P2=0Xfe;    if(P2!=0xfe)    {     delay(100); //        di();         if(P2!=0xfe)         {           temp=P2&0xf0;           switch(temp)             {                 case 0xe0:num=0;break;                 case 0xd0:num=1;break;                 case 0xb0:num=2;break;                 case 0x70:num=3;break;             }          }           while(P2!=0xfe);           if(num==0||num==2||num==1)                     {             if(j!=0)             {               write_com(0x01);               j=0;             }            if(flag==0)              {                a=a*10+table[num];              }           else              {                b=b*10+table[num];              }            }          else          {            flag=1;            fuhao=4;          }           i=table1[num];           write_data(0x30+i);         }         P2=0xfd;         if(P2!=0xfd)       {         delay(100); //                di();         if(P2!=0xfd)        {        temp=P2&0xf0;        switch(temp)          {            case 0xe0:num=4;break;            case 0xd0:num=5;break;            case 0xb0:num=6;break;            case 0x70:num=7;break;          }         }         while(P2!=0xfd);         if(num==4||num==5||num==6)         {           if(j!=0)           {             write_com(0x01);             j=0;           }           if(flag==0)           {             a=a*10+table[num];           }           else            {              b=b*10+table[num];            }          }          else          {            flag=1;            fuhao=3;          }          i=table1[num];          write_data(0x30+i);    }     P2=0xfb;     if(P2!=0xfb)    {         delay(100); //                di();         if(P2!=0xfb)         {           temp=P2&0xf0;           switch(temp)             {              case 0xe0:num=8;break;              case 0xd0:num=9;break;              case 0xb0:num=10;break;              case 0x70:num=11;break;             }          }         while(P2!=0xfb);         if(num==8||num==9||num==10)         {          if(j!=0)           {             write_com(0x01);                 j=0;           }           if(flag==0)           {             a=a*10+table[num];           }           else            {              b=b*10+table[num];            }          }          else if(num==11)           {            flag=1;            fuhao=2;            }          i=table1[num];          write_data(0x30+i);    }          P2=0xf7;     if(P2!=0xf7)    {     delay(100); //        di();     if(P2!=0xf7)      {       temp=P2&0xf0;       switch(temp)       {        case 0xe0:num=12;break;        case 0xd0:num=13;break;        case 0xb0:num=14;break;        case 0x70:num=15;break;       }     }    while(P2!=0xf7);    switch(num)    { case 12:    {          write_com(0x01);          a=0;          b=0;          flag=0;          fuhao=0;    }            break; case 13:    {      if(flag==0)       {            a=a*10; //           di();            write_data(0x30);           }      else          if(flag==1)      {        b=b*10;            write_data(0x30);          }    }               break; case 14:    {         j=1;      if(fuhao==1)       {            write_com(0x80+0x4f);            write_com(0x04);            c=a+b; //           di();        while(c!=0)         {          write_data(0x30+c%10);          c=c/10;         }          write_data(0x3d);                  a=0;                  b=0;              flag=0;              fuhao=0;                 }       else        if(fuhao==2)        {                  write_com(0x80+0x4f);                  write_com(0x04);          if(a-b>0)          {                   c=a-b;                  }      else       {             c=b-a;           }      while(c!=0)        {          write_data(0x30+c%10);          c=c/10;        }          if(a-b<0)          write_data(0x2d);              write_data(0x3d);                  a=0;                  b=0;                 flag=0;                 fuhao=0;         }     else          if(fuhao==3)       {            write_com(0x80+0x4f);            write_com(0x04);            c=a*b; //           di();        while(c!=0)        {         write_data(0x30+c%10);         c=c/10;        }         write_data(0x3d);                 a=0;b=0;                                                   flag=0;                                                   fuhao=0;                                             }                                                             else         if(fuhao==4)        {         write_com(0x80+0x4f);             write_com(0x04);                     i=0;         c=a%b; //                di();                 while(c!=0)         {          write_data(0x30+c%10);          c=c/10;          i++;          if(i==3)          write_com(0x2e);          }                                 if(a/b<=0)           write_data(0x30);           write_data(0x3d);                   a=0;                   b=0;                   flag=0;                   fuhao=0;          }                          } break; case 15:    {    write_data(0x30+table1[num]);    flag=1;    fuhao=1; //   di();    }                break;   }  }    P2=0xf0; }  void main() {   init();   while(1)   {     keyscan();   } }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表