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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4301|回復(fù): 2
收起左側(cè)

簡(jiǎn)易單片機(jī)計(jì)算器仿真與程序源碼

[復(fù)制鏈接]
ID:301988 發(fā)表于 2018-8-29 23:20 | 顯示全部樓層 |閱讀模式
一個(gè)簡(jiǎn)易計(jì)算器程序,包括keil4程序和protues仿真圖

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

單片機(jī)源程序如下:
  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矩陣鍵盤(pán)說(shuō)明:行為輸入,列為輸出
  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. }
復(fù)制代碼
0.png
所有資料51hei提供下載:
簡(jiǎn)易計(jì)算器.zip (64.61 KB, 下載次數(shù): 51)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:702749 發(fā)表于 2020-6-11 09:36 | 顯示全部樓層
981120 發(fā)表于 2020-6-10 20:45
請(qǐng)問(wèn)一下這個(gè)計(jì)算器的功能

實(shí)現(xiàn)基本的運(yùn)算
回復(fù)

使用道具 舉報(bào)

ID:768763 發(fā)表于 2020-6-10 20:45 | 顯示全部樓層
請(qǐng)問(wèn)一下這個(gè)計(jì)算器的功能
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国产成人精品亚洲午夜 | 天天操网 | 9久久| 亚洲欧美中文日韩在线v日本 | 国产精品一区在线观看你懂的 | 亚洲精品视频在线观看视频 | 日本午夜一区二区三区 | 91麻豆产精品久久久久久夏晴子 | 日韩毛片免费看 | 欧美在线观看一区二区 | 国产精品高潮呻吟久久久久 | 亚洲精品久久久久久首妖 | 成人深夜福利 | 久久曰视频| 亚洲中国字幕 | 色综合久久久 | 四虎影视免费在线 | 久久精品美女 | 一区二区三区中文字幕 | 18av在线播放 | 久久aⅴ乱码一区二区三区 91综合网 | 三级黄色片在线观看 | 欧美亚洲国产一区二区三区 | 国内精品在线视频 | 亚洲人成人一区二区在线观看 | 亚洲一区二区三区在线视频 | 欧美日本在线观看 | 精品久久国产 | 免费v片在线观看 | 日本高清视频在线播放 | 91精品久久久久久久久99蜜臂 | 美国av片在线观看 | 久久久久久久久久爱 | 久久精品亚洲精品国产欧美 | 国内自拍视频在线观看 | 国产成人免费视频 | 青青艹在线视频 | 亚洲一区国产 | 日韩欧美中文 | 久久久久久综合 | 一区二区三区在线免费观看 |