找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机一位简易计算器程序源代码

[复制链接]
跳转到指定楼层
楼主
ID:85764 发表于 2015-7-15 23:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数码管显示部分的原理图:http://www.51hei.com/f/51hei-5.pdf

源代码:

  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;
  6. uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x70,0x40,0x76,0x52};
  7. uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  8. uchar dis_smg[6];
  9. uchar flag,num_key,oper,j;
  10. uchar num1,num2,num_i;
  11. uchar scan(void)
  12. {
  13. static uchar i;
  14. uchar num,key;
  15. P3=0x0f;
  16. if(P3!=0x0f)
  17. {
  18.   i++;
  19.   if(i>=7)
  20.   if(flag==0)
  21.   {
  22.    flag=1;
  23.    key=P3|0xf0;
  24.    P3=key;
  25.    switch(P3)
  26.    {
  27.     case 0xee:num=0; break;
  28.     case 0xde:num=1; break;
  29.     case 0xbe:num=2; break;
  30.     case 0x7e:num=3; break;
  31.     case 0xed:num=4; break;
  32.     case 0xdd:num=5; break;
  33.     case 0xbd:num=6; break;
  34.     case 0x7d:num=7; break;
  35.     case 0xeb:num=8; break;
  36.     case 0xdb:num=9; break;
  37.     case 0xbb:num=10;break;
  38.     case 0x7b:num=11;break;
  39.     case 0xe7:num=12;break;
  40.     case 0xd7:num=13;break;
  41.     case 0xb7:num=14;break;
  42.     case 0x77:num=15;break;
  43.    }
  44.   }
  45. }
  46. else {i=0;flag=0;}
  47. return num;
  48. }
  49. void dis_init()
  50. {
  51. dis_smg[0]=smg_du[num_i/10];
  52. dis_smg[1]=smg_du[num_i%10];
  53. dis_smg[2]=0x00;
  54. dis_smg[3]=smg_du[num1%10];
  55. dis_smg[4]=smg_du[j];
  56. dis_smg[5]=smg_du[num2%10];
  57. }
  58. void display()
  59. {
  60. static uchar i;
  61. P0=0x00;
  62. dula=1;
  63. dula=0;
  64. P0=smg_we[i];
  65. wela=1;
  66. wela=0;
  67. P0=dis_smg[i];
  68. dula=1;
  69. dula=0;
  70. i++;
  71. if(i>=6)
  72. i=0;
  73. }
  74. void main()
  75. {
  76. uchar num_key;

  77. while(1)
  78. {
  79.   num_key=scan();
  80.   dis_init();
  81.   display();
  82.   if(num_key<17)
  83.   {
  84.    switch(num_key)
  85.    {
  86.     case 10:num_i=0;oper=0;num1=0;num2=0;j=0;break;
  87.     case 11:
  88.       switch(oper)
  89.        {
  90.        case 0:num1 =num2;break;
  91.        case 1:num_i=num1+num2;break;
  92.        case 2:num_i=num1-num2;break;
  93.        case 3:num_i=num1*num2;break;
  94.        case 4:num_i=num1/num2;break;
  95.        }break;
  96.     case 12:oper=1;j=10;break;
  97.     case 13:oper=2;j=11;break;
  98.     case 14:oper=3;j=12;break;
  99.     case 15:oper=4;j=13;break;
  100.     default :if(num_key<10)
  101.        {
  102.        if(oper==0)
  103.         num1=num_key;
  104.        else
  105.         num2=num_key;
  106.        }
  107.        break;
  108.    }
  109.   }
  110.    
  111. }
  112. }
复制代码



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

使用道具 举报

沙发
ID:349810 发表于 2018-6-11 21:03 | 只看该作者
楼主好 这是简易计算器的全部代码
回复

使用道具 举报

板凳
ID:361606 发表于 2018-6-30 15:34 | 只看该作者
有电路图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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