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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的小計算器的仿真+代碼設計 數碼管顯示一位的數的加減乘除

[復制鏈接]
跳轉到指定樓層
樓主
時間有限,只用了數碼管顯示一位的數的加減乘除
唯一的兩個亮點,就是減法數碼管能顯示負數
除法能顯示小數
所有的Proteus仿真圖和C源代碼都在里面

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


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

  4. sbit Sel1=P3^0;
  5. sbit Sel2=P3^1;
  6. sbit Sel3=P3^2;
  7. sbit Sel4 =P3^3;
  8. sbit Sel5=P3^4;
  9. sbit Sel6 =P3^5;
  10. sbit led=P2^0;

  11. unsigned char line=0,cross=0,comline=0,comcross=0;//顯示掃描后的行列值
  12. unsigned char shu1=0,shu2=0;//顯示計算的數據
  13. unsigned char        keynum=0,workflag=0;
  14. int  keyflag=0,i=0,cons=0,cons1,cons2;           //顯示按鍵和運算狀態的邏輯標志變量
  15. unsigned char Shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管段碼值
  16. unsigned char Shuma1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//數碼管段碼值

  17. void delay(int k); //延時函數
  18. void Keycode();  //鍵盤編碼函數   
  19. void Keys();  //鍵盤掃描函數

  20. void main()
  21. {
  22.         unsigned char n=0;
  23.         unsigned int temp=0;
  24.         TMOD=0x01;
  25.         TH0=(2^16-50000)/2^8;TL0=(2^16-50000)%2^8;EA=1;TR0=1;ET0=1;
  26.         while(1)
  27.         {
  28.                   Keycode();
  29.                   if(keyflag == 1)
  30.                                 shu1 = keynum;
  31.                         else if(keyflag == 2)
  32.                                 shu2 = keynum;
  33.                         else if(keyflag == 3)
  34.                         {
  35.                                 switch(workflag)
  36.                                 {
  37.                                         case 1:cons = shu1+shu2;break;
  38.                                         case 2:cons = shu1-shu2;break;
  39.                                         case 3:cons = shu1*shu2;break;
  40.                                         case 6:temp =(int)(((float)(shu1)/(float)(shu2))*10);cons1 = temp/10;cons2=temp%10;
  41.                                         break;
  42.                                         default:break;
  43.                                 }
  44.                         }
  45.                         else ;
  46.                         
  47.                         if (workflag == 5)
  48.                         {
  49.                                 keyflag = 0;cross=0;line=0;workflag=0;keynum=0;P0=0xff;
  50.                                 shu1=0;shu2=0;cons=0;
  51.                         }
  52.                         
  53.                 for(n=0;n<8;n++)
  54.                 {
  55.                 switch(n)
  56.                 {
  57.                         case 0:Sel1=1,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=0;P0=~Shuma[shu1/10];break;
  58.                         case 1:Sel1=0,Sel2=1,Sel3=0,Sel4=0,Sel5=0,Sel6=0;P0=~Shuma[shu1%10];break;
  59.                         case 2:Sel1=0,Sel2=0,Sel3=1,Sel4=0,Sel5=0,Sel6=0;P0=~Shuma[shu2/10];break;
  60.                         case 3:Sel1=0,Sel2=0,Sel3=0,Sel4=1,Sel5=0,Sel6=0;P0=~Shuma[shu2%10];break;
  61.                         case 4:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=1,Sel6=0;
  62.                                        if(cons >= 0)
  63.                                                                                          P0=~Shuma[cons/10];
  64.                                                                                  else
  65.                                                                                          P0=0xBF;
  66.                                                                                   if(workflag == 6)
  67.                                                                                         {
  68.                                                                                         P0=~Shuma1[cons1];
  69.                                                                                         }break;
  70.                         case 5:Sel1=0,Sel2=0,Sel3=0,Sel4=0,Sel5=0,Sel6=1;
  71.                                                                                         P0=~Shuma[abs(cons)%10];
  72.                                                                                         if(workflag == 6)
  73.                                                                                         P0=~Shuma[cons2];break;
  74.                         default:break;
  75.                         }
  76.                   delay(20);
  77.                   P0=0xff;
  78.          }
  79. }
  80. }

  81. void delay(int k)
  82. {
  83.    while(k--);
  84. }

  85. void Keycode()
  86. {
  87.         switch(cross)
  88.         {
  89.                 case 1:
  90.                  switch(line)
  91.                  {
  92.                          case 1:keynum=1;break;
  93.                    case 2:keynum=2;break;
  94.                    case 3:keynum=3;break;
  95.                    case 4:workflag=1;break;
  96.                    default:break;
  97.                  };break;
  98.                  
  99.                 case 2:
  100.                  switch(line)
  101.                  {
  102.                          case 1:keynum=4;break;
  103.                    case 2:keynum=5;break;
  104.                    case 3:keynum=6;break;
  105.                    case 4:workflag=2;break;
  106.                    default:break;
  107.                  };break;
  108.                  
  109.      case 3:
  110.                  switch(line)
  111.                  {
  112.                          case 1:keynum=7;break;
  113.                    case 2:keynum=8;break;
  114.                    case 3:keynum=9;break;
  115.                    case 4:workflag=3;break;
  116.                    default:break;
  117.                  };break;
  118.                  
  119.                  case 4:
  120.                  switch(line)
  121.                  {
  122.                          case 1:keynum=0;break;
  123.                    case 2:workflag=4;break;
  124.                    case 3:workflag=5;break;
  125.                    case 4:workflag=6;break;
  126.                    default:break;
  127.                  };break;
  128.                 default:break;
  129.         }
  130. }

  131. void Keys()
  132. {
  133.                 P1=0xf0;
  134.           if( P1 != 0xf0)
  135.                         keyflag++;
  136.                 switch(P1)
  137.                 {
  138.                         case 0x70:cross=1;break;
  139.                         case 0xb0:cross=2;break;
  140.                         case 0xd0:cross=3;break;
  141.                         case 0xe0:cross=4;break;
  142.                 }
  143.                
  144. ……………………

  145. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
Calculate.rar (17.67 KB, 下載次數: 116)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:648959 發表于 2019-11-27 09:47 | 只看該作者
很好,正是我需要的,
回復

使用道具 舉報

板凳
ID:1021743 發表于 2022-4-26 08:46 | 只看該作者
一位數的加減法計算器單片機
回復

使用道具 舉報

地板
ID:963981 發表于 2023-5-31 22:43 | 只看該作者
支持,好心人~~
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品a久久久久 | 欧美一区二区三区在线观看 | 色接久久 | 久久久精彩视频 | 亚洲成人av一区二区 | 99精品视频在线观看 | 欧美亚洲激情 | 欧美一区二区三区在线观看 | 久久51 | 欧美精品乱码久久久久久按摩 | 久久大| 国产成人一区二区 | 亚洲精品一区二区三区蜜桃久 | 一级二级三级在线观看 | 91一区二区三区在线观看 | 国产在线一区二区 | 黑人中文字幕一区二区三区 | 精品视频一区二区三区在线观看 | 亚洲成年影院 | 国产999精品久久久 午夜天堂精品久久久久 | 在线观看免费av网 | 国产一级片网站 | 天天操天天射天天舔 | 成人午夜在线 | 亚洲女优在线播放 | 欧美一区在线视频 | 精品久久久久久 | 欧美久久视频 | 日韩中文字幕在线视频 | h视频免费看 | 波多野结衣电影一区 | 毛片99 | 精品久久久久一区二区国产 | 欧美一区二区三区在线看 | 亚洲欧美一区二区三区在线 | 中文字幕久久精品 | 亚洲九九色 | 在线视频 中文字幕 | 日韩视频国产 | 欧美男人亚洲天堂 | 天天草视频 |