找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 502|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
4位数加法计算器的设计
1.系统通过4x4的矩阵键盘输入数字及运算符。 (40分)
2.可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E(30分)
3.可以进行加法以外的计算 (乘、除、减) 。 (20 )。4@,其他功能 (创新部分 10分)

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <REGX52.H>               
  2. void display(int num1);                       
  3. void DelayXms(unsigned int x);       
  4. void keyScan();                                       
  5. void keyAdd();                                       
  6. void pd();                                               
  7. int n1, n2, n3, n4, numKey=10000, num=0, num0=0;
  8. char fuhao='0',fuhao0='0';               
  9. unsigned char duan[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x86};
  10. void main(){
  11.         while(1){
  12.                 keyScan();                       
  13.                 pd();                                       
  14.                 display(num);                       
  15.         }
  16. }
  17. void keyAdd(){              
  18.         if(numKey<10000){
  19.                 num=num*10+numKey;
  20.                 numKey=10000;
  21.         }
  22. }
  23. void pd(){
  24.         keyAdd();                               
  25.         if(fuhao=='c'){                       
  26.                 num=0;
  27.                 num0=0;
  28.                 fuhao0='0';
  29.                 fuhao='0';
  30.         }
  31.         if(fuhao=='+'){                       
  32.                 fuhao0='+';                       
  33.                 fuhao='0';                       
  34.                 num0=num;                       
  35.                 num=0;
  36.         }
  37.         if(fuhao=='-'){                               
  38.                 fuhao0='-';
  39.                 fuhao='0';
  40.                 num0=num;
  41.                 num=0;
  42.         }       
  43.         if(fuhao=='*'){                               
  44.                 fuhao0='*';
  45.                 fuhao='0';
  46.                 num0=num;
  47.                 num=0;
  48.         }       
  49.         if(fuhao=='/'){                       
  50.                 fuhao0='/';
  51.                 fuhao='0';
  52.                 num0=num;
  53.                 num=0;
  54.         }
  55.         if(fuhao=='='){                       
  56.                 if(fuhao0=='+')num=num0+num;
  57.                 else if(fuhao0=='-')num=num0-num;
  58.                 else if(fuhao0=='*')num=num0*num;
  59.                 else if(fuhao0=='/')num=num0/num;
  60.                 fuhao='0';
  61.                 num0=0;
  62.         }
  63. }
  64. void keyScan(){
  65.         P3=0xef;//1110 1111
  66.         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);}
  67.         P3=0xdf;
  68.         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);}
  69.         P3=0xbf;
  70.         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);}
  71.         P3=0x7f;
  72.         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);}
  73. }
  74. void display(int num1){
  75.         if(num1<= 9999)       
  76.         {
  77.                 n4=num1%10;
  78.                 n3=num1/10%10;
  79.                 n2=num1/100%10;
  80.                 n1=num1/1000%10;
  81.                 P2=0x01;
  82.                 P0=duan[n1];
  83.                 DelayXms(4);
  84.                 P2=0x02;
  85.                 P0=duan[n2];
  86.                 DelayXms(4);
  87.                 P2=0x04;
  88.                 P0=duan[n3];
  89.                 DelayXms(4);
  90.                 P2=0x08;
  91.                 P0=duan[n4];
  92.                 DelayXms(4);
  93.         }
  94.         else
  95.         {
  96.                 P2=0x01;
  97.                 P0=duan[10];
  98.                 DelayXms(4);
  99.                 P2=0x02;
  100.                 P0=duan[10];
  101.                 DelayXms(4);
  102.                 P2=0x04;
  103.                 P0=duan[10];
  104.                 DelayXms(4);
  105.                 P2=0x08;
  106.                 P0=duan[10];
  107.                 DelayXms(4);
  108.        
  109.         }
  110.                
  111. }
  112. void DelayXms(unsigned int x)               
  113. {        unsigned char i, j;
  114.         while(x--)
  115.         {        i = 2;
  116.                 j = 239;
  117.                 do{while (--j);
  118.                 }while (--i);
  119.         }
  120. }
复制代码

仿真程序: 四位数码管计算器.7z (51.33 KB, 下载次数: 20)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表