- 本次计算器仿真实验中,使用了共阳极的数码管7SEG-MPX4-CA为计算器的显示组件,十六个button按钮为计算器的选择按钮。如果你想显示更多位可以自己选别的,接线方式一样,如若是6位以上的推荐用译码器啥的节省io口(ps用的89c51芯片仿真)
- 本次实验使用P2口控制数码管位选,P3口控制数码管段选,P0口控制矩阵键盘,P0口低四位控制行选择,高四位控制列选择:
int digit[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳极数码管0-9 int box[4]={0}; //用来动态改变digit数组的值 int KeyValue; //用来保存按键的值 int KeySwitch; //用来判断KeyValue是否是0到9的数
-
创建显示函数,即四位数码管数字在极短延时下交错显示,具体代码如下(延时函数自己写一下就好):
void display() { P2=0x01;P3=digit[box[3]]; delay(10);//初值都为零,上面定义了 P2=0x02;P3=digit[box[2]];delay(10); P2=0x04;P3=digit[box[1]];delay(10); P2=0x08;P3=digit[box[0]];delay(10); }
- 创建矩阵键盘的行列判断函数,先判断列,再判断行,具体代码如下:
//这样给keyvalue赋值,能巧妙的使keyvalue的0~9值对应键盘按键的0~9,方便后面给数码管赋值,行列选择原理是按下按钮后,低电平会拉低高电平,改变端口值 P1=0xf0; if(P1!=0xf0) { delay(20); if(P1!=0xf0) { P1=0xf0; switch(P1) { case(0Xe0): KeyValue=0;break; case(0Xd0): KeyValue=1;break; case(0Xb0): KeyValue=2;break; case(0X70): KeyValue=3;break;} P1=0x0f; switch(P1) { case(0X0e): KeyValue=KeyValue;break; case(0X0d): KeyValue=KeyValue+4;break; case(0X0b): KeyValue=KeyValue+8;break; case(0X07): KeyValue=KeyValue+12;break;}
- 定义数字0~9的按键状态若被按下则keyswitch值为1,目的是为了和后面的运算符号区别开来做判断,具体代码如下:
if(KeyValue==0 || KeyValue==1 || KeyValue==2 || KeyValue==3 || KeyValue==4 || KeyValue==5 || KeyValue==6 || KeyValue==7 || KeyValue==8 || KeyValue==9) { KeySwitch=1; }
- 松开按键判断,因为不做这个判断的话,按下一个数字后,KeySwitch的值一直为1,则会直接使四个数码都显示为同一个数字,具体代码如下:
Int a; a=0; //P1是判断上面的键盘选择的值的 while((a<100)&&(P1!=0x0F
51单片机用数码管做的简易计算器
最新推荐文章于 2023-12-14 17:28:51 发布
这篇博客介绍了一个使用51单片机和数码管7SEG-MPX4-CA构建的简易计算器实验。通过P2口控制数码管位选,P3口控制段选,P0口控制矩阵键盘。实验中,作者创建了显示函数、矩阵键盘判断函数,并实现了数字0-9及加减乘除运算。当按键按下时,数码管显示相应的数值或运算结果,除法运算时还进行了除数为零的错误处理。
摘要由CSDN通过智能技术生成