51单片机简易计算器lcd1602源码
时间: 2023-10-15 13:05:55 浏览: 145
下面是使用51单片机和LCD1602液晶屏实现的简易计算器源码:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[] = {"0123456789+-*/="};
uchar result[16] = {"Result:"};
uchar val1, val2;
uchar op, flag, i;
sbit RS = P2^6;
sbit EN = P2^7;
void delay(uint z)
{
uint x, y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
RS = 0;
P0 = com;
EN = 1;
_nop_();
EN = 0;
delay(5);
}
void write_data(uchar date)
{
RS = 1;
P0 = date;
EN = 1;
_nop_();
EN = 0;
delay(5);
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void show_result()
{
write_com(0x80+0x40);
for(i=0;i<7;i++)
write_data(result[i]);
for(i=0;i<8;i++)
write_data(table[i+val1]);
for(i=0;i<1;i++)
write_data(op);
for(i=0;i<8;i++)
write_data(table[i+val2]);
}
void get_num()
{
if(P1 != 0xff)
{
delay(1000);
if(P1 != 0xff)
{
for(i=0;i<16;i++)
result[i] = ' ';
val1 = P1;
P1 = 0xff;
while(P1 == 0xff);
val2 = P1;
P1 = 0xff;
show_result();
flag = 1;
}
}
}
void get_op()
{
if(P1 != 0xff && flag)
{
delay(1000);
if(P1 != 0xff)
{
op = table[P1-10];
P1 = 0xff;
show_result();
}
}
}
void calculate()
{
if(P1 != 0xff && flag)
{
delay(1000);
if(P1 != 0xff)
{
switch(op)
{
case '+':
val1 += val2;
break;
case '-':
val1 -= val2;
break;
case '*':
val1 *= val2;
break;
case '/':
val1 /= val2;
break;
}
P1 = 0xff;
show_result();
flag = 0;
}
}
}
void main()
{
P1 = 0xff;
init();
write_com(0x80);
for(i=0;i<7;i++)
write_data(result[i]);
while(1)
{
get_num();
get_op();
calculate();
}
}
```
该代码实现了使用按键输入两个数字和一个运算符,然后通过LCD1602液晶屏显示计算结果。按下等于号后,会进行计算,并在屏幕上显示结果。需要注意的是,该代码中使用了定时延时函数,实际项目中应该使用定时器来实现延时。
阅读全文