基于51单片机计算器设计

目录

一、项目功能

二、仿真

三、程序

资料下载地址:基于51单片机计算器

一、项目功能

1、利用键盘及LCD1602作为计算器的输入及显示模块;

2、能进行加、减、乘、除的基本运算;按键有0~9,“+-*/=”。

3、有清零“CR"按键;

4、有记忆功能键,按下该键,可以直接显示并运用存储数据进行计算。

二、仿真

三、程序

部分程序

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char

sbit e=P2^3;
sbit rs=P2^4;
sbit rw=P2^0;
sbit busy=P0^7;

char i,j,temp,num,num_1;
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,0,0,0,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 z)
{
	uchar y;
	for(z;z>0;z--)
		for(y=0;y<110;y++);
}

void check()
{
	do{
		P0=0xFF;
		rs=0;     
		rw=1;    
    	e=0;     
    	delay(1); 
    	e=1;     
      }while(busy==1); 
}

void write_com(uchar com)
{
	P0=com; 
	rs=0;
	rw=0;
	e=0;
	check();
	e=1;
}

void write_date(uchar date)
{
	P0=date;
	rs=1;
	rw=0;
	e=0;
	check();
	e=1;
}

void init() 
{
	num=-1;
	e=1; 
	write_com(0X01);
	delay(1);
	write_com(0x38); 
	delay(1);
	write_com(0x0c); 
	delay(1);
	write_com(0x06); 
	delay(1);
	write_com(0x80); 
	delay(1);
	write_com(0x01); 
	delay(1);
	num_1=0;
	i=0;
	j=0;
	a=0;     
	b=0;    
	c=0;
	flag=0; 
	fuhao=0; 
}


   while(P3!=0xf7);

   switch(num)

   {

    case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//????"??"

     break;

    case 13:{                //????"0"

       if(flag==0)//???????

       {

        a=a*10;

        write_date(0x30);

        P1=0;

       }

       else if(flag==1)//???????

       {

        b=b*10;

        write_date(0x30);

        }

      }

     break;

    case 14:{j=1;

           if(fuhao==1){write_com(0x80+0x4f);//?????,???????????????

           write_com(0x04);     //?????????,???????,??????

           c=a+b;

           while(c!=0)

           {

             write_date(0x30+c%10);

             c=c/10;

           }

           write_date(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_date(0x30+c%10);

             c=c/10;

           }

           if(a-b<0)

             write_date(0x2d);

           write_date(0x3d);     //??"="           

           a=0;b=0;flag=0;fuhao=0;

          }

      else if(fuhao==3){write_com(0x80+0x4f);

            write_com(0x04);

             c=a*b;

             while(c!=0)

             {

             write_date(0x30+c%10);

             c=c/10;

             }

             write_date(0x3d);     

          a=0;b=0;flag=0;fuhao=0;

             }

      else if(fuhao==4){write_com(0x80+0x4f);

            write_com(0x04);

            i=0;

            c=(long)(((float)a/b)*1000);

            while(c!=0)

             {

               write_date(0x30+c%10);

               c=c/10;

           i++;

           if(i==3)

               write_date(0x2e);

             }

            if(a/b<=0)

              write_date(0x30);

            write_date(0x3d);                              

            a=0;b=0;flag=0;fuhao=0;

                    }

      }

     break;

     case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;}

     break;

   }

}

}

main()

{

	init();

	while(1)
 	{

  		 keyscan();

 	}
}

  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
51单片机计算器程序主要由三部分组成:主程序、按键扫描程序和LCD1602显示程序。其中,主程序是整个计算器程序的核心,负责接收按键输入并进行相应的运算操作。按键扫描程序用于检测键盘输入,判断某一列或行是否有按键按下,并确定是哪一个键按下。LCD1602显示程序则用于将计算结果或其他相关信息显示在液晶屏上。 在51单片机计算器程序中,采用了非编码键盘作为输入设备。这种键盘扫描程序的优点是节省IO口,通过判断某一列或行是否有按键按下,确定按下的键的位置。程序效率高,每次扫描占用CPU时间最短,无论有键按下还是无键按下,都能在很短的时间内完成一次扫描。 在计算器程序中,可以进行简单的加减乘除运算,最大可以计算9999乘以9999的结果。通过使用proteus仿真软件,可以对计算器进行仿真测试。 在设计硬件电路方面,简易计算器采用了三部分电路模块构成:键盘模块电路、LCD1602液晶显示模块和以51单片机作为控制核心。同时,设计中还需要使用一系列元件,如1602液晶、STC89C51单片机、排针、电阻、电容等等。 综上所述,51单片机计算器程序包括主程序、按键扫描程序和LCD1602显示程序,采用非编码键盘作为输入设备,可以进行简单的加减乘除运算,最大可以计算9999乘以9999的结果,并使用proteus仿真软件进行测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森旺电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值