娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

基于51單片機的簡單計算器

發布者:溫馨小筑最新更新時間:2020-03-24 來源: eefocus關鍵字:51單片機  簡單計算器  撥號器 手機看文章 掃描二維碼
隨時隨地手機看文章

在上一篇中,我們已經說過了基于51單片機的簡單撥號器,在下邊,我們將寫一個計算器程序,原理很簡單,只需要在撥號器的基礎上,算出撥號器所表示的數字,并進行計算即可。 

代碼如下;


#include"reg51.h"

#include

typedef unsigned char u8;         //對數據類型進行聲明定義

typedef unsigned int u16;


sbit LSA=P2^2;  //38譯碼器數碼管位選

sbit LSB=P2^3;

sbit LSC=P2^4;


sbit k1=P3^1;     

sbit k2=P3^0;

sbit k3=P3^2;

sbit k4=P3^3;




#define GPIO_KEY P1

#define GPIO_DIG P0


u16 KeyValue;        //用來存放讀取到的鍵值

u16 keyflag,i;       //用來回復是否有按鍵按下

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //顯示0~F的值


u16 wei[8]={0};    //用來存放每一位數碼管數字的數組



/*******************************************************************************

* 函 數 名         : delay

* 函數功能         : 延時函數,i=1時,大約延時10us

*******************************************************************************/

void delay(u16 i)

{  

     while(i--);

}





/*******************************************************************************

* 函 數 名       : display

* 函數功能       : 掃描顯示數碼管

* 輸    入       : 無

* 輸    出         : 無

*******************************************************************************/

void display()    

{    


     LSA=0; LSB=0; LSC=0; P0=smgduan[wei[0]];delay(50); P0=0x00; 

     LSA=1; LSB=0; LSC=0; P0=smgduan[wei[1]];delay(50); P0=0x00;

     LSA=0; LSB=1; LSC=0; P0=smgduan[wei[2]];delay(50); P0=0x00; 

     LSA=1; LSB=1; LSC=0; P0=smgduan[wei[3]];delay(50); P0=0x00; 

     LSA=0; LSB=0; LSC=1; P0=smgduan[wei[4]];delay(50); P0=0x00; 

     LSA=1; LSB=0; LSC=1; P0=smgduan[wei[5]];delay(50); P0=0x00; 

     LSA=0; LSB=1; LSC=1; P0=smgduan[wei[6]];delay(50); P0=0x00; 

     LSA=1; LSB=1; LSC=1; P0=smgduan[wei[7]];delay(50); P0=0x00; 


}







/*******************************************************************************

* 函 數 名         : KeyDown

* 函數功能         : 檢測有按鍵按下并讀取鍵值

* 輸    入         : 無

* 輸    出         : 無

*******************************************************************************/

void KeyDown(void)

{

    char a=0;

    GPIO_KEY=0x0f;

    if(GPIO_KEY!=0x0f)//讀取按鍵是否按下

    {

        keyflag=1;

        delay(1000);//延時10ms進行消抖

        if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下

        {   

            //測試列

            GPIO_KEY=0X0F;

            switch(GPIO_KEY)

            {

                case(0X07): KeyValue=0;break;

                case(0X0b): KeyValue=1;break;

                case(0X0d): KeyValue=2;break;

                case(0X0e): KeyValue=3;break;

            }

            //測試行

            GPIO_KEY=0XF0;

            switch(GPIO_KEY)

            {

                case(0X70): KeyValue=KeyValue;break;

                case(0Xb0): KeyValue=KeyValue+4;break;

                case(0Xd0): KeyValue=KeyValue+8;break;

                case(0Xe0): KeyValue=KeyValue+12;break;

            }

            while((a<50)&&(GPIO_KEY!=0xf0))  //檢測按鍵松手檢測

            {

                delay(1000);

                a++;

            }

        }

    }

}







/*******************************************************************************

* 函 數 名       : main

* 函數功能       : 主函數

* 輸    入       : 無

* 輸    出         : 無

*******************************************************************************/

void main()

{  

   u16 a=0,b=0,c=0;


   while(1)

   {    

            display();                     /* 第一個數字輸入*/

            KeyDown();                     

         if(keyflag==1)                    

         {                                 


            for(i=7;i>0;i--)              //輸入一位,數字向左移動一位 

            {wei[i]=wei[i-1];}             

            wei[0]=KeyValue;                            

            keyflag=0;                                  

         }




  /*************************加法運算****************************/

         if(k1==0)      

         {

             a=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;   //計算a的值     


             for(i=0;i<8;i++)

             wei[i]=0;              //對數碼管清零


             while(1)                                //輸入第二個數

             {

                     display();

                     KeyDown();

                     if(KeyValue==15) break;

                     if(keyflag==1)

                     {  


                        for(i=7;i>0;i--)

                        {wei[i]=wei[i-1];}

                        wei[0]=KeyValue;

                        keyflag=0;

                     }


             }

             b=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;   //計算b的值

             c=a+b;

             wei[0]=c%10;                    //計算C的各個位的數字

             wei[1]=c/10%10;

             wei[2]=c/100%10;

             wei[3]=c/1000%10;

             wei[4]=c/10000%10;

             wei[5]=c/100000%10;

             wei[6]=c/1000000%10;

             wei[7]=c/10000000%10;

             while(1)                                               

             {

               display();

             }



         }


 /*************************減法運算****************************/

         else    if(k2==0)      

         {

             a=wei[0]+wei[1]*10+wei[2]*100+wei[3]*1000+wei[4]*10000+wei[5]*100000+wei[6]*1000000+wei[7]*10000000;   //計算a的值

             for(i=0;i<8;i++)

             wei[i]=0;              //對數碼管清零


             while(1)

             {                                     //輸入第二個數

                     display();

                     KeyDown();

                     if(KeyValue==15) break;       //當讀到等于號,既,KeyValue=15時,停止輸入

[1] [2]
關鍵字:51單片機  簡單計算器  撥號器 引用地址:基于51單片機的簡單計算器

上一篇:51單片機復習:8*8led點陣
下一篇:基于51單片機的貪吃蛇小程序(8*8LED點陣實現)

0
添点儿料...
无论热点新闻、行业分析、技术干货……
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 磴口县| 嵊州市| 佛坪县| 竹山县| 遂昌县| 曲麻莱县| 晋城| 加查县| 威宁| 平顶山市| 读书| 绵阳市| 乌鲁木齐市| 巧家县| 司法| 泗洪县| 淄博市| 石屏县| 潼关县| 尖扎县| 墨玉县| 文化| 宁强县| 册亨县| 沙坪坝区| 永寿县| 思茅市| 贡觉县| 昂仁县| 炎陵县| 绥宁县| 哈尔滨市| 磐安县| 赤城县| 泽普县| 丰顺县| 周口市| 沛县| 方山县| 民勤县| 安龙县|