51单片机用数码管做的简易计算器

这篇博客介绍了一个使用51单片机和数码管7SEG-MPX4-CA构建的简易计算器实验。通过P2口控制数码管位选,P3口控制段选,P0口控制矩阵键盘。实验中,作者创建了显示函数、矩阵键盘判断函数,并实现了数字0-9及加减乘除运算。当按键按下时,数码管显示相应的数值或运算结果,除法运算时还进行了除数为零的错误处理。
摘要由CSDN通过智能技术生成
  1. 本次计算器仿真实验中,使用了共阳极的数码管7SEG-MPX4-CA为计算器的显示组件,十六个button按钮为计算器的选择按钮。如果你想显示更多位可以自己选别的,接线方式一样,如若是6位以上的推荐用译码器啥的节省io口(ps用的89c51芯片仿真)
  2. 本次实验使用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的数

  3. 创建显示函数,即四位数码管数字在极短延时下交错显示,具体代码如下(延时函数自己写一下就好):

    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);
    	  
    	}

  4. 创建矩阵键盘的行列判断函数,先判断列,再判断行,具体代码如下:
    //这样给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;}

  5. 定义数字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;
       			}

  6. 松开按键判断,因为不做这个判断的话,按下一个数字后,KeySwitch的值一直为1,则会直接使四个数码都显示为同一个数字,具体代码如下:
    Int a;  a=0;	//P1是判断上面的键盘选择的值的	 
    while((a<100)&&(P1!=0x0F
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值