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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機制作的簡易計算器

[復制鏈接]
跳轉到指定樓層
樓主
ID:647922 發表于 2020-2-10 16:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機制作的簡易計算器
可實現4位數內的加減乘除,可顯示負數。
操作要用到數碼管和矩陣鍵盤
用的是清祥的板子
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^0;
sbit key2=P3^1;
sbit d=P2^6;
sbit w=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
char a,b,c;
void delayms(uint xms)//延時函數
{
uint j;
for(;xms>0;xms--)
for(j=125;j>0;j--);
}
int keyboard;
void fun(){//此函數用來檢測按鍵
P3=0xf0;//1111 0000
    if(P3!=0xf0){
delayms(5);
if(P3!=0xf0)
{
switch(P3){
case 0xe0:keyboard=0;break;//1110 0000  //列檢測
case 0xd0:keyboard=1;break;//1101 0000
case 0xb0:keyboard=2;break;//1011 0000
case 0x70:keyboard=3;break;//0111 0000

}
P3=0x0f;//0000 1111
if(P3!=0x0f)
delayms(5);
if(P3!=0x0f){
switch(P3){
case 0x0e:keyboard=keyboard;break;//0000 1110     //行檢測
case 0x0d:keyboard=keyboard+4;break;//0000 1101
case 0x0b:keyboard=keyboard+8;break;//0000 1011
case 0x07:keyboard=keyboard+12;break;//0000 0111

}

}
while(P3!=0x0f);
}
}
P3=0xff;
if(P3!=0xff){
delayms(5);
if(P3!=0xff){
    switch(P3){
case 0xfe:a='+';break;//1111 1110  //獨立按鍵檢測
case 0xfd:a='-';break;//1111 1101
case 0xfb:b='=';break;//1111 1011
case 0xf7:b='=';break;//1111 0111
}
}
}
}
void display(int numdis)
{
    uchar qian,bai,shi,ge;
if(numdis>0)
{
qian=numdis/1000;
bai=numdis/100%10;
shi=numdis/10%10;
ge=numdis%10;
d=1;
P0=table[qian];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0xef;
w=0;
delayms(5);
    d=1;
P0=table[bai];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0xdf;
w=0;
delayms(5);
d=1;
P0=table[shi];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0xbf;
w=0;
delayms(5);
d=1;
P0=table[ge];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0x7f;
w=0;
delayms(5);   
}
else{
numdis=numdis*-1;
//qian=numdis/1000;
bai=numdis/100;
shi=numdis/10%10;
ge=numdis%10;
d=1;
P0=0x40;
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0xef;
w=0;
delayms(5);
    d=1;
P0=table[bai];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0xdf;
w=0;
delayms(5);
d=1;
P0=table[shi];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0xbf;
w=0;
delayms(5);
d=1;
P0=table[ge];
d=0;
P0=0xff;//位選打開前常規消抖
w=1;
P0=0x7f;
w=0;
delayms(5);   

}
}
/*
void main(){
while(1){
fun();//檢測按鍵
display(keyboard);//檢測數碼
}
*/
void main(){
while(1){
int t,s;
for(;;){
fun();
if(keyboard!=0)break;//檢測按鍵
}

for(;;){//檢測數碼
display(keyboard);
P3=0xf0;
if(P3!=0xf0){
delayms(5);
if(P3!=0xf0){
     if(P3!=0xfe||P3!=0xfd||P3!=0xfb||P3!=0xf7)//如果按下數碼鍵
     {
     t=10*keyboard;
  keyboard=0;
  fun();
  keyboard=t+keyboard;break;
  }
  }
  }
P3=0xff;
if(P3==0xfe){//如果按下+號s2
  s=keyboard;
  keyboard=0;
  display(keyboard);//顯示000
  while(P3!=0xfe);//等到+號松開
  fun();//重新檢測按鍵
  for(;;){
    display(keyboard);//顯示第二次按下的第一個鍵
    P3=0xf0;
             if(P3!=0xf0){
              delayms(5);
              if(P3!=0xf0){
         if(P3!=0xfe||P3!=0xfd||P3!=0xfb||P3!=0xf7)
          {
          t=10*keyboard;
       keyboard=0;
       fun();
       keyboard=t+keyboard;
       }
       }
       }
      P3=0xff;
      if(P3!=0xff){//判斷=號
      delayms(5);
      if(P3!=0xff){
      if(P3==0xf7||P3==0xfb)//s4到s5均為等號
      {
          keyboard=s+keyboard;
       while(P3!=0xff);
          }
       }
       }
                            }
      
        }
  if(P3==0xfd){//如果按下-號s3
  s=keyboard;
  keyboard=0;
  display(keyboard);//顯示000
  while(P3!=0xfd);//等到-號松開
  fun();//重新檢測按鍵
  for(;;){
    display(keyboard);//顯示第二次按下的第一個鍵
    P3=0xf0;
             if(P3!=0xf0){
              delayms(5);
              if(P3!=0xf0){
         if(P3!=0xfe||P3!=0xfd||P3!=0xfb||P3!=0xf7)
          {
          t=10*keyboard;
       keyboard=0;
       fun();
       keyboard=t+keyboard;
       }
       }
       }
      P3=0xff;
      if(P3!=0xff){//判斷=號
      delayms(5);
      if(P3!=0xff){
      if(P3==0xf7||P3==0xfb)//s2到s5均為等號
      {
          keyboard=s-keyboard;
       while(P3!=0xff);
          }
       }
       }
                            }
      
        }
  if(P3==0xfb){//如果按下* /號s4
  s=keyboard;
  keyboard=0;
  display(keyboard);//顯示000
  while(P3!=0xfb);//等到* /號松開
  fun();//重新檢測按鍵
  for(;;){
    display(keyboard);//顯示第二次按下的第一個鍵
    P3=0xf0;
             if(P3!=0xf0){
              delayms(5);
              if(P3!=0xf0){
         if(P3!=0xfe||P3!=0xfd||P3!=0xfb||P3!=0xf7)
          {
          t=10*keyboard;
       keyboard=0;
       fun();
       keyboard=t+keyboard;
       }
       }
       }
      P3=0xff;
      if(P3!=0xff){//判斷=號
      delayms(5);
      if(P3!=0xff){
      if(P3==0xfb){//如果按下的是原按鍵s4為*,如果按下的是靠右旁邊按鍵s5為/
          keyboard=s*keyboard;
       while(P3!=0xff);
          }
      if(P3==0xf7){
          keyboard=s/keyboard;
       while(P3!=0xff);
          }  
      
       }
       }
                            }
      
        }     
}
}
}



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

使用道具 舉報

沙發
ID:900611 發表于 2021-4-4 16:42 | 只看該作者
可以來個電路protues圖嗎
回復

使用道具 舉報

板凳
ID:907113 發表于 2021-4-16 21:57 | 只看該作者
樓主能分享個仿真圖嘛?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色网在线观看 | 午夜精品久久久久久久久久久久 | 欧美自拍一区 | 亚洲精品欧美 | www国产成人免费观看视频,深夜成人网 | 国产精品久久网 | 国产精品一区二区在线 | 91亚洲精品在线 | 欧美成人精品在线 | 成年男女免费视频网站 | 成年人在线| 亚洲一区二区三区国产 | 日本在线视频一区二区 | 国产区精品视频 | 一区二区三区国产精品 | 午夜激情视频 | 亚洲男人天堂 | 美女久久久久 | 国产精品视频一区二区三区不卡 | 国产福利在线 | 韩日一区二区 | 中文字幕日韩欧美一区二区三区 | 日韩色视频 | 黄色大片网 | 精品亚洲一区二区三区 | 国产成人精品久久二区二区91 | 国产精品福利视频 | 国产精品91视频 | 久久久国产精品网站 | 欧美亚州 | 巨大荫蒂视频欧美另类大 | 久久国产精品免费一区二区三区 | 黑人巨大精品 | 欧一区二区 | 国产一区二区不卡 | 国产精品揄拍一区二区久久国内亚洲精 | 亚洲 一区| 一级毛片免费完整视频 | 国产精品视频一二三区 | 日韩免费一区二区 | 伊人狠狠 |