标题: 单片机一位简易计算器程序源代码 [打印本页]

作者: niujia    时间: 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. }
复制代码




作者: 啦啦啦12138    时间: 2018-6-11 21:03
楼主好 这是简易计算器的全部代码
作者: 孤芳自赏    时间: 2018-6-30 15:34
有电路图吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1