51单片机计算器lcd1602代码
时间: 2023-10-06 21:11:51 浏览: 35
以下是一个简单的51单片机计算器LCD1602代码,仅供参考:
```c
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0; //定义LCD1602接口
sbit RW=P2^1;
sbit E=P2^2;
sbit P0_4=P0^4;
sbit P0_5=P0^5;
sbit P0_6=P0^6;
sbit P0_7=P0^7;
uchar code table[]="0123456789"; //定义数字表
uchar num1,num2,result; //定义运算数和结果
uchar op; //定义运算符
bit flag=0; //定义标志位,用于判断是否已经计算过
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com) //写命令函数
{
RS=0;
RW=0;
E=1;
P0=com;
delay(5);
E=0;
}
void write_data(uchar dat) //写数据函数
{
RS=1;
RW=0;
E=1;
P0=dat;
delay(5);
E=0;
}
void init() //LCD1602初始化函数
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void display(uchar *p) //在LCD上显示字符串函数
{
while(*p!='\0')
{
write_data(*p++);
}
}
void keyscan() //键盘扫描函数
{
if(P0_4==0) //判断是否按下键1
{
op='+';
}
if(P0_5==0) //判断是否按下键2
{
op='-';
}
if(P0_6==0) //判断是否按下键3
{
op='*';
}
if(P0_7==0) //判断是否按下键4
{
op='/';
}
}
void main()
{
init();
while(1)
{
keyscan(); //扫描键盘
if(flag) //如果已经计算过了
{
num1=result; //将结果作为新的运算数
}
if(P0_4==0||P0_5==0||P0_6==0||P0_7==0) //如果按下了运算符
{
display(" "); //清空LCD屏幕
delay(100);
flag=0; //标志位清零
display(table+num1); //在LCD上显示第一个运算数
delay(100);
display(&op); //在LCD上显示运算符
delay(100);
}
else if(P0_0==0) //如果按下了键5(等于号)
{
display(" "); //清空LCD屏幕
delay(100);
flag=1; //标志位设为1
num2=P0_1; //将第二个运算数设为P0.1口的值
switch(op) //根据运算符进行计算
{
case '+':result=num1+num2;break;
case '-':result=num1-num2;break;
case '*':result=num1*num2;break;
case '/':result=num1/num2;break;
}
display(table+result); //在LCD上显示计算结果
delay(100);
}
}
}
```
注意事项:
1. 该代码仅供参考,具体实现还需要根据自己的需要进行修改。
2. 该代码使用了P0口作为输入输出口,如果需要使用其他口,请修改代码。
3. 该代码中使用的LCD1602模块为4位数据接口,如果使用8位数据接口,请修改代码。