51单片机简易计算器(中断,矩阵按键,数码管显示)【1】

您所在的位置:网站首页 单片机简易计算器程序代码 51单片机简易计算器(中断,矩阵按键,数码管显示)【1】

51单片机简易计算器(中断,矩阵按键,数码管显示)【1】

2024-07-10 18:06| 来源: 网络整理| 查看: 265

在上一篇简绍了几个重要的部分,下面先说一下计算器程序的

大体思路

: /这个计算器没有等于键,按下加号或减号相当于等号。/

初始化中断,设置三个变量先用AB表示,值全部为零。 进入输入数字子程序,等待数字输入 数字输入并显示,直到有运算符按下,B为输出值。判断运算符如果是加加号,A=A+B,并让下一个输入的数乘1,显示A,回到数字输入。如果是减号,A=A+B,并让下一个输入的数乘-1,显示A,回到数字输入。如果是乘号,进入乘循环A=A*B,显示A,直到按下加减号。如果是除号,进入除循环A=A/B,显示A,直到按下加减号。 _ _ 理论上,这是一个闭环的循环,可以进行无限次计算,占用内存不会扩大。 相关变量的设置

这是最糟糕的。。。自己贪图省事,设置了一大堆变量。。。 这确实有点乱,一些主要的变量都放在这里,后面子程序还有一堆临时变量。 大家不用看这段,只是说明后面都用到了。。。

#include "reg51.h" long double S; long double T; long double U; long int Z; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4;//控制数码管的三位数 sbit ZhengFu=P3^3;//输入正负号的按键,默认输入正数,按下输入负数 int i; char code DENG_CODE[22]= {0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x6f, 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF}; //数组,前10个0-9,后10个有小数点下标 #define GPIO_DENG P0//宏定义数码管共阴极(阳极) #define GPIO_ANJIAN P1//宏定义按键 int h; long double sz; unsigned char jia; unsigned char jian; unsigned char cheng; unsigned char chu; unsigned char dian; unsigned char KeyValue; long double A; unsigned char zhengfu=1; sbit led=P2^0;//输入负号时的中断指示灯 long double V; void Delay5ms() 延时函数 { unsigned char a,b,c; for(c=1;c>0;c--) for(b=8;b>0;b--) for(a=50;a>0;a--); } void Delay10ms()//延时函数 { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } 矩阵按键扫描 void KeyDown()//检测按下的是哪个数 { GPIO_ANJIAN=0x0f;//之前我先宏定义了GPIO_ANJIAN是八个引脚,现在电位00001111 if(GPIO_ANJIAN!=0x0f)//有按键按下 { Delay10ms();//延迟防抖动 if(GPIO_ANJIAN!=0x0f)//检测行 { GPIO_ANJIAN=0X0F; switch(GPIO_ANJIAN)//选择哪一行 { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } GPIO_ANJIAN=0XF0;//反转电位,检测列 Delay10ms();//延时防抖动 switch(GPIO_ANJIAN)//选择哪一列 { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((h0)//数大于零时 { G=S; while((S


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3