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

发布者:自由思考最新更新时间:2022-08-24 来源: csdn关键字:单片机  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();

}

}

关键字:单片机  AT89C51  LCD1602  矩阵键盘 引用地址:基于单片机的智能计算器(AT89C51、LCD1602、矩阵键盘)

上一篇:单片机液晶滚动显示(AT89C51、LCD1602)
下一篇:单片机万年历(LCD12864、DS18B20、DS1302)

推荐阅读最新更新时间:2024-11-03 04:31

【51单片机快速入门指南】6.3.1:使用1-WIRE搜索算法搜索单总线上所有DS18B20的ID
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 移植自1-WIRE搜索算法 串口部分见【51单片机快速入门指南】3.3:USART 串口通信 DS18B20驱动程序见【51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取 源码 OWSearch.c #include DS18B20.h #include stdio.h // TMEX API TEST BUILD DECLARATIONS // long session_handle; // END
[单片机]
【51<font color='red'>单片机</font>快速入门指南】6.3.1:使用1-WIRE搜索算法搜索单总线上所有DS18B20的ID
基于AT89C51单片机的微型可编程控制器
可编程控制器PC(Programmable Controller),为与个人计算机PC(Personal Computer)相区别,可简称为PLC。它是按照成熟而有效的继电控制概念和设计思想,用先进的单片机技术来实现I/O的实时检测和控制,可靠性高,编程简单、易学,因此,得到广泛应用。 将PLC技术引进电工学、电力拖动课程,是课程建设现代化的重要措施。在教学经费相对紧张的情况下,我们自己动手,以AT89C51单片机为核心,设计并研制了LD型微型PLC,应用于继电控制实验,取得了良好的效果。 用单片机构成的PLC,实际上就是一个单片机测控系统。用这样一个程序控制的计算机系统去执行继电控制的梯形图程序,由于继电控制梯形图
[单片机]
基于<font color='red'>AT89C51</font><font color='red'>单片机</font>的微型可编程控制器
嵌入式频率计的设计
  1   引   言      本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号周期/频率的测量。单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期)
[测试测量]
delphi-smpcomm代码实例(3)
为了实现PC与单片机8051之间的通讯,首先要调通它们之间的握手信号,假定它们之间的通讯协议是,PC到8051一帧数据6个字节, 8051到PC一帧数据也为6个字节,当PC发出(F0,01,FF,FF,01,F0)后能收到这样一帧(F0,01,FF,FF,01,F0),表示 数据通信握手成功,两者之间就可以按照协议相互传输数据。在PC方要发送及接受数据需要以下步骤: 1.创建一个新的工程COMM.DPR,把窗体的NAME属性改为FCOMM,把窗体的标题改为测试通讯,添加控件。   对COMM1(黑色矩形围住的控件)进行属性设计,设波特率4800,校验位无,字节长度_8,停止位_1,串口选择COM1。Memo1中将显示发送和接受的数
[单片机]
单片机 MSP430 串口 计算 波特率
软件计算波特率地址: http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html MSP430怎么计算波特率在各手册都有提到,但始终不清楚,直到看了官网的一篇文章: https://processors.wiki.ti.com/index.php/USCI_UART_Baud_Rate_Gen_Mode_Selection The formulas for calculating USCI UART Baud Rate Register Values are basically available
[单片机]
<font color='red'>单片机</font> MSP430 串口 计算 波特率
使用单片机实现数字电压表的资料详细说明
1. 实验任务 利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。 2. 电路原理图 图1.28.1 3. 系统板上硬件连线 a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 b) 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 c) 把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。 d) 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。 e
[单片机]
使用<font color='red'>单片机</font>实现数字电压表的资料详细说明
基于AVR单片机多功能电子秤设计
  近年来,新型单片机的出现和集成电路技术的发展为更新产品设计,研制高性价比的称重控制器提供了条件。本设计采用 AVR单片机 为控制核心,结合电阻应变式压力传感器和相应的信号采集电路,设计出一种高精度、多功能、低成本的新型电子秤。   1 系统总体设计   首先由称重传感器采集因压力变化而产生的电压信号,通过A/D转换器将模拟信号转换为数字信号,把数字信号送入AVR单片机,单片机做相应的处理后,得到当前物体重量的数据,并通过LCD显示出来。系统硬件结构如图1所示。      系统硬件电路包括A/D转换模块、4×4矩阵键盘模块、LCD模块和蜂鸣器报警模块;软件模块又可分为主程序模块、矩阵键盘扫描模块、A/D转换模
[单片机]
基于AVR<font color='red'>单片机</font>多功能电子秤设计
Silicon Labs针对物联网推出最低功耗和最小尺寸的无线MCU
高性能模拟与混合信号IC领导厂商Silicon Labs(芯科实验室有限公司, NASDAQ: SLAB)近日宣布扩展了8位Si10xx无线微控制器(Wireless MCU)系列产品,新成员Si106x和Si108x特别针对成本敏感和性能密集型设计而优化。通过在单芯片解决方案中整合其超低功耗MCU技术和sub-GHz EZRadio®及EZRadioPRO®收发器,Silicon Labs推出创新的节能型无线MCU,在同类产品中整体功耗最低,并且具有业内领先的RF性能指标。Si106x和Si108x无线MCU凭借支持142MHz-1050MHz全球频段,以及可延长电池寿命的低功耗休眠和活动模式,完全满足物联网对低功耗和RF连接的应
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved