单片机源程序如下:

#include

//头文件

#define uint unsigned int

#define uchar unsigned char

sbit lcden=P1^1; //LCD1602控制引脚

sbit rs=P1^0;

sbit rw=P1^2;

sbit busy=P0^7;//LCD忙

char i,j,temp,num,num_1;

long a,b,c;     //a,第一个数 b,第二个数 c,得数

float a_c,b_c;

uchar flag,fuhao;//flag表示是否有运算符键按下,fuhao表征按下的是哪个运算符

//flag=1表示运算符键按下,flag=0表示运算符键没有按下;

//fuhao=1为加法,fuhao=2为减法,fuhao=3为乘法,fuhao=4为除法。

uchar code table[]={//运算数字输入数组

7,8,9,0,

4,5,6,0,

1,2,3,0,

0,0,0,0};

uchar code table1[]={        //经处理后进行键输入显示准备的数组

7,8,9,0x2f-0x30,        //7,8,9,÷

4,5,6,0x2a-0x30,        //4, 5, 6,×

1,2,3,0x2d-0x30,        //1, 2, 3,-

0x01-0x30,0,0x3d-0x30,0x2b-0x30//C,0,=,+

};

void delay(uchar z) // 延迟函数

{

uchar y;

for(z;z>0;z--)

for(y=0;y<110;y++);

}

void write_com(uchar com) // 写指令函数

{

rs=0;

P0=com;    //com指令付给P0口

delay(5);lcden=1;delay(5); lcden=0;

}

void write_date(uchar date) // 写数据函数

{

rs=1; P0=date; delay(5);

lcden=1; delay(5); lcden=0;

}

void init() //初始化

{

num=-1;

lcden=1; //使能信号为高电平

rw=0;

write_com(0x38); //8位,2行

delay(5); write_com(0x38); //8位,2行

delay(5); write_com(0x0c); //显示开,光标关,不闪烁*/

delay(1); write_com(0x06); //增量方式不移位 显竟獗暌贫 柚?

delay(1); write_com(0x80); //检测忙信号

delay(1); write_com(0x01); //显示开,光标关,不闪烁

num_1=0;

i=0; j=0;

a=0;     //第一个参与运算的数

b=0;     //第二个参与运算的数

c=0;

flag=0; //flag表示是否有符号键按下,

fuhao=0; // fuhao表征按下的是哪个符号

}

void keyscan() // 键盘扫描程序

{

P2=0xfe;

if(P2!=0xfe)

{

delay(20);// 延迟20ms

if(P2!=0xfe) {  temp=P2&0xf0;

switch(temp)

{

case 0xe0:num=0;   break;        //7

case 0xd0:num=1;   break;         //8

case 0xb0:num=2;   break;        //9

case 0x70:num=3;   break;        //÷

}

}   while(P2!=0xfe);

if(num==0||num==1||num==2)//如果按下的是'7','8'或'9

{

if(j!=0){write_com(0x01); j=0;  }

if(flag==0)//没有按过运算符键

{ a=a*10+table[num];    } //按下数字存储到a

else//如果按过运算符键

{    b=b*10+table[num];   }//按下数字存储到b

}

else//如果按下的是'/'            除法

{

flag=1;         //按下运算符

fuhao=4;//4表示除号已按

}

i=table1[num];     //数据显示做准备

write_date(0x30+i);//显示数据或操作符号

}

P2=0xfd;

if(P2!=0xfd)

{

delay(20);

if(P2!=0xfd){  temp=P2&0xf0;

switch(temp)

{

case 0xe0:num=4; break; //4

case 0xd0:num=5; break; //5

case 0xb0:num=6; break; //6

case 0x70:num=7; break; //×

}

}   while(P2!=0xfd);//等待按键释放

if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'

{

if(j!=0){ write_com(0x01);  j=0;   }

if(flag==0)//没有按过运算符键

{ a=a*10+table[num];     }

else//如果按过运算符键

{ b=b*10+table[num];   }

}

else//如果按下的是'×'

{  flag=1;

fuhao=3;//3表示乘号已按

}

i=table1[num];      //数据显示做准备

write_date(0x30+i);//显示数据或操作符号

}

P2=0xfb;

if(P2!=0xfb){  delay(20);

if(P2!=0xfb) { temp=P2&0xf0;

switch(temp)

{

case 0xe0:num=8;    break;         //1

case 0xd0:num=9;    break;         //2

case 0xb0:num=10;   break;         //3

case 0x70:num=11;   break;         //-

}

}   while(P2!=0xfb);

if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'

{

if(j!=0){ write_com(0x01);  j=0;  }

if(flag==0)//没有按过运算符键

{ a=a*10+table[num];   }

else//如果按过运算符键

{ b=b*10+table[num]; }

}

else if(num==11)//如果按下的是'-'

{

flag=1;

fuhao=2;//2表示减号已按

}

i=table1[num];  //数据显示做准备

write_date(0x30+i);//显示数据或操作符号

}

P2=0xf7;

if(P2!=0xf7){   delay(20);

if(P2!=0xf7){ temp=P2&0xf0;

switch(temp)

{

case 0xe0:num=12; break;  //清0键

case 0xd0:num=13; break;  //数字0

case 0xb0:num=14; break;  //等于键

case 0x70:num=15; break;  //加

}

} while(P2!=0xf7);

switch(num)

{

case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"

break;

case 13:{                //按下的是"0"

if(flag==0)//没有按过运算符键

{ a=a*10;  write_date(0x30);     P2=0;       }

else if(flag>=1)//如果按过运算符键

关键字:

51单片机

简易计算器程序

加减乘除运算

编辑:什么鱼 引用地址:

http://news.eeworld.com.cn/mcu/ic511086.html

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

单片机加减法计算器_51单片机简易计算器程序 实现数字的加减乘除运算相关推荐

  1. 单片机四位数加减计算机程序,51单片机简易计算器程序 实现数字的加减乘除运算...

    //头文件 #define uint unsigned int #define uchar unsigned char sbit lcden=P1^1; //LCD1602控制引脚 sbit rs=P ...

  2. codeblocks 51单片机学习(四)简易计算器

    基于51单片机的数码管和矩阵按键实现的简易计算器,其实可以加入的东西有很多,就像我这个负数运算还没有加进去,以及我的除法运算只能算655(65535/100)以内的数,不过就先做到这里,这个作品至少已 ...

  3. 单片机加减法计算器_51单片机之4位数加法计算器的设计报告

    2014级单片机原理与应用 课程设计报告 课题名称 4位数加法计算器的设计 一.设计任务及要求: 设计任务: 1.通过4*4矩阵键盘输入数字及运算符: 2.可以进行4位十进制数以内的加法预算.如果计算 ...

  4. c51单片机矩阵键盘1602计算器_51单片机矩阵键盘计算器.doc

    51单片机矩阵键盘计算器 51单片机矩阵键盘计算器 /**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD ...

  5. 51单片机8位数码管简易计算器(4*4矩阵键盘)

    筒子们,上周参考了好多单片机计算器的文章,但是全文阅读基本都是付费,看了好几篇:参考了某个思路,终于完成了一个简易版的计算器: 1.8位数码管显示 2.简单的四则运算(加减乘除) 3.PS,以下代码目 ...

  6. java swt 计算器_JAVA开发简易计算器界面-SWT

    大家好,我是成都[LD],博客四年前就申请了,一直没打理,最近正好有时间,遂萌生了写技术博客的念头.我不得不感慨现在新技术更新很快,一不小心,就感觉自身就Out了.记得一年前,当时我也是在51CTO上 ...

  7. m0单片机io口_51单片机独立按键和矩阵按键实现

    独立按键实验 按键是一种电子开关,使用时轻轻按开关按钮就可使开关接通,当松开手时, 开关断开.我们开发板上使用的按键及内部简易图如下图所示 管脚与管脚之间(注意是距离)距离长的是导通状态,短的是接通状 ...

  8. java编写简易计算器_java实现简易计算器功能

    本文为大家分享了java实现简易计算器功能,具体内容如下 题目: 编写一个模拟计算器的程序.在面板中添加一个文本框(显示按键及运算结果). 10个数字按钮(0~9).4个运算按钮(加.减.乘.除).一 ...

  9. android 坐标点计算器,Android实现简易计算器

    开之前我还是想问问老师,为什么一定要星期天前交作业呢?由于条件限制,作品是赶出来的不是细细琢磨出来的.所以在这版apk中功能较为简易,有待后期再不断更新与优化 总体效果图如下 布局activity_m ...

最新文章

  1. 工业4.0是个白日梦吗?
  2. 使用 JProbe 调试 Linux 内核(转)
  3. 用友u8cloud使用教程_四大ERP供应商SAP、Oracle、用友、金蝶哪个好
  4. Visual Studio 2017 15.9 版本发布:推出全新的导入 / 导出配置功能
  5. 3.0 Android组件之间的信使Intent
  6. java发送接收UDP数据包:字符串,byte[]字节数组,文件等
  7. 编程之美:寻找发帖水王 扩展
  8. 题目:有一分数序列:2 / 1,3 / 2,5 / 3,8 / 5,13 / 8,21 / 13...求出这个数列的前20项之和。
  9. android 单独编译contacts,Android编译全过程
  10. array在java_在Java中的ArrayLists之间进行转换
  11. 导入grafana的dashboards模板
  12. 主成分分析(PCA)算法实现iris数据集降维
  13. ZigBee协议栈简介
  14. 视差贴图,凹凸贴图,法线贴图和位移贴图的区别
  15. 通俗理解动态库与静态库区别
  16. 163邮箱怎么注册,怎么给邮箱起一个好用的用户名?
  17. 计算机从外部世界接收信息和向外部世界反馈运算结果的手段
  18. vue.js解析lrc格式歌词文件
  19. 俄罗斯方块游戏的算法
  20. JavaScript获取汉字的区位码

热门文章

  1. SAR 101:合成孔径雷达简介
  2. 硬件课程设计:基于STM32的多功能播放器之MP3音乐播放
  3. Miracast开发
  4. 记录一次ssh密码被爆破
  5. 【Edge游览器设置全局Dark模式】
  6. 创业公司工作的一点心得
  7. 【SQL练习】已知表名my_employees,完成以下功能
  8. 如何在网站上加入google地图 .net (by yfdong22)
  9. Java里的date类型 加上秒单位后的时间
  10. 自动化测试面试题相关