矩阵键盘和lcd1206制作计算器
时间: 2023-11-01 11:03:09 浏览: 57
矩阵键盘和LCD1206都是用于制作计算器的常见元件。矩阵键盘是一种常见的输入设备,用于接收用户的键盘输入。它由多个按键组成,每个按键都对应着一个特定的字符或功能。在计算器中,矩阵键盘常用于接收数字、运算符和其他功能键的输入,通过按下不同的按键,用户可以输入需要进行计算的数据和操作。
而LCD1206是一种常见的液晶显示器,它可以用来显示计算器的输入和输出结果。LCD1206具有较小的尺寸和高分辨率,可以在有限的空间内显示出清晰的数字和字符。在计算器中,LCD1206通常用于显示用户输入的数字和运算符,同时也能显示计算结果和其他提示信息。通过使用LCD1206,用户可以直观地看到计算器的运算过程和结果,并能进行必要的操作和调整。
当矩阵键盘和LCD1206结合在一起使用时,可以实现一个完整的计算器功能。用户可以通过按下矩阵键盘上的数字键、运算符键和其他功能键,输入需要进行计算的数据和操作。计算器通过读取矩阵键盘的输入,进行相应的计算,并将结果显示在LCD1206上。用户可以通过观察LCD1206上的显示内容来确认输入和计算结果的准确性,并进行必要的调整和操作。
总之,矩阵键盘和LCD1206是制作计算器的重要组成部分。它们通过接收用户输入、进行计算和显示结果的功能,实现了一个便携式、可靠的计算工具,广泛应用于日常生活和工作中。
相关问题
c51单片机矩阵键盘和lcd1602计算器程序
以下是使用C51单片机的矩阵键盘和LCD1602显示器编写的计算器程序示例:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0; //LCD1602的RS引脚接在单片机的P2.0口
sbit RW=P2^1; //LCD1602的RW引脚接在单片机的P2.1口
sbit EN=P2^2; //LCD1602的EN引脚接在单片机的P2.2口
uchar code table[]="0123456789*#"; //定义矩阵键盘输入字符对应的数组
uchar flag; //定义标志位,用于判断是否按下了键
void delay(uint x) //延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com) //向LCD1602写入指令
{
RS=0; //RS置0表示写入指令
RW=0; //RW置0表示写入模式
P0=com; //将指令写入P0口
EN=1; //使能
delay(1); //延时
EN=0; //取消使能
}
void write_data(uchar dat) //向LCD1602写入数据
{
RS=1; //RS置1表示写入数据
RW=0; //RW置0表示写入模式
P0=dat; //将数据写入P0口
EN=1; //使能
delay(1); //延时
EN=0; //取消使能
}
void init_lcd1602() //LCD1602初始化函数
{
write_com(0x38); //8位数据接口,显示2行,5*7点阵字符
write_com(0x0c); //开显示(无光标,不闪烁)
write_com(0x06); //文字不动,光标自动右移
write_com(0x01); //清屏
}
void keyscan() //矩阵键盘扫描函数
{
uchar i;
flag=0; //将标志位清零
P1=0xf0; //将P1口的低四位设置为0xf0,用于读取行的状态
if(P1!=0xf0) //如果有一行的状态不为0xf0,表示有按键按下
{
delay(5); //延时去抖
if(P1!=0xf0) //再次检测按键是否按下
{
for(i=0;i<4;i++) //循环读取列的状态
{
P1=0x0f; //将P1口的高四位设置为0x0f,用于读取列的状态
if(P1!=(0x0f&(0x01<<i))) //如果列的状态与当前循环的列不同,表示该列的按键按下
{
while(P1!=(0x0f&(0x01<<i))); //等待按键释放
write_data(table[i*4+(P1>>4)]); //将输入字符写入LCD1602
flag=1; //将标志位设置为1,表示有按键按下
break; //跳出循环
}
}
}
}
}
void main()
{
uchar a[16]; //定义一个存储输入字符的数组
uchar b; //定义一个字符变量,用于存储每次输入的字符
uchar i,j,k=0; //定义三个计数器
uint x,y,z; //定义三个整型变量,用于存储输入的数字
init_lcd1602(); //初始化LCD1602
while(1)
{
keyscan(); //扫描矩阵键盘
if(flag==1) //如果有按键按下
{
b=P0; //将输入字符存储到变量b中
if(b=='#') //如果输入字符为#
{
a[k]='\0'; //将数组a末尾加上'\0'表示字符串结束
for(i=0;i<k;i++) //循环检测输入字符串中是否含有非数字字符
{
if(a[i]<'0'||a[i]>'9') //如果有非数字字符
{
write_com(0xc0); //将光标移动到第二行第一个字符位置
write_data('E'); //在LCD1602上显示'E'表示错误
write_data('r');
write_data('r');
write_data('o');
write_data('r');
delay(1000); //延时1秒钟
write_com(0x01); //清屏
k=0; //将计数器k置0
break; //跳出循环
}
}
if(i==k) //如果输入字符串中没有非数字字符
{
for(j=k-1,y=1,z=0;j>=0;j--,y*=10) //将输入字符串转换为整数
z+=y*(a[j]-'0');
write_com(0xc0); //将光标移动到第二行第一个字符位置
write_data('='); //在LCD1602上显示'='
for(i=0;x=z;i++) //将整数转换为字符数组
{
a[i]=x%10+'0';
x/=10;
}
for(i--;i>=0;i--) //从后往前输出字符数组,即为计算结果
write_data(a[i]);
delay(1000); //延时1秒钟
write_com(0x01); //清屏
k=0; //将计数器k置0
}
}
else if(b=='*') //如果输入字符为*
{
write_com(0xc0); //将光标移动到第二行第一个字符位置
write_data('*'); //在LCD1602上显示'*'
a[k++]='*'; //将输入字符存储到数组a中
}
else if(b>='0'&&b<='9') //如果输入字符为数字
{
write_data(b); //在LCD1602上显示输入字符
a[k++]=b; //将输入字符存储到数组a中
}
}
}
}
```
该程序使用P1口读取矩阵键盘的状态,通过判断行和列的状态来确定用户输入的字符。输入的字符会存储到一个字符数组中,最终通过将字符数组转换为整数进行计算,并将计算结果转换为字符数组输出到LCD1602上显示。
需要注意的是,在使用矩阵键盘时,需要设置P1口的高四位为输入模式,低四位为输出模式,并将低四位全部置0,以便读取行的状态。同时,需要将高四位全部置1,以便读取列的状态。在LCD1602初始化时,需要先发送8位数据接口的指令,否则无法正常显示。
keil+proteus 制作计算器_【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器
好的,我了解您的问题。基于Keil和Proteus,您可以使用矩阵键盘和LCD1602显示器来制作一个简易的计算器。下面是一些步骤:
1. 首先,您需要选择一个单片机来控制这个计算器。您可以选择常见的单片机,如AT89C51或ATmega16等。然后,使用Keil编写控制单片机的代码,以便它可以接收和处理用户输入并在LCD上显示输出。
2. 接下来,您需要使用Proteus来模拟这个计算器的电路。在Proteus中,选择适当的单片机和其他电路组件,例如矩阵键盘和LCD1602显示器。然后将它们连接在一起,以便它们可以相互交互。
3. 编写Keil代码以读取矩阵键盘的输入。您需要将矩阵键盘连接到单片机的GPIO引脚上,并编写代码以读取这些引脚的状态。根据用户的输入,您可以执行相应的计算并在LCD上显示输出。
4. 最后,您需要将Keil代码下载到单片机中,并使用Proteus模拟器测试您的计算器。
这些是制作一个简易计算器的基本步骤。当然,具体的实现可能会有所不同,具体取决于您选择的单片机和其他电路组件。希望这可以帮助您开始制作自己的计算器!