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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1523|回復: 1
打印 上一主題 下一主題
收起左側

基于單片機矩陣鍵盤計算器小數運算亂碼問題

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:825447 發表于 2020-10-21 11:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/* 現在問題是小數運算結果為亂碼,為什么 */

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#include <math.h>
//pow函數
uchar code table[]={0x3f,0x06,0x5b,0x4f,
                                                                                0x66,0x6d,0x7d,0x07,
                                                                                0x7f,0x6f};

                                                                                
int  num , firstflot , secondflot = 0 , thirdflot=0 , fourflot=0 , k=0, fiveflot=0 , sixflot=0 , sevenflot=0 , eightflot=0 ;
uint  x= 0 ,m=0 , z = 0 , n = 0 ;
int a=0 , b=0 ,c=0 , d=0, e=0 , f = 0 , g = 0 , h = 0 ,i = 0 , p = 0 ;                                                                                
int num1 ;                                                //num1起暫時存儲作用
                                                
                                                                                
                                                                                
                                                                                
/******************************************************************************
firstflot是數字標志位,secondflot是功能鍵按下標志位,thirdflot是第二次輸入標志位,
fourflot是等號標志位,fiveflot是歸零標志位,sixflot是刪除鍵標志位,sevenflot
是負數標志位,eightflot是小數點標志位。        k是四功能鍵選擇                                                               

第一個數 : a是整數個數,b是小數個數,c是整數,d是小數 。
第二個數 : e是整數個數,f是小數個數,g是整數,h是小數 。
i用于計算小數和  ,p用于計算整數和 。                                                                                
*****************************************************************************/
                                                                                
                                                                                
                                                                                
                                                                                                               
void delay( uint m )                                        //延時函數
{
        uint x , y ;
        for( x = m ; x > 0 ; x--)
                for( y = 110 ; y > 0 ; y--);
}        


void keyscan()                                                        //掃描鍵盤
{
        int temp ;
        P2=0x7f;
        temp=P2;
        temp=temp&0x0f;                        //判斷第一行按鍵
        if(temp != 0x0f )
        {
                delay( 10 ) ;
                temp = P2 ;                //重讀P2口值
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch(temp)
                        {
                                case 0x77:        num=1;                                //1
                                                                                firstflot=1 ;
                                                                                break;        
                                
                                case 0x7b:        num=2;                        //2
                                                                                firstflot=1 ;
                                                                                break;        
                                
                                case 0x7d:        num=3;                        //3
                                                                                firstflot=1 ;
                                                                                break;
                                
                                case 0x7e :   k++;
                                
                                                                                        if(k==1)
                                                                                        {
                                                                                        num1='+';
                                                                                        }
                                                                                       
                                                                                        if(k==2)
                                                                                        {
                                                                                                num1=0 ;
                                                                                                num1='-' ;
                                                                                        }
                                                                                       
                                                                                        if(k==3)
                                                                                        {
                                                                                                num1=0;
                                                                                                num1='*';
                                                                                        }
                                                                                       
                                                                                        if(k==4)
                                                                                        {
                                                                                                num1=0;
                                                                                                num1='/';
                                                                                        }
                                                                                       
                                                                                        secondflot=1;
                                                                                        eightflot=0;
                                                                                        break ;
                                                                                       
                        }
                        while(temp != 0x0f)                        //等待按鍵釋放
                        {
                                temp = P2;
                                temp = temp & 0x0f;
                        }
                        
                }
        }
        P2 = 0xbf ;                                                                //掃描第二行鍵盤
        temp = P2 ;
        temp = temp & 0x0f;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                //消抖
                temp = P2 ;
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xb7:        num=4;                                //4
                                                                                firstflot=1 ;               
                                                                                break;
                                case 0xbb:        num=5;                        //5
                                                                                firstflot=1 ;
                                                                                break;
                                case 0xbd:        num=6;                        //6
                                                                                firstflot=1 ;
                                                                                break;

                                case 0xbe :        sixflot=1 ;  //刪除
                                                                                break ;
                        }
                while( temp != 0x0f )
                {
                        temp = P2 ;
                        temp = temp & 0x0f ;
                }
         }
}
        P2 = 0xdf ;                                        //掃描第三行鍵盤
        temp = P2 ;
        temp = temp & 0x0f ;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                        //消抖
                temp = P2 ;
                temp = temp & 0x0f ;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xd7:        num=7;                        //7
                                                                                firstflot=1 ;
                                                                                break;
                                
                                case 0xdb:  num=8;                        //8
                                                                                firstflot=1 ;
                                                                                break;
                                
                                case 0xdd:        num=9;                        //9
                                                                                firstflot=1 ;
                                                                                break;
                                

                                case 0xde: eightflot=1; /*.*/
                                                                         break ;
                                
                        }
                        while( temp != 0x0f )
                        {
                                temp = P2;
                                temp = temp & 0x0f ;
                        }
                        
                }
        }
        P2 = 0xef ;                                                //掃描第四行鍵盤
        temp = P2 ;
        temp = temp & 0x0f ;
        if( temp != 0x0f )
        {
                delay( 10 ) ;                                //消抖
                temp = P2 ;
                temp = temp & 0x0f;
                if( temp != 0x0f )
                {
                        temp = P2 ;
                        switch( temp )
                        {
                                case 0xe7:        num = '$' ;                //歸0
                                                                                fiveflot=1;
                                                                                break;
                                
                                case 0xeb:        num = 0 ;                                                //0
                                                                                firstflot=1 ;
                                                                                break;
                                
                                case 0xed:        num = '=' ;                        //=
                                                                                fourflot=1;
                                                                                secondflot=1;                //重置標志位,顯示最終小數
                                                                                thirdflot=0;
                                                                                break;
                                
                        }
                        while( temp != 0x0f )
                        {
                                temp = P2;
                                temp = temp & 0x0f ;
                        }

                        if(fiveflot==1){
                                x=0;
                                k=0;
                                m=n=0;
                                a=b=c=d=e=f=g=h=i=p=0;
                                secondflot=thirdflot=fourflot=fiveflot=sevenflot=eightflot=0 ;
                                num1=0;}
                        
                        
                }
        }
}




void jisuan()
{
        if(secondflot==0)                                        //第一位數
        {
                        if(firstflot==1&&eightflot==0)                //無小數點
                        {
                                m=m*10+num;
                                
                                num = 0;
                                
                                firstflot =0 ;
                                

                                
                        }
                        
                        if(firstflot==1&&eightflot==1)                //小數點按下
                        {
                                
                                m=m*10+num;
                                
                                num = 0;
                                
                                firstflot=0;
                                
                                b++;
                        }
                        
                        if(sixflot==1)
                        {
                                
                                m=m/10;
                                
                                sixflot=0;
                                
                                if(eightflot==1&&b>0)                                        //如果有小數刪除,則刪除一位
                                                b--;                                
                                                if(b==0)
                                                        eightflot=0;
                                
                        }
                        
                        x=m;
        
        }
        if(secondflot==1&&sixflot==1&&thirdflot==0)
        {
                k=0;
               
                secondflot=sixflot=0;
               
        }
        
        if(secondflot==1)                                        //第二個數
        {
                        if(firstflot==1&&eightflot==0)
                        {
                                n = n*10 + num ;
                                
                                num = 0 ;
                                
                                firstflot = 0 ;
                                
                                thirdflot=1;
                                       
                        }
                        
                        if(eightflot==1&&firstflot==1)
                        {
                                f++;                        //小數位數
                                
                                n = n*10 + num ;
                                
                                num = 0 ;
                                
                                firstflot = 0 ;
                                
                        }
        
                        if(sixflot==1)                //shanchu
                        {
                                n=n/10 ;
                                
                                sixflot=0;
                        
                                if(eightflot==1&&f>0)
                                f--;
                                        if(f==0)
                                                eightflot=0;
                                
                        }
                                                
                        x=n;
                        
        }
        
        
        if(fourflot==1)                //等號按下
        {               
             switch(num1)
                {
                        case '+' :               
                                                                                if(b<f)                //第一位小數位數小于第二位小數                                                                                m=m*(pow(10,f)+0.1);
                                                                                else
                                                                                n=n*(pow(10,b)+0.1);

                                                                                
                                                                                z=m+n;
                                                                                                                                                               
                                                                                break ;
                                                
                        
                }
                x=z;
        }
        
}


void display()
{
        
        if(x<10)
        {
                if(sevenflot==1)
                {
                P0=0xbf;
                P1=0x40;
                delay(1);
                        
                P1=0x00;
                delay(1) ;
                }
               
                P0=0x7f ;
                P1=table[x];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
        }
        
        if(x>10&&x<100)
        {
                if(sevenflot==1)
                {
                        P0=0xdf;
                        P1=0x40;
                        delay(1);
                        
                        P1=0x00;
                  delay(1) ;
                }
               
                P0=0x7f;
                P1=table[x%10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xbf;
                P1=table[x/10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
        }
        
        if(x>100&&x<1000)
        {
                if(sevenflot==1)
                {
                        P0=0xef;
                        P1=0x40;
                        delay(1);
                        
                        P1=0x00;
                        delay(1) ;
                }
               
                P0=0xdf ;
                P1=table[x/100];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xbf;
                P1=table[x%100/10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0x7f ;
                P1=table[x%100%10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               

        }
        
        if(x>=1000&&x<10000)
        {
                if(sevenflot==1)
                {
                        P0=0xf7;
                        P1=0x40;
                        delay(1);
                        
                        P1=0x00;
                        delay(1) ;
                }        
               
                P0=0xef ;
                P1=table[x/1000];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xdf ;
                P1=table[x%1000/100];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xbf;
                P1=table[x%1000%100/10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0x7f ;
                P1=table[x%1000%100%10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
        
        }
        
        if(x>=10000&&x<100000)
        {
                if(sevenflot==1)
                {
                        P0=0xfb;
                        P1=0x40;
                        delay(1);
                        
                        P1=0x00;
                        delay(1) ;
                }        
               
                P0=0xf7 ;
                P1=table[x/10000];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xef ;
                P1=table[x%10000/1000];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xdf ;
                P1=table[x%10000%1000/100];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0xbf;
                P1=table[x%10000%1000%100/10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
               
                P0=0x7f ;
                P1=table[x%10000%1000%100%10];
                delay(1);
               
                P1=0x00;
                delay(1) ;
        
        }
        
        if(b>0&&secondflot==0)                        //顯示第一位小數
        {
                switch(b)
                {
                        case 1 :  P0=0xbf ;
                                                                break;
                        
                        case 2 :  P0=0xdf;
                                                                break ;
                        
                        case 3 :  P0=0xef;
                                                                break ;
                        
                        case 4 :  P0=0xf7 ;
                                                                break ;
                        
                }
                P1=0x80 ;
                delay(1);
               
                P1=0x00;
                delay(1);
               
        }
        
        if(f>0&&thirdflot==1)
        {
                switch(f)
                {
                        case 1 :  P0=0xbf ;
                                                                break;
                        
                        case 2 :  P0=0xdf;
                                                                break ;
                        
                        case 3 :  P0=0xef;
                                                                break ;
                        
                        case 4 :  P0=0xf7 ;
                                                                break ;
                }        
               
                P1=0x80;
                delay(1);
               
                P1=0x00;
                delay(1);
               
        }
        
        if((b>0||f>0)&&sevenflot==1)
        {
                if(b>f)
                {
                        switch(b)
                        {
                        case 1 :  P0=0xbf ;
                                                                break;
                        
                        case 2 :  P0=0xdf;
                                                                break ;
                        
                        case 3 :  P0=0xef;
                                                                break ;
                        
                        case 4 :  P0=0xf7 ;
                                                                break ;
                        
                        }
                        P1=0x80 ;
                        delay(1);
                        
                        P1=0x00;
                        delay(1);
                        
                }
                else
                {
                        switch(f)
                        {
                        case 1 :  P0=0xbf ;
                                                                break;
                        
                        case 2 :  P0=0xdf;
                                                                break ;
                        
                        case 3 :  P0=0xef;
                                                                break ;
                        
                        case 4 :  P0=0xf7 ;
                                                                break ;
                        }        
                        
                        P1=0x80;
                        delay(1);
                        
                        P1=0x00;
                        delay(1);
                        
                }
        }
        
}



void main()
{
        while(1)
        {
                        keyscan() ;
                        jisuan() ;
                        display() ;
        
        }
}
        
        
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:825447 發表于 2020-10-22 20:33 來自手機 | 只看該作者
快來看看看看哪里出問題,急需解決
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品成人网 | 婷婷激情综合 | 精品一区二区在线视频 | 精品久久久久久一区二区 | 成人性视频免费网站 | 一区二区三区免费 | 精品欧美视频 | 久久一区二区视频 | 欧美11一13sex性hd | 国产精品国产三级国产aⅴ中文 | 三级黄视频在线观看 | 视频一区在线 | 久久伊人一区二区 | av中文在线观看 | 日韩视频在线观看中文字幕 | 午夜免费福利影院 | 色姑娘av | 久久国| 国产在线观看一区二区 | 91精品国产一区二区在线观看 | 夜夜操av | 青青草精品视频 | 国产成人福利在线观看 | 精品96久久久久久中文字幕无 | 九九热久久免费视频 | 精品欧美一区二区中文字幕视频 | 亚洲视屏| 夜夜艹天天干 | 欧美一区免费 | 国产真实乱全部视频 | 蜜桃传媒一区二区 | 免费一级欧美在线观看视频 | 男人天堂视频在线观看 | 欧美一级大片 | 久青草影院 | 一区观看| 国产成人久久 | 成人精品视频99在线观看免费 | 国产区在线观看 | 噜噜噜噜狠狠狠7777视频 | 亚洲视频在线观看一区二区三区 |