基於51單片機的計算機 C語言程式

來源:互聯網
上載者:User
 對於 電子這個專業,雖不打算以後吃這晚飯,但是期末作業還是得做——“一個簡單的計算機程式”。由於時間,一直沒顧得上整理,今天就把它貼這兒給大家分享,也全當做是對自己這美好青春時光的一點兒記憶吧......嘻嘻嘻1  程式碼如下:

#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int
bit  NumSem;//前後運算元的互斥訊號量
bit  equ;//等號判斷
bit  clr;//清零標誌
bit  add;//加標誌
bit  dec;//減標誌
bit  mul;//乘標誌
bit  div;//除標誌
bit  op;//算術符號標誌
uchar  KeyNum;//索引值
uint  result;//計算結果
uint  PreNum,LatNum;//計算的兩個運算元前運算元,後運算元
uchar  KeyPos;
uchar  DisLed[]={0xC0,0xF9,0xA4,0xB0,0x99,//LED數位七段表
                 0x92,0x82,0xF8,0x80,0x90};
uchar  NumBufe[]={0,0,0,0};
//sbit P10=P1^0;
//sbit P11=P1^1;
//sbit P12=P1^2;
//sbit P13=P1^3;
void  T0Intal(void);//定時器0初始化程式
void DisPlay(void);//顯示程式
void ResultNum(void);//計算機運算結果
void Clear(void);//清零程式
void Delay_510(void);//延時510us程式用彙編編寫
void ChangeNum(uchar *p,uchar nCount);//NumBufe[]移位程式
void main(void)
{
   T0Intal();
   while(1)
   {
     if(NumSem)
     {
        PreNum=NumBufe[3]*1000+NumBufe[2]*100+NumBufe[1]*10+NumBufe[0];
  NumBufe[4]=0;
     NumSem=0;
     }
  if(op)
  {
    if(PreNum!=0)
    {
       if(NumBufe[4]==0)
    {
     NumSem=1;
    }
          if(equ)
    {
       if(NumBufe[4]!=0)
    {
       LatNum=NumBufe[3]*1000+NumBufe[2]*100+NumBufe[1]*10+NumBufe[0];
    //DisLed[]=0;
    KeyPos=0;
    }
      ResultNum();//計算機結果計算
            //DisPlay();//顯示計算結果
    }
   
    }
    else Clear();
 
  }
    if(clr)
 {
   Clear();
    }
 DisPlay();//顯示計算結果
   }

}
void  T0Intal(void)
{
   TMOD=0x01;
   TH0=(65536-20000)/256;
   TL0=(65536-20000)%256;
   EA=1;
   ET0=1;
   TR0=1;
}
void DisPlay(void)
{
   //uchar one,two,three,four;
   //one=result/1000;
   P2=DisLed[NumBufe[3]];
   P0=0xFE;
   Delay_510();
   //two=(result-one*1000)/100;
   P2=DisLed[NumBufe[2]];
   P0=0xFD;
   Delay_510();
   //three=(result-one*1000-two*100)/10;
   P2=DisLed[NumBufe[1]];
   P0=0xFB;
   Delay_510();
   //four=(result-one*1000-two*100)%10;
   P2=DisLed[NumBufe[0]];
   P0=0xF7;
   Delay_510();

}
void ResultNum(void)
{
   if(op)
   {
     if(add)
  {
   result=PreNum+LatNum;
  }
     if(dec)
  {
   result=PreNum-LatNum;
  }
  if(mul)
  {
   result=PreNum*LatNum;
  }
  if(div)
  {
   result=PreNum/LatNum;
  }
   }
   //return result;
   //unsigned char
   //uchar one,two,three;
   //one=result/1000;
   NumBufe[3]=result/1000;
   NumBufe[2]=(result-NumBufe[3]*1000)/100;
   //NumBufe[2]=two;
   NumBufe[1]=(result-NumBufe[3]*1000-NumBufe[2]*100)/10;
   //NumBufe[1]=three;
   NumBufe[0]=(result-NumBufe[3]*1000-NumBufe[2]*100)%10;
}
void Clear(void)
{
 // if(Clear)
  //{
     NumBufe[0]=0;
  NumBufe[1]=0;
  NumBufe[2]=0;
  NumBufe[3]=0;
     PreNum=0;
  LatNum=0;
  result=0;
  NumSem=0;
  KeyPos=0;
  clr=0;
  equ=0;
     add=0;
  dec=0;
  mul=0;
  div=0;
  op=0;
 // }
}
void  ChangeNum(uchar *p,uchar nCount)
{
  if(nCount<4)
  {
    uchar ncount;
   ncount=nCount;
   while(ncount>0)
    {
      *(p+nCount)=*(p+nCount-1);
   ncount--;
     }
  }
}
void Delay_510(void)//延時510微秒
{
#pragma asm
 MOV R0,#7DH
 MOV R1,#02H
 TSR1:
 DJNZ R0,TSR1
 MOV R0,#7DH
 DJNZ R1,TSR1
#pragma endasm
}
 
void Time0_Isr_Int(void)  interrupt 1 //定時器0中斷服務子程式
{
   TH0=(65536-20000)/256;
   TL0=(65536-20000)%256;
   P1=0xF0;
   if((P1&0xF0)!=0xF0)
   {
      Delay_510();
   if((P1&0xF0)!=0xF0)
   {
      P1=0xFE;
   if((P1&0xF0)==0xE0)//數字鍵0
   {
      KeyNum=0;
   ChangeNum(NumBufe,KeyPos);
   KeyPos++;
    }
   if((P1&0xF0)==0xD0)
   {
    KeyNum=1;
   ChangeNum(NumBufe,KeyPos);
   KeyPos++;
   }
      if((P1&0xF0)==0xB0)
   {
     KeyNum=2;
     ChangeNum(NumBufe,KeyPos);
     KeyPos++;
  }
   if((P1&0xF0)==0x70)
   {
    KeyNum=3;
    ChangeNum(NumBufe,KeyPos);
   KeyPos++;
   }
   P1=0xFD;
   if((P1&0xF0)==0xE0)
   {
    KeyNum=4;
   ChangeNum(NumBufe,KeyPos);
   KeyPos++;
   }
   if((P1&0xF0)==0xD0)
   {
      KeyNum=5;
      ChangeNum(NumBufe,KeyPos);
   KeyPos++;
   }
      if((P1&0xF0)==0xB0)
  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.