欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 單片機(jī)計(jì)算器仿真+程序 帶鍵盤(pán)和數(shù)碼管 含ppt [打印本頁(yè)]

作者: 十字路的追夢(mèng)人    時(shí)間: 2016-7-7 20:49
標(biāo)題: 單片機(jī)計(jì)算器仿真+程序 帶鍵盤(pán)和數(shù)碼管 含ppt
只要用鍵盤(pán)和數(shù)碼管就能制作出一個(gè)簡(jiǎn)易的51單片機(jī)計(jì)算器

計(jì)算器的仿真原理圖


單片機(jī)計(jì)算器的ppt文檔

硬件部分比較簡(jiǎn)單,當(dāng)鍵盤(pán)按鍵按下時(shí)它的那一行、那一列的端口為低電平。因此,只要掃描行、列端口是否都為低電平就可以確定是哪個(gè)鍵被按下。


主程序流程圖


程序的主要思想是:將按鍵抽象為字符,然后就是對(duì)字符的處理。將操作數(shù)分別轉(zhuǎn)化為字符串存儲(chǔ),操作符存儲(chǔ)為字符形式。然后調(diào)用compute()函數(shù)進(jìn)行計(jì)算并返回結(jié)果。具體程序及看注釋還有流程圖。


51單片機(jī)計(jì)算器源程序:

#include <reg51.h>
#
include <intrins.h>
#
include <ctype.h>            /*   isdigit()函數(shù)   */
#
include <stdlib.h>            /*    atoi()函數(shù)     */

#
define uchar unsigned char
#
define uint unsigned int

uchar operand1[
9], operand2[9];  /*   操作數(shù)   */
uchar
operator;                     /*   操作符   */

void delay(uint);
uchar keyscan();
void disp(void);
void buf(uintvalue);
uint compute(uint va1,uint va2,uchar optor);

uchar code table[]
= {0xc0,0xf9,0xa4,0xb0,0x99,
                0x92,0x82,0xf8,0x80,0x90,0xff};     
/*   字符碼表   */

uchar dbuf[
8] = {10,10,10,10,10,10,10,10};            /*   顯示緩存   */

/*   延時(shí)函數(shù)   */        
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
   
for(y=110;y>0;y--);
}

/*******************************************
              
鍵盤(pán)掃描程序
       將按鍵轉(zhuǎn)化為字符并作為輸出
    '$','#'分別表示清零鍵和沒(méi)有鍵按下
*******************************************/

uchar keyscan()
{
    uchar skey;                     
/*   按鍵值標(biāo)記變量   */
   
/***********************
     
掃描鍵盤(pán)第1行   
************************/

    P1
= 0xfe;
   
while((P1 & 0xf0) != 0xf0)        /*      有按鍵按下    */
    {
        delay(
3);                    /*      去抖動(dòng)延時(shí)    */

        
while((P1 & 0xf0) != 0xf0)    /*     仍有鍵按下     */
        {
            
switch(P1)                /*    識(shí)別按鍵并賦值  */
            {
               
case 0xee: skey = '7'; break;
               
case 0xde: skey = '8'; break;
               
case 0xbe: skey = '9'; break;
               
case 0x7e: skey = '/'; break;
                    
               
default:   skey = '#';
            }

            
while((P1 & 0xf0) != 0xf0) /*   等待按鍵松開(kāi)   */
                ;
        }
    }

/***********************
     
掃描鍵盤(pán)第2行   
************************/

    P1
= 0xfd;   
   
while((P1 & 0xf0) != 0xf0)
    {
        delay(
3);

        
while((P1 & 0xf0) != 0xf0)
        {
            
switch(P1)
            {
               
case 0xed: skey = '4'; break;
               
case 0xdd: skey = '5'; break;
               
case 0xbd: skey = '6'; break;
               
case 0x7d: skey = '*'; break;
                    
               
default:   skey = '#';
            }

            
while((P1 & 0xf0) != 0xf0)
                ;
        }
    }


/***********************
     
掃描鍵盤(pán)第3行   
************************/

   P1
= 0xfb;
   
while((P1 & 0xf0) != 0xf0)
    {
        delay(
3);
        
        
while((P1 & 0xf0) != 0xf0)
        {
            
switch(P1)
            {
               
case 0xeb: skey = '1'; break;
               
case 0xdb: skey = '2'; break;
               
case 0xbb: skey = '3'; break;
               
case 0x7b: skey = '-'; break;
                    
               
default: skey = '#';
            }

            
while((P1 & 0xf0) != 0xf0)
                ;
        }
    }


/***********************
     
掃描鍵盤(pán)第4行   
************************/

    P1
= 0xf7;
   
while((P1 & 0xf0) != 0xf0)
    {
        delay(
3);

        
while((P1 & 0xf0) != 0xf0)
        {
            
switch(P1)
            {
               
case 0xe7: skey = '$'; break;
               
case 0xd7: skey = '0'; break;
               
case 0xb7: skey = '='; break;
               
case 0x77: skey = '+'; break;
                    
               
default:   skey = '#';
            }

            
while((P1 & 0xf0) != 0xf0)
                ;
        }
    }

   
return skey;
}

void main()
{   
    uint value1, value2, value;           
/*    數(shù)值1,數(shù)值2,結(jié)果    */
    uchar ckey, cut1
= 0, cut2 = 0;    /*   ckey鍵盤(pán)輸入字符    */
    uchar
operator;                       /*         運(yùn)算符        */
   uchar i,
bool = 0;

init
:                                   /*    goto語(yǔ)句定位標(biāo)簽   */

    buf(
0);                            /*         初始化        */
    disp();
    value
= 0;
    cut1
= cut2 = 0;
   
bool = 0;
   
for(i = 0;i < 9;i++)
    {
        operand1[ i]
= '\0';
        operand2[ i]
= '\0';
    }                                 
/*         初始化        */

   
while(1)
    {
        ckey
=keyscan();             /*         讀取鍵盤(pán)       */
        
if(ckey != '#')
        {
/*  isdigit函數(shù),字符是阿拉伯?dāng)?shù)字返回非0值,否則返回0  */
            
if(isdigit(ckey))         
            {
               
switch(bool)   
                {
                    
case 0:
                           operand1[cut1]
= ckey;
                            operand1[cut1
+1] = '\0';
                            value1
=atoi(operand1);  /*  atoi函數(shù),將字符串轉(zhuǎn)化為,int整數(shù)  */
                            cut1
++;
                            buf(value1);
                            disp();
                           
break;
                    
case 1:
                            operand2[cut2]
= ckey;
                            operand2[cut2
+1] = '\0';
                            value2
=atoi(operand2);
                            cut2
++;
                            buf(value2);
                            disp();
                           
break;
                           
                    
default: break;
                }
            }
            
else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')
            {
               
bool = 1;   
               
operator = ckey;
                buf(
0);
                dbuf[
7] = 10;
                disp();
            }
            
else if(ckey == '=')
            {
                value
=compute(value1,value2,operator);
                buf(value);
                disp();
               
while(1)                     /*   計(jì)算結(jié)束等待清零鍵按下  */
                {
                    ckey
= keyscan();
                    
if(ckey == '$')          /* 如果有清零鍵按下跳轉(zhuǎn)到開(kāi)始 */
                        
goto init;
                    
else
                        {
                            buf(value);
                            disp();
                        }
                }
            }
            
else if(ckey == '$')
            {   
goto init;}
        }
        disp();
    }

}

/******************************************
                 
運(yùn)算函數(shù)

輸入:操作數(shù)和操作符
輸出:計(jì)算結(jié)果
*******************************************/

uint compute(uint va1,uint va2,uchar optor)
{
    uint value;

   
switch(optor)
    {
        
case '+' : value = va1+va2;    break;
        
case '-' : value = va1-va2;    break;
        
case '*' : value = va1*va2;    break;
        
case '/' : value = va1/va2;    break;
        
        
default :  break;
    }
   
return value;
}

/*******************************************
              
更新顯示緩存
輸入:無(wú)符號(hào)整數(shù)
輸出:將輸入送入顯示緩存
*******************************************/

void buf(uint val)
{
    uchar i;
   
if(val == 0)
    {
        dbuf[
7] = 0;
        i
= 6;
    }
   
   
else
        
for(i = 7; val > 0; i--)
        {
            dbuf[ i]
= val % 10;
            val
/= 10;
        }
   
   
for( ; i > 0; i--)
        dbuf[ i]
= 10;
}

/*******************************************
               
顯示函數(shù)      
*******************************************/

void disp(void)
{
    uchar bsel, n;
   
    bsel
=0x01;
   
for(n=0;n<8;n++)
    {
        P2
=bsel;
        P0
=table[dbuf[n]];
        bsel
=_crol_(bsel,1);
        delay(
3);
        P0
=0xff;
    }
}




單片機(jī)計(jì)算器制作的全部資料下載: C51簡(jiǎn)單計(jì)算器.zip (1.24 MB, 下載次數(shù): 94)

作者: 小璐    時(shí)間: 2018-7-6 15:24
有人下載了嗎
可以嗎
作者: 臺(tái)風(fēng)天然粉    時(shí)間: 2018-11-19 11:48
有沒(méi)有程序
作者: jinsy    時(shí)間: 2018-12-24 16:18
小璐 發(fā)表于 2018-7-6 15:24
有人下載了嗎
可以嗎

用不了





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1