当前位置: 代码迷 >> 综合 >> 基于单片机的智能计算器(AT89C51、LCD1602、矩阵键盘)
  详细解决方案

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

热度:41   发布时间:2023-12-17 16:50:50.0

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

想要更多项目私wo!!!

一、简介

此电路由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<reg52.h> 
#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;	  //1case 0xd0: num=1;break;	  //2case 0xb0: num=2;break;	  //3case 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;	  //4case 0xd0: num=5;break;	  //5case 0xb0: num=6;break;	  //6case 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;	  //7case 0xd0: num=9;break;	  //8case 0xb0: num=10;break;  //9case 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();	}
}
  相关解决方案