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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3347|回復: 5
收起左側

51單片機的簡易計算器

[復制鏈接]
ID:156249 發表于 2016-12-20 16:14 | 顯示全部樓層 |閱讀模式
要求:
1. 4X4鍵盤輸入,LED顯示。
2. 浮點運算采用3字節二進制補碼表示,有效數字6位。對于輸入輸出,采用3字節BCD碼浮點數格式,有效數字只有4位,因此最終有效數字只有4位。
3. 可進行連續輸入,例如:1.23+4.56*8.23/234.8 ,但是運算結果為從左到右,這也是8位簡易計算器的方式。
4. 可進行錯誤判斷,溢出、除零等錯誤將顯示一個字符 E 。
5. 由于鍵盤只有16個按鍵,安排如下:
   +---------------+
   | 7 | 8 | 9 | + |
   | 4 | 5 | 6 | -  |
   | 1 | 2 | 3 | * |
   | 0 | .  | = | /  |
   +---------------+

回復

使用道具 舉報

ID:154912 發表于 2016-12-20 17:07 | 顯示全部樓層
#include<reg51.h>
#define uchar unsigned char;
uchar LED1,LED2,LED3,LED4;
uchar keyval,calflag,s_dat,d_dat;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned int number,r_dat;

void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;i<a;i++)
  for(j=0;j<1000;j++);
}
void dealdat()
{
switch(calflag)
{
case 0:
  r_dat=s_dat+d_dat;
  break;
case 1:
  r_dat=s_dat-d_dat;
  break;
case 2:
  r_dat=s_dat*d_dat;
  break;
case 3:
  r_dat=s_dat/d_dat;
  break;
default:break;
}
LED1=(r_dat/1000)%10;
LED2=(r_dat/100)%10;
LED3=(r_dat/10)%10;
LED4=r_dat%10;
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f;  //發0掃描,列線輸入
if ((P3 & 0x0f) != 0x0f)  //有鍵按下
{
  delay(20);   //延時去抖動
  if ((P3&0x0f)!= 0x0f)
  {
   sccode = 0xef;    //逐行掃描初值
   while((sccode&0x01)!=0)
   {
       P3=sccode;
    if((P3&0x0f)!=0x0f)
    {
        recode=(P3&0x0f)|0xf0;
     return((~sccode)+(~recode));
     }
          else
    sccode=(sccode<<1)|0x01;
   }
  }
}
return 0;  //無鍵按下,返回0
}

void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0){keyval=0xff;return;}
  switch(key)
  {
  case 0x11:keyval=7;break;
  case 0x12:keyval=4;break;
  case 0x14:keyval=1;break;
  case 0x18:keyval=10;break;
  case 0x21:keyval=8;break;
  case 0x22:keyval=5;break;
  case 0x24:keyval=2;break;
  case 0x28:keyval=0;break;
  case 0x41:keyval=9;break;
  case 0x42:keyval=6;break;
  case 0x44:keyval=3;break;
  case 0x48:keyval=11;break;
  case 0x81:keyval=12;break;
  case 0x82:keyval=13;break;
  case 0x84:keyval=14;break;
  case 0x88:keyval=15;break;
  default:keyval=0xff;break;
  }
}

void t0isr() interrupt 1
{
TH0=0xf4;
TL0=0x48;
switch(number)
{
case 0:P2=0x04;P0=distab[LED1];break;
case 1:P2=0x08;P0=distab[LED2];break;
case 2:P2=0x01;P0=distab[LED3];break;
case 3:P2=0x02;P0=distab[LED4];break;
default:break;
}
number++;
if(number>3)number=0;
}
main()
{
TMOD = 0x01;
number = 0;
TH0=0xf4;
TL0=0x48;
TR0=1;
ET0=1;
EA=1;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
while(1)
{
getkey();
switch(keyval)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
  LED3=LED4;
  LED4=keyval;
  LED1=0;
  LED2=0;
  break;
case 10:break; //"ON"
case 11: //"="
  d_dat=LED3*10+LED4;
  dealdat();
  break;
case 12: //"/"
  calflag=3;
  s_dat=LED3*10+LED4;
  LED3=0;
  LED4=0;
  break;
case 13: //"*"
  calflag=2;
  s_dat=LED3*10+LED4;
  LED3=0;
  LED4=0;
  break;
case 14: //"-"
  calflag=1;
  s_dat=LED3*10+LED4;
  LED3=0;
  LED4=0;
  break;
case 15: //"+"
  calflag=0;
  s_dat=LED3*10+LED4;
  LED3=0;
  LED4=0;
  break;
default:break;
}
}
}
回復

使用道具 舉報

ID:152262 發表于 2016-12-20 17:32 | 顯示全部樓層
看樓上
回復

使用道具 舉報

ID:149094 發表于 2016-12-20 19:03 | 顯示全部樓層
樓上的太麻煩了,你 可以試試點陣數列
回復

使用道具 舉報

ID:156380 發表于 2016-12-20 22:05 | 顯示全部樓層
有點麻煩啊
回復

使用道具 舉報

ID:156393 發表于 2016-12-20 22:15 | 顯示全部樓層
照片不錯
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人在线观看免费 | 紧缚调教一区二区三区视频 | 国产一级电影网 | 日日干日日操 | 久久99精品久久久久久国产越南 | 午夜精品导航 | 久久国产精品免费一区二区三区 | 免费久久久 | www.精品国产 | 免费毛片网站在线观看 | 日韩精品一区二区三区在线播放 | 成在线人视频免费视频 | 国产精品久久 | 日日碰碰 | 精品国产一区二区三区久久久久久 | 成人自拍视频 | 国产精品我不卡 | 亚洲精品视频一区 | 国产成人啪免费观看软件 | 久草免费在线视频 | 欧美一区二区三区在线观看视频 | 欧美精品一区二区三 | 国产一级片精品 | 中文字幕日本一区二区 | 91偷拍精品一区二区三区 | 成人亚洲精品 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 国产精品欧美一区喷水 | 尤物在线精品视频 | 日韩一区二区在线视频 | 青青草原精品99久久精品66 | 亚洲不卡 | 欧美日日| 羞羞的视频免费观看 | 999免费网站 | 欧美激情五月 | 日韩在线免费观看视频 | 91美女在线观看 | 天天综合天天 | 国产精品久久欧美久久一区 | 台湾a级理论片在线观看 |