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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機制作計簡易計算器的c程序源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:357931 發表于 2018-6-24 18:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 LAY2 于 2018-6-24 18:41 編輯

#include<reg51.h>
#include<intrins.h>
#include<math.h>
#include<stdlib.h>
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BUZZER=P1^0;
#define unchar unsigned char
#define unint unsigned int
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
  for(j=0;j<120;j++);
}
void busy()
{
RS=0;
RW=1;
E=1;
P0=0xff;
while((P0&0x80)==0x80);
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
void write_com(unsigned char com)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
busy();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
RS=0;
RW=0;
E=1;
P0=com;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
E=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
void write_data(unchar date)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
busy();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
RS=1;
RW=0;
E=1;
P0=date;
E=0;
}
void init()
{
write_com(0x30);
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_com(0x0c);
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_com(0x01);
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
write_com(0x06);
}
void sendaddr(unchar n,unchar m)
{
switch(n)
{
  case 1:write_com(0x80+m);break;
  case 2:write_com(0x90+m);break;
  case 3:write_com(0x88+m);break;
  case 4:write_com(0x98+m);break;
}
}
void display(unchar n,unchar m,unchar*s)
{
sendaddr(n,m);
while(*s>0)
{
  write_data(*s);
  s++;
}
}
void clearscreen()
{
write_com(0x01);
}
void tishi()
{
clearscreen();
display(1,0,"超出計算范圍");
display(2,0,"請按復位鍵");
display(3,0,"并重新輸入");
display(4,0,"否則會出現錯誤");
}
void displayshu(unchar n,unchar m,long  rzt)
{
unchar i,j,k,x,p;
unchar t[10]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char array[10];
array[9]=(int)rzt%10;
array[8]=((int)rzt/10)%10;
array[7]=((int)rzt/100)%10;
array[6]=((int)rzt/1000)%10;
array[5]=((int)rzt/10000)%10;
array[4]=((int)rzt/100000)%10;
array[3]=((int)rzt/1000000)%10;
array[2]=((int)rzt/10000000)%10;
array[1]=((int)rzt/100000000)%10;
array[0]=(int)rzt/1000000000;
sendaddr(n,m);
for(i=0;i<10;i++)
{
  if(array==0)
  p=i;
  else
  break;
}
for(j=p+1;j<10;j++)
{
  t[k]=array[j];
  k++;
}
while(t[x]!=0xff)
{
  write_data(t[x]+0x30);
  x++;
}
}
void main(void)
{
unchar i,j,opt,p;
long b,c,rzt;
start:
init();
delay(20);
i=0;j=0;rzt=0;b=0;c=0;
write_com(0x80);
while(1)
{
  P3=0xfe;
  if(P3!=0xfe)
  {
   delay(40);
   if(P3!=0xfe)
   {
    switch(P3&0xf0)
    {
     case 0x70:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(0+0x30);
     b=b*10+0;
     i++;
     if(i==11)tishi();
     break;
     case 0xb0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(1+0x30);
     b=b*10+1;
     i++;
     if(i==11)tishi();
     break;
     case 0xd0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(2+0x30);
     b=b*10+2;
     i++;
     if(i==11)tishi();
     break;
     case 0xe0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(3+0x30);
     b=b*10+3;
     i++;
     if(i==11)tishi();
     break;
    }
    if(P3!=0xfe);
    delay(30);
    while(P3!=0xfe);
   }
  }
  P3=0xfd;
  if(P3!=0xfd)
  {
   delay(40);
   if(P3!=0xfd)
   {
    switch(P3&0xf0)
    {
     case 0x70:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(4+0x30);
     b=b*10+4;
     i++;
     if(i==11)tishi();
     break;
     case 0xb0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(5+0x30);
     b=b*10+5;
     i++;
     if(i==11)tishi();
     break;
     case 0xd0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(6+0x30);
     b=b*10+6;
     i++;
     if(i==11)tishi();
     break;
     case 0xe0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(7+0x30);
     b=b*10+7;
     i++;
     if(i==11)tishi();
     break;
    }
    if(P3!=0xfd);
    delay(30);
    while(P3!=0xfd);
   }
  }
  P3=0xfb;
  if(P3!=0xfb)
  {
   delay(40);
   if(P3!=0xfb)
   {
    switch(P3&0xf0)
    {
     case 0x70:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(8+0x30);
     b=b*10+8;
     i++;
     if(i==11)tishi();
     break;
     case 0xb0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     write_data(9+0x30);
     b=b*10+9;
     i++;
     if(i==11)tishi();
     break;
     case 0xd0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     p=1;
     write_com(0x97);
     write_data(0x2b);
     opt=10;
     goto two;
     break;
     case 0xe0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     p=1;
     write_com(0x97);
     write_data(0x2d);
     opt=10;
     goto two;
     break;
    }
    if(P3!=0xfb);
    delay(30);
    while(P3!=0xfb);
   }
  }
  P3=0xf7;
  if(P3!=0xf7)
  {
   delay(40);
   if(P3!=0xf7)
   {
    switch(P3&0xf0)
    {
     case 0x70:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     p=1;
     write_com(0x97);
     write_data(0x2a);
     opt=12;
     goto two;
     break;
     case 0xb0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     p=1;
     write_com(0x97);
     write_data(0x2f);
     opt=13;
     goto two;
     break;
     case 0xd0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     clearscreen();
     goto start;
     break;
     case 0xe0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     clearscreen();
     goto start;
     break;
    }
    if(P3!=0xf7);
    delay(30);
    while(P3!=0xf7);
   }
  }
}
two:
  write_com(0x88);
  while(1)
  {
   P3=0xfe;
   if(P3!=0xfe)
   {
    delay(40);
    if(P3!=0xfe)
    {
     switch(P3&0xf0)
     {
      case 0x70:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(0+0x30);
      c=c*10+0;
      j++;
      if(j==11)tishi();
      break;
      case 0xb0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(1+0x30);
      c=c*10+1;
      j++;
      if(j==11)tishi();
      break;
      case 0xd0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(2+0x30);
      c=c*10+2;
      j++;
      if(j==11)tishi();
      break;
      case 0xe0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(3+0x30);
      c=c*10+3;
      j++;
      if(j==11)tishi();
      break;
     }
     if(P3!=0xfe);
     delay(30);
     while(P3!=0xfe);
    }
   }
   P3=0xfd;
   if(P3!=0xfd)
   {
    delay(40);
    if(P3!=0xfd)
    {
     switch(P3&0xf0)
     {
      case 0x70:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(4+0x30);
      c=c*10+4;
      j++;
      if(j==11)tishi();
      break;
      case 0xb0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(5+0x30);
      c=c*10+5;
      j++;
      if(j==11)tishi();
      break;
      case 0xd0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(6+0x30);
      c=c*10+6;
      j++;
      if(j==11)tishi();
      break;
      case 0xe0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(7+0x30);
      c=c*10+7;
      j++;
      if(j==11)tishi();
      break;
     }
     if(P3!=0xfd);
     delay(30);
     while(P3!=0xfd);
    }
   }
   P3=0xfb;
   if(P3!=0xfb)
   {
    delay(40);
    if(P3!=0xfb)
    {
     switch(P3&0xf0)
     {
      case 0x70:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(8+0x30);
      c=c*10+8;
      j++;
      if(j==11)tishi();
      break;
      case 0xb0:
      BUZZER=0;
      delay(80);
      BUZZER=1;
      write_data(9+0x30);
      c=c*10+9;
      j++;
     if(j==11)tishi();
     break;
     case 0xd0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     if(p==0){write_com(0x97);write_data(0x2b);}
     break;
     case 0xe0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     if(p==0){write_com(0x97);write_data(0x2d);}
     break;
    }
    if(P3!=0xfb);
    delay(30);
    while(P3!=0xfb);
   }
  }
  P3=0xf7;
  if(P3!=0xf7)
  {
   delay(40);
   if(P3!=0xf7)
   {
    switch(P3&0xf0)
    {
     case 0x70:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     if(p==0){write_com(0x97);write_data(0x2a);}
     break;
     case 0xb0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     if(p==0){write_com(0x97);write_data(0x2f);}
     break;
     case 0xd0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     goto answer;
     break;
     case 0xe0:
     BUZZER=0;
     delay(80);
     BUZZER=1;
     goto answer;
     break;
    }
    }
   if(P3!=0xf7);
   delay(30);
   while(P3!=0xf7);
  }
}
answer:
  write_com(0x98);
  write_data(0x3d);
  if(c==0&&opt==13)
  {
   display(2,0,"分母不能為零");
   clearscreen();
   goto start;
  }
  switch(opt)
  {
   case 10:rzt=(b+c);displayshu(4,2,rzt);break;
   case 11:rzt=(b-c);if(rzt<0){rzt=c-b;write_data(0x2d);}displayshu(4,2,rzt);break;
   case 12:rzt=(b*c);displayshu(4,2,rzt);break;
   case 13:rzt=(b/c);
   if((int)b%(int)c==0)
   displayshu(4,2,rzt);
   else
   rzt=rzt*1000;
   displayshu(4,2,rzt);
   break;
  }
  if(rzt>9999999999)
  {
   clearscreen();
   display(2,1,"超出計算范圍");
   delay(1000);
   goto start;
  }
  while(1)
  {
   P3=0xf7;
   if(P3!=0xf7)
   {
    delay(40);
    if(P3!=0xf7)
    {
     if((P3&0xf0)==0xe0)
     {
      goto start;
     }
     if(P3!=0xf7);
     delay(30);
     while(P3!=0xf7);
    }
   }
  }
}  
      








新建 Microsoft Word 文檔 (2).docx

19.3 KB, 下載次數: 5, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女视频黄色的 | 国产午夜精品久久久久免费视高清 | 精品国产乱码久久久久久丨区2区 | 羞羞视频在线观看免费观看 | 欧美在线国产精品 | 成年人在线视频 | 中文字幕日韩欧美 | 九九伦理片 | 精品亚洲一区二区 | 一级毛片大全免费播放 | 五月婷婷丁香婷婷 | 羞羞视频网站免费观看 | 国产视频久久 | 狠狠狠色丁香婷婷综合久久五月 | 欧美在线一区二区三区 | 老外几下就让我高潮了 | 祝你幸福电影在线观看 | 中文字幕不卡视频在线观看 | 啪一啪在线视频 | 国产精品久久久久久吹潮 | 欧美日韩国产精品一区 | 国产精品成人国产乱一区 | 亚洲一区久久 | 粉嫩在线 | 99re在线 | 亚洲网站在线观看 | 国产一级免费视频 | 亚洲欧洲精品一区 | 久久精品亚洲 | 成人网视频 | a级毛片毛片免费观看久潮喷 | 国产精品一区在线 | 91中文字幕在线观看 | 国产精品久久久久久久久久免费 | 午夜av在线 | 国产婷婷色一区二区三区 | 欧美日韩视频在线播放 | 精品国产乱码一区二区三 | 亚洲资源在线 | 国产一区二区三区四区五区加勒比 | 免费在线成人 |