毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

单片机简单的计算器设计源代码

更新时间:2012-9-24:  来源:毕业论文

#include"calc.h"

void main(void)
{
 init(); //键盘定时扫描初始化
 status=0;
 display(0);
 //getkey();
 while(1)
 {
  Refresh(ledbuf);
 }
}

void display(signed long x)
{
 signed long data t;
 unsigned long data tc;
 int data i,p,tp;
 int fst=0;
 for(i=0;i<MAX_DISPLAY_CHAR;i++)
 {
  ledbuf[i]=0xff;
 }
 t=x;
 if(x>=100000000||x<=-10000000){return;}//整数溢出
 else if(x>=10000000||x<=-1000000){i=8;}
 else if(x>=1000000||x<=-100000){i=7;}
 else if(x>=100000||x<=-10000){i=6;}
 else if(x>=10000||x<=-1000){i=5;}
 else if(x>=1000||x<=-100){i=4;}
 else if(x>=100||x<=-10){i=3;}
 else if(x>=10||x<0){i=2;}
 else{i=1;}

 if(x<0)
 {
  ledbuf[--i]=0x2d;//负号处理
  t*=-1;
 }
 
 for(p=i-1;p>=0;p--)
 {
  tc毕业论文http://www.youerw.com/  =1;
  for(tp=p;tp>0;tp--) tc*=10;
  ledbuf[p]=t/tc;
  t=t-(ledbuf[p]*tc);
 }
 for(i=MAX_DISPLAY_CHAR-1;i>=0;i--)
 {
  if(fst!=0||ledbuf[i]!=0||i==0)
  {
   ledbuf[i]=value2led(ledbuf[i]);
   fst=1;
  }
  else
  {
   ledbuf[i]=0xff;  
  }
 }
 return;
}

char value2led(char ch)
{
 switch(ch)
 {
  case 0x00: return 0xc0;
  case 0x01: return 0xf9;
  case 0x02: return 0xa4;
  case 0x03: return 0xb0;
  case 0x04: return 0x99;
  case 0x05: return 0x92;
  case 0x06: return 0x82;
  case 0x07: return 0xf8;
  case 0x08: return 0x80;
  case 0x09: return 0x90;
  case 0x2d: return 0xbf;
 }
}

void getkey (void) interrupt 1 using 0
//定时扫描键盘
{
 char data mykey;
   mykey = input();
 if(mykey==0)
 {
  return;
 }
 else
 {
  calc(mykey);
 }
  return;
 }

void calc(char cur)
{
 if(cur=='0')cur=0;
 if(cur>=0x00&&cur<=0x09)
  digits(cur);
 else
  operator(cur);
 return;
}
void digits(char dt)
{
 if(status==0)
 {
  if(lvalue>=10000000) return;
  lvalue*=10;
  lvalue+=dt;
  display(lvalue);
 }
 else if(status==1)
 {
  if(rvalue>=10000000) return;
  rvalue*=10;
  rvalue+=dt;
  display(rvalue);
 }
 return;
}
void operator(char op)
{
 status++;
 switch(op)
 {
  case '+':
  case '-':
  case '*':
  case '/':
   if(status==1||status==0)
   {
    lasttoken=op;
本文来自优.文,论-文·网原文请找腾讯3249.114   deal();
   status=0;
   break;
  case 'C':
   lasttoken=op;
   deal();
   status=0;
   break;
  case 'S':
   lasttoken=op;
   deal();
   status=0;
 }
 return;
}

void deal()
{
 long result=0;
 long num;
 switch(lasttoken)
 { 
  case '+':
   result=lvalue毕业论文http://www.youerw.com/  +rvalue;
   break;
  case '-':
   result=lvalue-rvalue;
   break;
  case '*':
   result=lvalue*rvalue;
   break;
  case '/':
   if(rvalue==0) return;
   result=lvalue/rvalue;
   break;
  case 'C':
   lasttoken=0;
   break;
  case 'S':
   if(status==2&&rvalue!=0) num=rvalue;
   else num=lvalue;
   result=square((double)num);
   lasttoken=0;   
   break;
 }
 if(result>=100000000)result=0;
 lvalue=result;
 display(lvalue);
 rvalue=0;
 return;
}
long absc(long dt)
{
 if(dt>=0) return dt;
 else return dt*(-1);
}

int square(double dt)
{
 double result;
 result=dt/2;
    while (absc(result*result-dt)>1)
    result=(result+dt/result)/2;
 return result;}2527

[1] [2] 下一页

单片机简单的计算器设计源代码下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。