基于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单片机实现简单计算器相关推荐

  1. 基于51单片机的简单计算器

    在上一篇中,我们已经说过了基于51单片机的简单拨号器,在下边,我们将写一个计算器程序,原理很简单,只需要在拨号器的基础上,算出拨号器所表示的数字,并进行计算即可. 代码如下: #include&quo ...

  2. MCU-51:51单片机实现简单计算器功能

    目录 一.要实现什么功能 二.怎样实现 三.代码演示 注意:一定要看 今天不打算学新知识了,把前段时间学的复习下. 用单片机按键实现计算器简单功能,开干! 一.要实现什么功能 多位显示,小数计算,连续 ...

  3. 51单片机实现简易计算器

    本来做出来之后时间也是比较久了,具体代码的意义我暂时没有再回看,给标注出来,相信读者也是看了就明白,主要是当初在调试折腾的过程需要下一些功夫,因为当时是初学者,完成慢,成品也不好,还请多多包涵. 目录 ...

  4. c语言51单片机计算器,新基于51单片机的简易计算器

    <新基于51单片机的简易计算器>由会员分享,可在线阅读,更多相关<新基于51单片机的简易计算器(24页珍藏版)>请在人人文库网上搜索. 1.基于51单片机的简易计算器1.前言: ...

  5. 51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告)

    本设计: 基于51单片机的简易计算器设计(仿真+程序+原理图+PCB+设计报告) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编号S0001 芯片可以替换为 ...

  6. 【Proteus仿真】51单片机制作简易计算器+ LCD1602显示

    [Proteus仿真]51单片机制作简易计算器+ LCD1602显示 Proteus仿真效果演示 程序代码 #include<reg51.h> //头文件 #define uint uns ...

  7. 51单片机开关简单使用

    51单片机开关简单使用 文章目录 51单片机开关简单使用 实验环境 仿真图 代码实现 成果展示 实验环境 软件: Keil5+Proteus7 元件(主要): AT89C51 * 1, RESPACK ...

  8. 基于51单片机的简单风扇控制

    具体实现功能 系统由STC89C52单片机+单体数码管+LED指示灯+LM298N芯片芯片+直流电机构成. 具体功能: (1)模拟实现风扇的转动及摇头: (2)实现按键设置1 档强风,2档中风,3档弱 ...

  9. 基于51单片机的简易计算器的实现

    目录 一.硬件简介 1.LCD1602液晶显示器介绍 (1)LCD1602的组成 (2)各引脚功能介绍 (3)DDRAM 2.矩阵按键介绍 (1)矩阵按键的优点: (2)原理: (3)检测方法: (4 ...

  10. 用51单片机实现简单智能家居

    文章目录 前言 预备知识 正文 ESP8266模块的配置 代码设计 总结 前言 学了这么长,今天给大家分享一个小项目的雏形.这次智能家居,我们暂且实现一个智能灯.有三种控制方式的智能灯: 1.按键控制 ...

最新文章

  1. 菜鸟经验积累之JS运算
  2. erhai系统使用_web
  3. LeetCode-链表-206. 反转链表
  4. 删除计算机插优盘记录,如何彻底清除U盘在PC里的使用记录呢
  5. leetcode206 反转链表
  6. 1号店案例html源码_手把手教一起写jQuery版mini源码,分析jQuery的优势
  7. Xcode安装及卸载
  8. ajax跨域请求wcf服务,jQuery ajax跨域发布到WCF休息服务
  9. asp.net页面的生存周期
  10. Django自定义过滤器
  11. Python解答蓝桥杯省赛真题之从入门到真题
  12. 百度云盘客户端去除顶部广告
  13. Navicat 添加唯一索引
  14. Android Auto (AA)手机软件安装总结
  15. 苹果笔记本如何打开计算机,苹果笔记本如何进入BIOS设置 Mac怎么设置BIOS
  16. 青青草php,青青草原博客
  17. 绍耕反失败学课程(06)——在正确时间做正确的事情,轻装上阵抛弃负担
  18. 18、弱电工程综合布线系统常用的线材及设备图文资料
  19. 精通Flash 8中文版视频教程
  20. twine创建软链接_如何使用Twine和SugarCube创建交互式冒险游戏

热门文章

  1. Cadence Orcad Capture导出网表的方法图文教程及视频演示
  2. java工作流框架jbpm_Jbpm工作流与ssh框架集成
  3. 《Java就业培训教程》_张孝祥_书内源码_03
  4. python爬取音乐源码_Python爬虫教程,爬取网易云的音乐
  5. Qt将GeoJson文件转为mif文件的示例
  6. 3cd修改tftp服务器地址,模式tftp服务器是什么
  7. linux6禁用屏幕保护程序,禁用屏幕保护程序(ScreenSaver Disabled)
  8. 人力资源管理系统如何助力提升HR工作效率
  9. Excel文件导入web页面
  10. shell 强制覆盖文件夹_如何强制robocopy覆盖文件