找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1535|回复: 0
收起左侧

LCD12864简易计算器

[复制链接]
ID:995364 发表于 2021-12-21 19:29 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define K P2

typedef unsigned int u16;         
typedef unsigned char u8;

sbit RS = P1^0;
sbit RW = P1^1;
sbit E =  P1^2;


void delay(int i)
{
while(i--);

}

int a;
void AJ()        //按键函数
{

int b=0;
K=0x0f;

  if(K!=0x0f)
    {
           delay(1000);
           if(K!=0x0f)
             {
                  switch(K)
                  {
                    case 0x07: a=0;break;
                        case 0x0b: a=1;break;
                        case 0x0d: a=2;break;
                        case 0x0e: a=3;break;
                  }
                 }
                    K=0xf0;
                   if(K!=0xf0)
            {
                   delay(1000);
                  if(K!=0xf0)
                    {
                          switch(K)
                              {
                            case 0x70: a=a;break;
                                 case 0xb0: a=a+4;break;
                                case 0xd0: a=a+8;break;
                                case 0xe0: a=a+12;break;
                                   }
                       }
                         }                           
               while(b<50&&K!=0xf0);
                     {
                         delay(100);
                         b++;
                     }
           }
        }




u8 code  SHU[]={0x31,0x32,0x33,0x2b,0x34,0x35,0x36,0x2d,0x37,0x38,0x39,0x2a,0x2f,0x30,0x3d};
/*
{  1  2  3    +
   4  5  6    -
   7  8  9    *
   /  0  =   
}
*/
//u8 code        FU[]={0x2b,0x2d,0x2a,0x2f};                // + - * /





/*LCD12864程序函数*/
void LCD12864_SetPos(unsigned char x,unsigned char y) ;
void LCD12864_WDAT(unsigned char dat);
void LCD12864_WCMD(unsigned char cmd);
void LCD12864_BusyCheck();
void LCD12846_DisHZ_Str(unsigned char *s);

void  YX()
  {
  char m[100];     //m为第一个数
char n[100];         //n为第二个数
      int i,j,b=0,c=0;
          int q,h;
          int d=-1;
          int s1=0,s2=0;
   for(i=2;i>1;i++)
     {
          LCD12864_SetPos(0,b);
          b++;
          if(a)
           AJ();
           d=a;
           if(d!=-1)
           {
           LCD12864_WDAT(SHU[a]);
           if(a==15)
           {
                     for(;s1>0;s1--)
                  {
                    q=q*10+m[s1-1];
                  }
                  for(;s2>0;s2--)
                  {
                  h=h*10+n[s2-1];
                  }
                  if(j==3)
                  {
                  LCD12864_WDAT(SHU[14]);
                   LCD12864_WDAT(q+h);
                  }
                   else if(j==7)
                   {
                   LCD12864_WDAT(SHU[14]);
                   LCD12864_WDAT(q-h);
                   }
                              else if(j==11)
                   {
                   LCD12864_WDAT(SHU[14]);
                   LCD12864_WDAT(q*h);
                   }
                              else if(j==12)
                   {
                   LCD12864_WDAT(SHU[14]);
                   LCD12864_WDAT(q/h);
                   }
           }
           if(a!=3&&a!=7&&a!=11&&a!=12)
           {
                   m[i-2]=a;
                s1++;
           }
           else
           {
           c=1;
           i=2;
           j=a;
           }
            if(c==1)
                        {
                        n[i-2]=a;
                        s2++;
                        }
                       
                        }


           a=16;
           if(a==15)
           {
           LCD12864_WCMD(0x0c);
               LCD12864_WCMD(0x30);
           }
        delay(10000);
        d=-1;
        }
         }
void main()
{


           LCD12864_WCMD(0x0c);
        LCD12864_WCMD(0x30);

//    LCD12846_DisHZ_Str("欢迎使用科学计算器");
//   LCD12864_SetPos(0,0);

          YX();
}
//        LCD12864_WCMD(0x0c);
//        LCD12864_WCMD(0x30);
//  LCD12864_SetPos(0,b);
//        b++;
/*            AJ();
           m[j]=a;
           j++;
          //for(i=1;i>1;i++)
           LCD12864_WDAT(SHU[a]);
           delay(1000);
*/

//                   AJ();
//                   LCD12864_SetPos(0,0+b);
//                b++;
//                LCD12864_WDAT(SHU[a]);
//                if(a==14)
//                {
//                LCD12864_SetPos(1,0);
         





        /*LCD12864_WDAT(SHU[0]);
        LCD12864_WDAT(0x04);
        LCD12864_WDAT(0x05 + '0'); //'0' = 48 = 0x30
        LCD12864_WDAT(0x06);
        LCD12864_SetPos(1,0);
        LCD12846_DisHZ_Str("李朝贺");
        */
/*        while(1)
        {
        if(a==15)
        break;       
        }
  */





void LCD12864_BusyCheck()
{
        unsigned char temp;
        P0 = 0xff;
        RS = 0;
        RW = 1;
        while(1)
        {
                E = 1;
                temp = P0;
                E = 0;
                if((temp & 0x80) == 0)
                        break;
        }        
}

void LCD12864_WCMD(unsigned char cmd)
{
        LCD12864_BusyCheck();
        RS = 0;
        RW = 0;
        P0 = cmd;
        E = 1;
        E = 0;
}

void LCD12864_WDAT(unsigned char dat)
{
        LCD12864_BusyCheck();
        RS = 1;
        RW = 0;
        P0 = dat;
        E = 1;
        E = 0;
}

void LCD12864_SetPos(unsigned char x,unsigned char y)
{
        unsigned char pos;
        switch(x)
        {
                case 0 : x = 0x80;break;
                case 1 : x = 0x90;break;
                case 2 : x = 0x88;break;
                case 3 : x = 0x98;break;
                default:break;
        }
        pos = x + y; //x范围0-3  y范围0-7
        LCD12864_WCMD(pos);
}

void LCD12846_DisHZ_Str(unsigned char *s)
{
        while(*s)
                LCD12864_WDAT(*s++);
}

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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