毕设 单片机智能计算器(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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AT89C51是一种常见的单片机芯片,可以用于控制各种设备。蓝牙是一种无线通信技术,可以将设备连接到互联网或其他设备。矩阵键盘是一种常见的输入设备,可以用于输入数字或字符等信息。将这些设备组合起来,就可以实现通过蓝牙控制矩阵键盘进行输入的功能。 下面是AT89C51蓝牙控制矩阵键盘的代码: #include <reg51.h> sbit col1 = P2^0; //定义矩阵键盘的列1为P2.0 sbit col2 = P2^1; //定义矩阵键盘的列2为P2.1 sbit col3 = P2^2; //定义矩阵键盘的列3为P2.2 sbit col4 = P2^3; //定义矩阵键盘的列4为P2.3 sbit row1 = P0^1; //定义矩阵键盘的行1为P0.1 sbit row2 = P0^2; //定义矩阵键盘的行2为P0.2 sbit row3 = P0^3; //定义矩阵键盘的行3为P0.3 sbit row4 = P0^4; //定义矩阵键盘的行4为P0.4 void main() { unsigned char key; //定义按键值变量 while(1) { col1 = 0; //使列1低电平,行内输入1 col2 = col3 = col4 = 1; //使其他列高电平 if(row1 == 0) key = '1'; //按1键 if(row2 == 0) key = '4'; //按4键 if(row3 == 0) key = '7'; //按7键 if(row4 == 0) key = '*'; //按*键 delay(10); //短暂延时 col2 = 0; //使列2低电平,行内输入2 col1 = col3 = col4 = 1; //其他列高电平 if(row1 == 0) key = '2'; //按2键 if(row2 == 0) key = '5'; //按5键 if(row3 == 0) key = '8'; //按8键 if(row4 == 0) key = '0'; //按0键 delay(10); //短暂延时 col3 = 0; //使列3低电平,行内输入3 col1 = col2 = col4 = 1; //其他列高电平 if(row1 == 0) key = '3'; //按3键 if(row2 == 0) key = '6'; //按6键 if(row3 == 0) key = '9'; //按9键 if(row4 == 0) key = '#'; //按#键 delay(10); //短暂延时 col4 = 0; //使列4低电平,行内输入A col1 = col2 = col3 = 1; //其他列高电平 if(row1 == 0) key = 'A'; //按A键 if(row2 == 0) key = 'B'; //按B键 if(row3 == 0) key = 'C'; //按C键 if(row4 == 0) key = 'D'; //按D键 delay(10); //短暂延时 if(key) //如果有按键输入 { sendBluetooth(key); //通过蓝牙发送按键值 key = 0; //清零按键值 } } } 以上就是基于AT89C51芯片的蓝牙控制矩阵键盘的代码,其中使用了矩阵键盘的原理实现了按键输入,再通过蓝牙模块将输入的按键值发送到其他设备中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值