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);
        }
}
相关推荐
曾浩轩1 小时前
51单片机学习之旅——C语言小知识
c语言·学习·51单片机
海的预约19 小时前
51单片机-按键
单片机·嵌入式硬件·51单片机
暗诺星刻20 小时前
Java 数学函数库
java·数学·函数·计算器·计算
海的预约2 天前
51单片机-定时器中断
stm32·单片机·51单片机
曾浩轩2 天前
51单片机学习之旅——在LCD1602上显示时钟
嵌入式硬件·学习·51单片机
曾浩轩3 天前
51单片机学习之旅——定时器
嵌入式硬件·学习·51单片机
新晨单片机设计5 天前
【097】基于51单片机排队叫号系统【Keil程序+报告+原理图】
单片机·嵌入式硬件·51单片机·ad原理图
fengyuzhe135 天前
STC 51单片机63——关于STC8H的ADC通道切换问题
单片机·嵌入式硬件·51单片机
悠闲漫步者8 天前
江科大51单片机学习笔记(2)
笔记·学习·51单片机
零下273°12 天前
51单片机蜂鸣器铃声代码
单片机·嵌入式硬件·51单片机