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

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機100內的加減乘除計算器C語言程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年11月06日   【字體:
#include <reg52.h>                   //包含文件   
#define uchar unsigned char   
#define uint  unsigned int   

char b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,   
          0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff};    // 共陰極字符碼   

//延時函數,用于實現程序中的短暫延時,表示延時cnt個毫秒   
void delay(unsigned int cnt)   
{   
    unsigned char i;   
    while(cnt--)   
    {   
        for(i=220;i>0;i--)   
        ;   
    }   
}   

//鍵盤掃描程序   
uchar keyboardscan(void)   
{   
      uchar sccode,recode;   
      P1=0xf0;    //P1口附初值   
      if((P1&0xf0)!=0xf0)//如果P1口電平不等于0xf0,表示有按鍵按下   
      {   
          delay(20);    //延時20毫秒后再判斷,看是否還有按鍵按下,次步為軟件防抖   
          if((P1&0xf0)!=0xf0)//繼續判斷是否有按鍵按下   
         {   
              sccode=0xfe;  //進行逐行判斷   
              while((sccode&0x10)!=0)   
             {   
                  P1=sccode;   
                  if((P1&0xf0)!=0xf0)   
                  {   
                      recode=(P1&0xf0|0x0f);   
                      switch((~sccode)+(~recode))   
                      {   // 下面是鍵盤的編碼識別   
                          case 0x11:    return(1);    break;   
                          case 0x21:  return(2);    break;   
                          case 0x41:    return(3);     break;   
                          case 0x81:    return(11);  break;//返回對應的鍵值0~15   
                          case 0x12:    return(4);    break;   
                          case 0x22:  return(5);    break;   
                          case 0x42:  return(6);    break;   
                          case 0x82:    return(12);   break;   
                          case 0x14:    return(7);    break;   
                          case 0x24:  return(8);    break;   
                          case 0x44:  return(9);   break;   
                          case 0x84:    return(13);  break;   
                          case 0x18:    return(10);   break;   
                          case 0x28:    return(15);   break;   
                          case 0x48:  return(16);   break;   
                          case 0x88:    return(14);  break;   
                          default:break;   
             }   
            }   
            else   
                sccode = (sccode<<1)|0x01;   
          }   
        }   
      }   
     return(0xff); //如果沒有按鍵按下,則返回0xff   
}   
void output(uchar number)   
{   
P0=b[number/10];   
P2=b[number%10];   
}   
int yunsuan(uchar a,uchar b,uchar c)   
{   
    switch(c)   
    {   
        case 1:return(a/b);break;   
        case 2:return(a*b);break;   
        case 3:return(a-b);break;   
        case 4:return(a+b);break;   
    }   
}   
void main(void)                 //主函數   
{   
    unsigned char n1,n2,key,index,a;   
    n1=n2=index=0;   
    P0=P2=b[0];   
    while(1)   
    {   
        key = keyboardscan();//鍵盤掃描,看是否有按鍵按下   
        if(key != 0xff)//如果有按鍵按下,則key不再是0xff了,顯示該按鍵鍵值   
        {   
            if(key<10)   
            {   
                if(!index) n1=key%10;   
                else n2=key%10;   
                output(key%10);   
            }   
            else if(key==15)   
            {   
                n1=n2=index=0;   
                output(0);   
            }   
            else if(key==16)   
            {   
                if(!index) output(n1);   
                else   
                {   
                    a=yunsuan(n1,n2,index);   
                    a=a%100;   
                    output(a);   
                    n1=a;   
                    n2=index=0;   
                }   
            }   
            else   
            {         
                if(index==0||n2==0) index=key-10;   
                else   
                {   
                    a=yunsuan(n1,n2,index);   
                    a=a%100;   
                    output(a);   
                    n1=a;   
                    n2=0;   
                    index=key-10;   
                }   
            }   
        }   
    }   
}   
關閉窗口

相關文章

主站蜘蛛池模板: 亚洲天堂久久 | 999精品视频 | 欧美成年网站 | 国产精品资源在线 | 亚洲最大看片网站 | 日韩精品一区二区三区免费视频 | 日日操夜夜干 | 99久久99久久精品国产片果冰 | 狠狠干综合视频 | 国产第1页 | 国产精品欧美一区二区三区不卡 | 玖玖操| 精品乱码一区二区三四区 | 日本超碰 | 在线免费观看视频黄 | 国产激情毛片 | 久在线视频 | 国产精品欧美一区二区三区不卡 | 欧美视频 亚洲视频 | 亚洲97 | 韩国久久 | 国产精品久久久久久久久久免费看 | 91视频久久 | 国产1区在线 | 在线观看一区 | 中文字幕第一页在线 | 色天堂影院 | 午夜寂寞网站 | 亚洲欧美日本在线 | 日韩aⅴ片| 免费一区二区三区 | 粉嫩高清一区二区三区 | 91观看 | 日本天天操 | 欧美aaa| 久久99成人| 国产激情在线 | 免费亚洲一区二区 | 久久噜| 中文字幕av在线播放 | 国产精品国产精品国产专区不片 |