久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 簡易單片機計算器仿真與程序源碼 [打印本頁]

作者: jackly5    時間: 2018-8-29 23:20
標題: 簡易單片機計算器仿真與程序源碼
一個簡易計算器程序,包括keil4程序和protues仿真圖

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


單片機源程序如下:
  1. #include <reg52.h>

  2. unsigned char show[8]={0,0,0,0,0,0,0,0};
  3. unsigned char code seg7_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00,0x50,0x5c};
  4. unsigned char code wei_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  5. unsigned char code err[]={0x0e,0x12,0x12,0x13,0x12,0x11,0x11,0x11};
  6. unsigned char count=0;
  7. unsigned long a,b;
  8. unsigned char flag=0;
  9. //unsigned char flag1=1;
  10. unsigned char key_code;
  11. bit key_press=0;

  12. void delay(long dly)
  13. {
  14.         while(dly--);
  15. }


  16. void disp(long dat)
  17. {
  18.    
  19.         bit flag1=0;   
  20.         long e;
  21.         unsigned char i;
  22.         e=dat;
  23.          if(e==0)
  24.         {
  25.                 for(i=0;i<7;i++)
  26.                 {
  27.                         show[i]=0x11;
  28.                 }
  29.                 show[7]=0x00;
  30.         }
  31.         else if((e>99999999)||(e<-9999999))
  32.         {
  33.         for(i=0;i<8;i++)
  34.                 {
  35.                          show[i]=err[i];
  36.                 }               
  37.         }
  38.        
  39.         else
  40.         {
  41.             if(e<0)
  42.                 {
  43.                         flag1=1;
  44.                         e=-e;
  45.                 }
  46.                 for(i=0;i<8;i++)
  47.                 {
  48.                         if(e>=1)
  49.                         {
  50.                             show[7-i]=e%10;
  51.                                 e=e/10;
  52.                         }
  53.                         else
  54.                         {
  55.                             if(flag1==1)
  56.                                 {
  57.                                         show[7-i]=0x10;
  58.                                         flag1=0;
  59.                                 }
  60.                                 else
  61.                                 {
  62.                                         show[7-i]=0x11;
  63.                                 }
  64.                         }
  65.                 }

  66.         }
  67. }

  68. void read_key()                //4X4矩陣鍵盤說明:行為輸入,列為輸出
  69. {
  70.     char x,y;
  71.         char i;
  72.         P1=0xf0;
  73.         if(P1!=0xf0)
  74.         {
  75.                 delay(1000);
  76.                 if(P1!=0xf0)
  77.                 {
  78.                     y=P1;
  79.                         x=0xfe;
  80.                         for(i=0;i<4;i++)
  81.                         {
  82.                                 P1=x |0xf0;
  83.                                 if((P1 & 0xf0)!=0xf0)
  84.                                 {
  85.                                         x=P1;
  86.                                         key_code=y | (x & 0x0f);
  87.                                         key_press=1;
  88.                                 }
  89.                                 x=(x<<1)+0x01;
  90.                         }
  91.                                 switch(key_code)
  92.                                         {
  93.                                                 case 0xee:    key_code=7;break;
  94.                                                 case 0xde:    key_code=8;break;
  95.                                                 case 0xbe:    key_code=9;break;
  96.                                                 case 0x7e:    key_code=14;break;
  97.                              case 0xed:    key_code=4;break;
  98.                                                 case 0xdd:    key_code=5;break;
  99.                                                 case 0xbd:    key_code=6;break;
  100.                                                 case 0x7d:    key_code=13;break;
  101.                                                 case 0xeb:    key_code=1;break;
  102.                                                 case 0xdb:    key_code=2;break;
  103.                                                 case 0xbb:    key_code=3;break;
  104.                                                 case 0x7b:    key_code=12;break;
  105.                              case 0xe7:    key_code=15;break;
  106.                                                 case 0xd7:    key_code=0;break;
  107.                                                 case 0xb7:    key_code=16;break;
  108.                                                 case 0x77:    key_code=11;break;
  109.                                         }
  110.                                   
  111.                 }
  112.                
  113.         }
  114. }
  115. void calculate()
  116. {
  117.       if(key_code<10)
  118.           {
  119.                if(flag==0)
  120.                    {
  121.                       a=a*10+key_code;
  122.                           disp(a);
  123.                         }
  124.                    else
  125.                    {
  126.                       b=b*10+key_code;
  127.                           disp(b);
  128.                         }
  129.       }
  130.           else
  131.           {
  132.              switch(key_code)
  133.                 {
  134.                         case 11:flag=1;break;
  135.                         case 12:flag=2;break;
  136.                         case 13:flag=3;break;
  137.                         case 14:flag=4;break;
  138.                         case 15:a=0;b=0;disp(a);flag=0;break;
  139.                         case 16:{
  140.                                                 switch(flag)
  141.                                                 {
  142.                                                         case 1:a=a+b;disp(a);b=0;break;
  143.                                                         case 2:a=a-b;disp(a);b=0;break;
  144.                                                         case 3:a=a*b;disp(a);b=0;break;
  145.                                                         case 4:a=a/b;disp(a);b=0;break;
  146.                                                 }
  147.                                         }
  148.                 }
  149.           }
  150.              

  151.      
  152. }

  153. void main()
  154. {
  155.     TMOD=0x01;
  156.         TH0=(65536-1000)/256;
  157.         TL0=(65536-1000)%256;
  158.         TR0=1;
  159.         EA=1;
  160.         ET0=1;
  161.         a=0;
  162.         b=0;
  163.         disp(a);
  164. //        get_keycode();
  165.         while(1)
  166.         {
  167.                 read_key();
  168.                 if(key_press==1)
  169.                 {
  170.                         calculate();
  171.                     key_press=0;
  172.                 }
  173.                 delay(3000);
  174.         }
  175. }

  176. void TIMER0_ISR() interrupt 1  using 1
  177. {
  178.         TH0=(65536-1000)/256;
  179.         TL0=(65536-1000)%256;
  180.         P0=0x00;
  181.         P2=(P2 & 0xe3)|(count<<2);
  182.         P0=seg7_table[show[count]];
  183.         count++;
  184.         if(count>7)
  185.         {
  186.                 count=0;
  187.         }
  188. }
復制代碼

所有資料51hei提供下載:
簡易計算器.zip (64.61 KB, 下載次數: 51)



作者: 981120    時間: 2020-6-10 20:45
請問一下這個計算器的功能
作者: buzhimingdeayu    時間: 2020-6-11 09:36
981120 發表于 2020-6-10 20:45
請問一下這個計算器的功能

實現基本的運算




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产成人在线一区二区 | 成人免费在线播放 | 欧美日韩一区精品 | 亚洲欧美一区二区三区在线 | 国产a区| 亚洲欧美日韩中文字幕一区二区三区 | 91人人视频在线观看 | 亚洲精品一区二区三区蜜桃久 | 久久99精品久久久久久琪琪 | 日韩精品成人免费观看视频 | 久操伊人 | 久久精品视频在线观看 | 人成久久 | 狠狠爱综合 | 国产h视频| 国产精品欧美精品日韩精品 | 久久久久久看片 | 国产欧美一区二区三区在线看 | 日韩在线视频免费观看 | 91亚洲免费 | 成人精品在线观看 | 免费在线观看av片 | 国产精品久久久久一区二区 | 免费成人高清 | 日韩av网址在线观看 | 国产日韩精品一区 | 欧美国产精品一区二区 | 亚洲精选久久 | 精品国产精品 | 精品欧美一区免费观看α√ | 久久极品| 色婷婷九月 | 亚洲视频一区在线 | 亚洲成av人影片在线观看 | 欧美综合一区二区 | 国产精品一区在线观看 | 色婷婷久久综合 | 欧美精品久久久 | 国产一区二区三区 | 国产操操操 | 三级成人片 |