51单片机实现简单计算器
基于STC89C52RC,使用lcd1602,串口实现简单计算器加减乘除,串口输入一个字符,LCD液晶就显示一个字符
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit LCD1602_RS=P2^6;//数据命令选择
sbit LCD1602_RW=P2^5;//读写选择
sbit LCD1602_E=P2^7; //使能信号
#define LCD1602_DATAPORT P0 //宏定义LCD1602数据端口
unsigned char data1 = 0;
unsigned int num1 = 0,num2 = 0,num3 = 0,fu = 0;
int printf_flag = 0;
void uart_init(u8 baud)
{
TMOD|=0X20; //设置计数器工作方式2
SCON=0X50; //设置为工作方式1
PCON=0X80; //波特率加倍
TH1=baud; //计数器初始值设置
TL1=baud;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//选择命令
LCD1602_RW=0;//选择写
LCD1602_E=0;
LCD1602_DATAPORT=cmd;//准备命令
LCD1602_E=1;//使能脚E先上升沿写入
LCD1602_E=0;//使能脚E后负跳变完成写入
}
void lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//选择数据
LCD1602_RW=0;//选择写
LCD1602_E=0;
LCD1602_DATAPORT=dat;//准备数据
LCD1602_E=1;//使能脚E先上升沿写入
LCD1602_E=0;//使能脚E后负跳变完成写入
}
void lcd1602_init(void)
{
lcd1602_write_cmd(0x38);//数据总线8位,显示2行,5*7点阵/字符
lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
lcd1602_write_cmd(0x01);//清屏
}
void lcd1602_clear(void)
{
lcd1602_write_cmd(0x01);
}
void uart() interrupt 4 //串口通信中断函数
{
if(RI==1)
{
RI=0;
data1 = SBUF;
}
}
void main()
{
uart_init(0XFA);//波特率为9600
lcd1602_init();//LCD1602初始化
while(1)
{
if(RI == 1) // 是否有数据到来
{
RI = 0;
data1 = SBUF;
lcd1602_write_cmd(0X0f);
lcd1602_write_cmd(0X06); //控制指针右移
if(( data1>='0') && (data1<='9'))
{
num1 = 10*num1+(data1 -'0');
lcd1602_write_data(0X30+num1);
}
else if(data1 == '+')
{
fu = data1;
num2 = num1;
num1 = 0;
lcd1602_write_data(0x2B);
}
else if(data1 == '-')
{
fu = data1;
num2 = num1;
num1 = 0;
lcd1602_write_data(0x2D);
}
else if(data1 == '*')
{
fu = data1;
num2 = num1;
num1 = 0;
lcd1602_write_data(0x2A);
}
else if(data1 == '/')
{
fu = data1;
num2 = num1;
num1 = 0;
lcd1602_write_data(0x2F) ;
}
else if(data1 == '='&&fu == '+')//
{
num3 = num1+num2;
lcd1602_write_data(0x3D);
printf_flag = 1;
}
else if(data1 == '='&&fu == '-')// &&fu; == '-'
{
num3 = num2-num1;
lcd1602_write_data(0x3D);
printf_flag = 1;
}
else if(data1 == '='&&fu == '*')//&&fu; == '*'
{
num3 = num1*num2;
lcd1602_write_data(0x3D);
printf_flag = 1;
}
else if(data1 == '='&&fu == '/')// '&&fu; == '/'
{
num3 = num2/num1;
lcd1602_write_data(0x3D);
printf_flag = 1;
}
if(data1='R')
{
lcd1602_clear();
RI == 1;
}
if(printf_flag == 1)
{
lcd1602_write_data(0X30+num3) ;
}
}
}
}
51单片机实现简单计算器相关推荐
- 基于51单片机的简单计算器
在上一篇中,我们已经说过了基于51单片机的简单拨号器,在下边,我们将写一个计算器程序,原理很简单,只需要在拨号器的基础上,算出拨号器所表示的数字,并进行计算即可. 代码如下: #include&quo ...
- MCU-51:51单片机实现简单计算器功能
目录 一.要实现什么功能 二.怎样实现 三.代码演示 注意:一定要看 今天不打算学新知识了,把前段时间学的复习下. 用单片机按键实现计算器简单功能,开干! 一.要实现什么功能 多位显示,小数计算,连续 ...
- 51单片机实现简易计算器
本来做出来之后时间也是比较久了,具体代码的意义我暂时没有再回看,给标注出来,相信读者也是看了就明白,主要是当初在调试折腾的过程需要下一些功夫,因为当时是初学者,完成慢,成品也不好,还请多多包涵. 目录 ...
- c语言51单片机计算器,新基于51单片机的简易计算器
<新基于51单片机的简易计算器>由会员分享,可在线阅读,更多相关<新基于51单片机的简易计算器(24页珍藏版)>请在人人文库网上搜索. 1.基于51单片机的简易计算器1.前言: ...
- 51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)
本设计: 基于51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号S0001 芯片可以替换为 ...
- 【Proteus仿真】51单片机制作简易计算器+ LCD1602显示
[Proteus仿真]51单片机制作简易计算器+ LCD1602显示 Proteus仿真效果演示 程序代码 #include<reg51.h> //头文件 #define uint uns ...
- 51单片机开关简单使用
51单片机开关简单使用 文章目录 51单片机开关简单使用 实验环境 仿真图 代码实现 成果展示 实验环境 软件: Keil5+Proteus7 元件(主要): AT89C51 * 1, RESPACK ...
- 基于51单片机的简单风扇控制
具体实现功能 系统由STC89C52单片机+单体数码管+LED指示灯+LM298N芯片芯片+直流电机构成. 具体功能: (1)模拟实现风扇的转动及摇头: (2)实现按键设置1 档强风,2档中风,3档弱 ...
- 基于51单片机的简易计算器的实现
目录 一.硬件简介 1.LCD1602液晶显示器介绍 (1)LCD1602的组成 (2)各引脚功能介绍 (3)DDRAM 2.矩阵按键介绍 (1)矩阵按键的优点: (2)原理: (3)检测方法: (4 ...
- 用51单片机实现简单智能家居
文章目录 前言 预备知识 正文 ESP8266模块的配置 代码设计 总结 前言 学了这么长,今天给大家分享一个小项目的雏形.这次智能家居,我们暂且实现一个智能灯.有三种控制方式的智能灯: 1.按键控制 ...
最新文章
- 菜鸟经验积累之JS运算
- erhai系统使用_web
- LeetCode-链表-206. 反转链表
- 删除计算机插优盘记录,如何彻底清除U盘在PC里的使用记录呢
- leetcode206 反转链表
- 1号店案例html源码_手把手教一起写jQuery版mini源码,分析jQuery的优势
- Xcode安装及卸载
- ajax跨域请求wcf服务,jQuery ajax跨域发布到WCF休息服务
- asp.net页面的生存周期
- Django自定义过滤器
- Python解答蓝桥杯省赛真题之从入门到真题
- 百度云盘客户端去除顶部广告
- Navicat 添加唯一索引
- Android Auto (AA)手机软件安装总结
- 苹果笔记本如何打开计算机,苹果笔记本如何进入BIOS设置 Mac怎么设置BIOS
- 青青草php,青青草原博客
- 绍耕反失败学课程(06)——在正确时间做正确的事情,轻装上阵抛弃负担
- 18、弱电工程综合布线系统常用的线材及设备图文资料
- 精通Flash 8中文版视频教程
- twine创建软链接_如何使用Twine和SugarCube创建交互式冒险游戏
热门文章
- Cadence Orcad Capture导出网表的方法图文教程及视频演示
- java工作流框架jbpm_Jbpm工作流与ssh框架集成
- 《Java就业培训教程》_张孝祥_书内源码_03
- python爬取音乐源码_Python爬虫教程,爬取网易云的音乐
- Qt将GeoJson文件转为mif文件的示例
- 3cd修改tftp服务器地址,模式tftp服务器是什么
- linux6禁用屏幕保护程序,禁用屏幕保护程序(ScreenSaver Disabled)
- 人力资源管理系统如何助力提升HR工作效率
- Excel文件导入web页面
- shell 强制覆盖文件夹_如何强制robocopy覆盖文件