目录
一、主要功能
1、LCD1602液晶显示
2、矩阵按键
3、加减乘除,开方运算
4、带符号运算
5、最大 999*999
二、使用步骤
基于51单片机多功能计算器
包含:程序,仿真,文档等
三、硬件资源
1、51单片机核心模块
2、按键模块
3、LCD1602显示模块
四、软件设计
#include
#include
#include
#include
#include
sbit RS = P2^5;
sbit RW = P2^6;
sbit E = P2^7;
#define Data P0//数据端口
//全局变量
float num1;//第一操作数num1 (初始为零)
float num2;//第二操作数num2 (初始为零)
char yun_flag=’+’;//运算符号 yun_flag (默认为+ )
char key_last;//上次按键状态标志 key_last
char sqrt_flag;//开方键按下标志 sqrt_flag
unsigned long pos_flag=1;//小数位权pos_flag (默认为1)
char neg_flag;//正负标志 neg_flag
char data c_num1[15]=” “;//c_num1 字符型第一操作数 (数组不定义大小与其他变量冲突)
char data c_num2[15]=” “;//c_num2 字符型第二操作数
char error;//运算法则错误;
char len;//小数点后位数
/* 微秒延时函数 */
/******************************************************************/
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1; /*12MHz频率*/
while(–uscnt);
}
/******************************************************************/
/* 毫秒函数声明 */
/******************************************************************/
void DelayMs(unsigned char ms)
{
while(–ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
/******************************************************************/
/* 写入命令函数 */
/******************************************************************/
void WriteCommand(unsigned char c)
{
DelayMs(5);//操作前短暂延时,保证信号稳定
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/******************************************************************/
/* 写入数据函数 */
/******************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //操作前短暂延时,保证信号稳定
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/******************************************************************/
/* 写入字节函数 */
/******************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc
else
p=pos+0x80; //是第二行则命令代码高4位为0x8
WriteCommand (p);//写命令
WriteData (c); //写数据
}
/******************************************************************/
/* 写入字符串函数 */
/******************************************************************/
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line for (i=0;*(ptr+i)!=”;i++)
ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/******************************************************************/
/* 初始化函数 */
/******************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动位置
WriteCommand(0x0c); //显示开及光标设置
WriteCommand(0x01); //显示清屏
}
五、实验现象
演示视频:


文章来源于互联网:【Proteus仿真】【51单片机】多功能计算器系统
相关推荐: 百度文心一言ERNIE-4.5-0.3B-PT开源大模型本地私有化部署
号外号外!6月30号,百度文心一言官宣开源ERNIE 4.5大模型!!! 一收到这个消息,博主就立马从GitCode拉了个模型,本地私有化部署体验了一下,一个字,酷! 鉴于绝大多数玩家的设备条件有限,博主选择CPU就可以跑的 ERNIE-4.5-0.3B-PT…
5bei.cn大模型教程网










