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

標題: 基于51/52單片機的簡易計算器制作 [打印本頁]

作者: 陶界    時間: 2017-2-22 12:08
標題: 基于51/52單片機的簡易計算器制作
1. 加法:四位整數加法計算結果若超過八位則顯示計算錯誤
2. 減法:四位整數減法計算結果若超過八位則顯示計算錯誤
3. 乘法:多位整數乘法計算結果若超過四位則顯示計算錯誤
4. 除法:整數除法 5. 有清除功能


[code]#include<reg52.h>
#define  uchar unsigned char
#define  uint  unsigned int
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共陰極
             //  0    1           2    3  4    5    6    7    8  9   熄滅  -
uchar code loc[]={0xff,0xfe,0xfd,0xfb,0xf7};       
uchar code ero[]={0x79,0x50,0x5c};
uchar code www[]={0x71};                               
uint  n=0,n1=0,n2=0;           //賦初值                                                                                       
uchar flag=0;               //計算類型選擇關鍵字
void delay(int t);
void display(int n);
void error();

main()
{
        while(1)
        {       
                uchar temp;
            
        //第一行檢測
            P3=0xfe;
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        delay(10);
                        temp=P3;
                        temp=temp&0xfe;
                        if(temp!=0xfe)
                        {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xee:n1=0;n2=0;n=0;flag=0;break;      //清零
                                        case 0xde:n1=10*n1+0;n=n1;break;                  //0
                                        case 0xbe: if(flag==1)n=n2+n1;            //=
                                                          if(flag==2)n=n2-n1;
                                                          if(flag==3)n=n2*n1;
                                                          if(flag==4)n=n2/n1;
                                                            n1=0;                       
                                                      break;
                                        case 0x7e:      // +
                                             n2=n1;n1=0;
                                                     flag=1;break;
                                }
                                while(temp!=0xf0)
                                {
                                                temp=P3;
                                                temp=temp&0xf0;
                                }       
                        }
                }
       
        //掃描第二行
                P3=0xfd;
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        delay(10);
                        temp=P3;
                        temp=temp&0xf0;
                        if(temp!=0xf0)
                        {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xed:n1=10*n1+1;n=n1;break;                                //4
                                        case 0xdd:n1=10*n1+2;n=n1;break;                        //5
                                        case 0xbd:n1=10*n1+3;n=n1;break;                                //6
                                        case 0x7d:// -       
                                                          n2=n1;n1=0;
                                                          flag=2;break;
                                }
                                while(temp!=0xf0)
                                {
                                temp=P3;
                                temp=temp&0xf0;
                                }               
                    }
                }
       
      //掃描第三行
          P3=0xfb;
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        delay(10);
                        temp=P3;
                        temp=temp&0xf0;
                        if(temp!=0xf0)
                        {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xeb:n1=10*n1+4;n=n1;break;
                                        case 0xdb:n1=10*n1+5;n=n1;break;
                                        case 0xbb:n1=10*n1+6;n=n1;break;
                                        case 0x7b:                       // *                                                                                              n2=n1;n1=0;
                                                  flag=3;break;
                                }               
                                while(temp!=0xf0)
                                {
                                        temp=P3;
                                        temp=temp&0xf0;
                                }       
                        }
                }
       
        //掃描第四行
                P3=0xf7;
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        delay(10);
                        temp=P3;
                        temp=temp&0xf0;
                        if(temp!=0xf0)
                        {
                                temp=P3;
                                switch(temp)
                                {
                                        case 0xe7:n1=10*n1+7;n=n1;break;                           //7
                                        case 0xd7:n1=10*n1+8;n=n1;break;                           //8
                                        case 0xb7:n1=10*n1+9;n=n1;break;                           //9
                                                         
                                        case 0x77:                                    // /       
                                                      n2=n1;n1=0;
                                                  flag=4;break;                                                        
                                                        }
                                while(temp!=0xf0)
                                {
                                        temp=P3;
                                        temp=temp&0xf0;
                                }                       
                    }
            }
                display(n);
        }
}

//延時函數
void delay(int t)
{
        int x,y;
        for(x=0;x<t;x++)
                for(y=0;y<t;y++);       
}

//數碼管顯示
void display(int n)
{
               
        //溢出處理
                uchar g,s,b,q;
                int abs;
                if((n>9999)||(n<-999))
                error();
            
        //正數
                if((n>=0)&&(n<=9999))               
                {
                                g=n%10;
                                s=n/10%10;
                                b=n/100%10;
                                q=n/1000%10;
                                P0=num[g];
                                delay(5);            
                                P2=loc[4];     
                                delay(2);      
                                P2=loc[0];
                                delay(3);
                                if(n>=10)       
                                {
                                        P0=num[s];
                                        P2=loc[3];
                                        delay(2);
                                        P2=loc[0];
                                        delay(3);
                                }
                                if(n>=100)       
                                {
                                        P0=num[b];
                                        P2=loc[2];
                                        delay(2);
                                        P2=loc[0];
                                        delay(3);
                                }
                            if(n>=1000)       
                                {       
                                        P0=num[q];
                                        P2=loc[1];
                                        delay(2);
                                        P2=loc[0];
                                        delay(3);
                                }
                }
               
       //負數
                if((n<0)&&(n>=-999))
                {
                        abs=-n;
                        g=abs%10;
                        s=abs/10%10;
                        b=abs/100%10;
                        q=abs/1000%10;
                        P0=num[g];       
                        P2=loc[4];
                        delay(2);
                        P2=loc[0];
                        delay(2);
                        if((abs/10%10>0)||(abs/100%10>0))       
                                {
                                        P0=num[s];
                                        P2=loc[3];;
                                        delay(2);
                                        P2=loc[0];
                                        delay(2);
                                if((abs/100%10>0))       
                                        {
                                                P0=num[b];
                                                P2=loc[2];
                                                delay(2);
                                                P2=loc[0];
                                                delay(2);
                                                if((abs/1000%10>0))       
                                                        {       
                                                                P0=num[q];
                                                                P2=loc[1];
                                                                delay(2);
                                                                P2=loc[0];
                                                                delay(2);
                             }
                                                else
                                                        {
                                                                P0=num[11];
                                                                P2=loc[1];
                                                                delay(2);
                                                                P2=loc[0];
                                                                delay(2);
                                                        }
                                        }
                                else
                                        {
                                                P0=num[11];
                                                P2=loc[2];
                                                delay(2);
                                                P2=loc[0];
                                                delay(2);
                                        }
                    }
                        else
                                {
                                        P0=num[11];
                                        P2=loc[3];
                                        delay(2);
                                        P2=loc[0];
                                        delay(2);
                                }
                }
}

//溢出顯示
void error()
{
                P2=loc[4];
                P0=www[0];
                delay(2);
                P2=loc[0];
                delay(3);

}

[/code]

0.png (529.07 KB, 下載次數: 129)

0.png





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩一区二区不卡 | 日日操夜夜操天天操 | 中国美女撒尿txxxxx视频 | 欧美精品v| 美国av片在线观看 | 日本一区二区三区精品视频 | 久久成人免费 | 99国产视频 | 亚洲综合大片69999 | 精品国产鲁一鲁一区二区张丽 | 精品视频99 | 欧美一级久久 | 在线国产一区二区 | 欧美精品一区二区三区在线播放 | 最近日韩中文字幕 | 亚洲人人| 日韩高清在线 | 日韩中文一区 | 国产97人人超碰caoprom | 亚洲国产精品久久久久 | 亚洲97| 国产精品一区在线观看你懂的 | 成人精品高清 | 婷婷在线免费 | 亚洲网址 | 亚洲免费人成在线视频观看 | 亚洲综合在线一区 | а√中文在线8 | 久久久精品一区 | 久久久久99 | 日韩av资源站 | 中文字幕亚洲精品在线观看 | 99一级毛片| 久久av网站| 国产一区精品 | 久久最新| 99tv| 欧美精品一区免费 | 国产高清在线视频 | 午夜欧美a级理论片915影院 | 亚洲视频一区在线观看 |