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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4229|回復: 2
打印 上一主題 下一主題
收起左側

簡易單片機計算器仿真與程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
一個簡易計算器程序,包括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)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:768763 發表于 2020-6-10 20:45 | 只看該作者
請問一下這個計算器的功能
回復

使用道具 舉報

板凳
ID:702749 發表于 2020-6-11 09:36 | 只看該作者
981120 發表于 2020-6-10 20:45
請問一下這個計算器的功能

實現基本的運算
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 小早川怜子xxxxaⅴ在线 | 亚洲三级在线观看 | 中文字幕乱码视频32 | 久久99精品国产 | 黄网站涩免费蜜桃网站 | 不卡一二区 | 丁香综合 | 亚洲在线电影 | 黄免费观看视频 | 视频在线日韩 | 国产精品一二区 | 国产高清一区二区三区 | 97视频人人澡人人爽 | 在线一区观看 | 亚洲经典一区 | 国产精品99久久久久久久久久久久 | 欧美在线观看网站 | 国产婷婷| 国产999在线观看 | 精品1区2区 | 亚洲国产精品久久 | 国产精品久久久久久久久久久久久久 | 一级欧美一级日韩片免费观看 | 日韩不卡三区 | 综合色播 | 欧美黄色片| 古典武侠第一页久久777 | 国产日韩一区二区三区 | 情侣酒店偷拍一区二区在线播放 | 久久与欧美 | 亚洲国产二区 | 美女福利视频一区 | 一级毛片在线看 | 黄色一级免费 | 一级毛片在线播放 | 欧美日韩国产精品一区 | 成人一区二区三区视频 | 日韩在线观看中文字幕 | 在线成人一区 | 999精品在线观看 | 久久久人成影片免费观看 |