51单片机四位数码管计算器 Proteus仿真程序

目录

概要

仿真图

部分代码

资料下载地址:51单片机四位数码管计算器 Proteus仿真程序

概要

复制代码
1.系统通过4x4的矩阵键盘输入数字及运算符。 
2.可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E
3.可以进行加法以外的计算 (乘、除、减) 。

仿真图

部分代码

cpp 复制代码
void main(){
        while(1){
                keyScan();                       
                pd();                                       
                display(num);                       
        }
}
void keyAdd(){              
        if(numKey<10000){
                num=num*10+numKey;
                numKey=10000;
        }
}
void pd(){
        keyAdd();                               
        if(fuhao=='c'){                       
                num=0;
                num0=0;
                fuhao0='0';
                fuhao='0';
        }
        if(fuhao=='+'){                       
                fuhao0='+';                       
                fuhao='0';                       
                num0=num;                       
                num=0;
        }
        if(fuhao=='-'){                               
                fuhao0='-';
                fuhao='0';
                num0=num;
                num=0;
        }       
        if(fuhao=='*'){                               
                fuhao0='*';
                fuhao='0';
                num0=num;
                num=0;
        }       
        if(fuhao=='/'){                       
                fuhao0='/';
                fuhao='0';
                num0=num;
                num=0;
        }
        if(fuhao=='='){                       
                if(fuhao0=='+')num=num0+num;
                else if(fuhao0=='-')num=num0-num;
                else if(fuhao0=='*')num=num0*num;
                else if(fuhao0=='/')num=num0/num;
                fuhao='0';
                num0=0;
        }
}
void keyScan(){
        P3=0xef;//1110 1111
        if(!P3_3){numKey=7;while(!P3_3);}if(!P3_2){numKey=8;while(!P3_2);}if(!P3_1){numKey=9;while(!P3_1);}if(!P3_0){fuhao='/';while(!P3_0);}
        P3=0xdf;
        if(!P3_3){numKey=4;while(!P3_3);}if(!P3_2){numKey=5;while(!P3_2);}if(!P3_1){numKey=6;while(!P3_1);}if(!P3_0){fuhao='*';while(!P3_0);}
        P3=0xbf;
        if(!P3_3){numKey=1;while(!P3_3);}if(!P3_2){numKey=2;while(!P3_2);}if(!P3_1){numKey=3;while(!P3_1);}if(!P3_0){fuhao='-';while(!P3_0);}
        P3=0x7f;
        if(!P3_3){fuhao='c';while(!P3_3);}if(!P3_2){numKey=0;while(!P3_2);}if(!P3_1){fuhao='=';while(!P3_1);}if(!P3_0){fuhao='+';while(!P3_0);}
}
void display(int num1){
        if(num1<= 9999)       
        {
                n4=num1%10;
                n3=num1/10%10;
                n2=num1/100%10;
                n1=num1/1000%10;
                P2=0x01;
                P0=duan[n1];
                DelayXms(4);
                P2=0x02;
                P0=duan[n2];
                DelayXms(4);
                P2=0x04;
                P0=duan[n3];
                DelayXms(4);
                P2=0x08;
                P0=duan[n4];
                DelayXms(4);
        }
        else
        {
                P2=0x01;
                P0=duan[10];
                DelayXms(4);
                P2=0x02;
                P0=duan[10];
                DelayXms(4);
                P2=0x04;
                P0=duan[10];
                DelayXms(4);
                P2=0x08;
                P0=duan[10];
                DelayXms(4);
       
        }
               
}
void DelayXms(unsigned int x)               
{        unsigned char i, j;
        while(x--)
        {        i = 2;
                j = 239;
                do{while (--j);
                }while (--i);
        }
}
相关推荐
小龙报7 天前
【51单片机】 给单片机加 “安全锁”!看门狗 WDT:原理 + 配置 + 复位验证全拆解,让程序稳定不跑飞
驱动开发·stm32·单片机·嵌入式硬件·物联网·51单片机·硬件工程
恶魔泡泡糖7 天前
51单片机DS1302时钟
单片机·嵌入式硬件·51单片机
嵌入式×边缘AI:打怪升级日志9 天前
C语言算术赋值运算复习笔记
c语言·stm32·单片机·算法·51单片机·proteus·代码
想放学的刺客10 天前
整理了120道单片机嵌入式面试题与答案,覆盖了硬件电路和C语言等核心领域。
c语言·c++·stm32·单片机·嵌入式硬件·mcu·51单片机
恶魔泡泡糖10 天前
51单片机-DS18B20温度传感器
单片机·嵌入式硬件·51单片机
小龙报11 天前
【51单片机】不止是调光!51 单片机 PWM 实战:呼吸灯 + 直流电机正反转 + 转速控制
数据结构·c++·stm32·单片机·嵌入式硬件·物联网·51单片机
送外卖的工程师11 天前
STM32 驱动五线四相步进电机(28BYJ-48+ULN2003)教程
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·proteus
xutSwIpZotzM13 天前
Matlab Simulink 实现事件触发控制仿真并达稳定
proteus
清风66666613 天前
基于51单片机的双档交流电压表设计与实现
单片机·嵌入式硬件·毕业设计·51单片机·课程设计·期末大作业
vQFQJbUiJ14 天前
matlab/simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略,交流...
51单片机