毕设 单片机智能计算器(AT89C51、LCD1602、矩阵键盘)

基于单片机的智能计算器(AT89C51、LCD1602、矩阵键盘)

一、简介

此电路由AT89C51最小系统、LCD1602液晶显示模块和矩阵键盘模块组成。

二、执行效果

在这里插入图片描述

三、部分代码



    /*  S16 S12 S8 S4分别是123+
    	S15 S11 S7 S3分别是456-
    	S14 S10 S6 S2分别是789*
    	S13 S9 S5 S1分别是0 CLR = /
    */
    /*想要更多项目私wo!!!*/
    /* 实现两个数的运算,每个数的位数至少可以八位  */
    #include	
    #include"lcd.h"
    typedef unsigned char uint8;
    typedef unsigned int uint16;


    sbit led=P3^7;
    
    sbit beep=P2^0;
    uint8 key,num;
    uint8 fuhao;//定义具体的那个符号,是加减还是乘除。
    uint8 flag;	//定义有没有按下符号键,这个是统称
    long a,b,c,d;	//定义运算数据的第一个和第二个及等于的数变量
    uint8 k; //定义小数点后面显示的位数
    uint8 biao;


    void delay(uint16 i)
    {
    	while(i--);
    }
    
    void keyscan()
    {
    	P1=0xfe;   //令第一行为0,然后判断是哪一列按下
    	if(P1!=0xfe)
    	{
    		delay(1000);
    		if(P1!=0xfe)
    		{
    			key=P1&0xf0;
    			switch(key)
    			{
    				case 0xe0: num=0;break;	  //1
    				case 0xd0: num=1;break;	  //2
    				case 0xb0: num=2;break;	  //3
    				case 0x70: num=3;break;	  //加
    			}
    		}
    		while(P1!=0xfe);
    		if(num==0||num==1||num==2)	 //确认第一行的数1,2,3
    		{
    			if(flag==0)	 //没有按下符号键
    			{
    				//led=1;
    				a=a*10+dat1[num];	
    			}
    			else
    			{
    				//led=1;
    				b=b*10+dat1[num];
    			}
    		
    		}
    		if(num==3)
    		{
    			//led=0;
    			flag=1;
    			fuhao=1;//加号+	
    		}
    		lcdwrd(0x30+dat1[num]);
    	}

    	P1=0xfd;				//令第二行为0,判断是哪一列按下
    	if(P1!=0xfd)
    	{
    		delay(1000);
    		if(P1!=0xfd)
    		{
    			key=P1&0xf0;
    			switch(key)
    			{
    				case 0xe0: num=4;break;	  //4
    				case 0xd0: num=5;break;	  //5
    				case 0xb0: num=6;break;	  //6
    				case 0x70: num=7;break;	  //减—
    			}	
    		}
    		while(P1!=0xfd);
    		if(num==4||num==5||num==6)
    		{
    			if(flag==0)	 //没有按下符号键
    			{
    				//led=1;
    				a=a*10+dat1[num];	
    			}
    			else
    			{
    				//led=1;
    				b=b*10+dat1[num];
    			}			
    		}
    		else
    		{
    			flag=1;
    			fuhao=2;//带表减号
    		}
    		lcdwrd(0x30+dat1[num]);
    	}

    	P1=0xfb;		 //令第三行为0,判断哪一列按下
    	if(P1!=0xfb)
    	{
    		delay(1000);
    		if(P1!=0xfb)
    		{
    			key=P1&0xf0;
    			switch(key)
    			{
    				case 0xe0: num=8;break;	  //7
    				case 0xd0: num=9;break;	  //8
    				case 0xb0: num=10;break;  //9
    				case 0x70: num=11;break;  //乘*
    			}	
    		}
    		while(P1!=0xfb);
    		if(num==8||num==9||num==10)
    		{
    			if(flag==0)	 //没有按下符号键
    			{
    				//led=1;
    				a=a*10+dat1[num];	
    			}
    			else
    			{
    				//led=1;
    				b=b*10+dat1[num];
    			}			
    		}
    		else
    		{
    			flag=1;
    			fuhao=3;//带表乘号*
    		}
    		lcdwrd(0x30+dat1[num]);
    	}
    }


    void main()
    {
    	lcdinit();
    	while(1)
    	{
    		keyscan();	
    	}
    }


项目获取:

https://gitee.com/feifei1122/simulation-project

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值