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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1090|回復: 2
打印 上一主題 下一主題
收起左側(cè)

單片機C語言乘法中個位先顯示還是十位先顯示?請求大神解答一下

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1027319 發(fā)表于 2022-5-24 16:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
            if(fuhao==3)    //乘法
                {   
                    SUM=(Table_A)*(Table_B);
                    lcd1602_write_cmd(0Xcf);             //第二行最后一位顯示
                    lcd1602_write_cmd(0X04);             //指針左移
                    while(SUM!=0)             //一位一位顯示
                            {
                                lcd1602_write_data(0x30+SUM%10);        //顯示結(jié)果的最后一位在0x4f的位置
                                SUM=SUM/10;                            //取前面的結(jié)果數(shù)據(jù)   
                            }
                    lcd1602_write_data(0x3d);                        //寫等于號
                }
這是程序中乘法的部分


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1027319 發(fā)表于 2022-5-24 16:30 | 只看該作者
#include "keycode.h"

#define Key_Net  P3
#define uchar unsigned char
uchar code number[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2f-0x30 };
uchar value;                                                          
uchar fuhao,TABE;         //fuhao 儲存+,-,*,/,clr,=        ;TABE 標識 1是符0是數(shù)字,Table_A,Table_B 儲存輸入的兩個數(shù)字
float Table_A,Table_B;
long SUM,YU;
void delay10ms()   //誤差 0us
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=248;a>0;a--);
}

void Init()              //main中用到的初始化
{
        fuhao=0;
        TABE=0;
        Table_A=0;
        Table_B=0;
}
void Keydown()
{                                                                  
        char a,i;
        i=0;
        Key_Net=0x0f;
        if(Key_Net!=0x0f)
        {
                delay10ms();
                if(Key_Net!= 0x0f)
                {
                        Key_Net=0x0f;                  // 行列掃描 先進行列掃描,確定是那一列按下
                        switch(Key_Net)
                        {
                                case(0x07) : value = 0 ;break;                  //第一列
                                case(0x0b) : value = 1 ;break;                 //第二列
                                case(0x0d) : value = 2 ;break;                 //第三列
                                case(0x0e) : value = 3 ;break;                 //第四列
                        }       
               
                        Key_Net = 0xf0;
                        delay10ms();
                        switch(Key_Net)                   // 行列掃描 再進行行掃描,確定是那一行按下
                        {
                                case(0x70) : value = value+0 ;break;  //第一行 就是0 1 2 3個按鍵按下
                                case(0xb0) : value = value+4 ;break;  //第二行
                                case(0xd0) : value = value+8 ;break;  //第三行
                                case(0xe0) : value = value+12 ;break; //第四行 這里確定的是哪一個按鍵按下,還沒對按鍵賦值
                        }
                        while((a<100)&&(Key_Net!=0xf0))
                        {
                                delay10ms();
                                a++;
                        }
                                a=0;
                }                                       
                    if((0<=value)&&(value<=2)||(4<=value)&&(value<=6)||(8<=value)&&(value<=10)||value==12)        //根據(jù)自己的鍵盤設(shè)計的數(shù)據(jù)這一條語句 對應(yīng)的是0-9這幾個數(shù)子對應(yīng)的按鍵
                        {
                                TABE=0;
                                if(fuhao==0)
                                {
                                        Table_A=Table_A*10+number[value];         //按下一位儲存在個位,再按下一位原來的數(shù)*10加上剛按下的值

                                }
                                if((fuhao>0))
                                {
                                        Table_B=Table_B*10+number[value];         //當有符號位按下后面的值儲存在Table_B中

                                }
                                        lcd1602_write_data(0x30+number[value]);        //顯示0-9中按下的值
                        }
                       
                        if(value==3)  //  也就是數(shù)組number中的第三位        鍵盤按下+ 都可以寫成SWITCH語句
                        {
                                  TABE=1;
                                fuhao=1;  // +號標志
                                lcd1602_write_data(0x30+number[value]);          //顯示+號 value==3 就是數(shù)組中的 0x2b-0x30 在LCD中0x2b就是+號
                        }

                        if(value==7)  //  也就是數(shù)組number中的第7位     鍵盤按下-       
                        {
                                  TABE=1;
                                fuhao=2;  // -號標志
                                lcd1602_write_data(0x30+number[value]);           //同理顯示-號               
                        }

                        if(value==11)  // 也就是數(shù)組number中的第11位   鍵盤按下*
                        {
                                  TABE=1;
                                fuhao=3;   //  *號標志
                                lcd1602_write_data(0x30+number[value]);           //同理顯示*號       
                        }

                        if(value==15)  //  鍵盤按下/
                        {
                                  TABE=1;
                                fuhao=4;   //  /號標志
                                lcd1602_write_data(0x30+number[value]);                //同理顯示/號       
                        }

                        if(value==13)  //  鍵盤按下CLR
                        {
                                  TABE=1;
                                fuhao=5;   // CLR標志
                                lcd1602_write_cmd(0x30+number[value]);
                                fuhao=0;
                                TABE=0;
                                Table_A=0;
                                Table_B=0;                       
                        }

                        if(value==14) //  鍵盤按下= 下面直接對各種特殊符號對應(yīng)的情況進行處理
                        {
                                if(fuhao==1)        //加法
                                {       
                                        SUM=Table_A+Table_B;         //計算SUM
                                        lcd1602_write_cmd(0Xcf); //從第二行最右邊開始顯示
                                        lcd1602_write_cmd(0X04); //控制指針左移
                                        while(SUM!=0)                         //一位一位顯示 先從num的最低位開始
                                                        {
                                                                lcd1602_write_data(0x30+SUM%10);                //num的最后一位在0x4f的位置也就是最右邊
                                                                SUM=SUM/10;                                                        //再取一位的結(jié)果數(shù)據(jù)       
                                                        }
                                        lcd1602_write_data(0x3d);                                                //寫等于號
                                }

                                if(fuhao==2)        //減法
                                {       
                                        if(Table_A>Table_B)                        //先判斷A B大小
                                        {
                                                 SUM=Table_A - Table_B;
                                        }
                                        else
                                        {
                                                SUM=Table_B - Table_A;
                                        }
                                                lcd1602_write_cmd(0Xcf);  //從第二行最右邊開始顯示
                                                lcd1602_write_cmd(0X04);  //控制指針左移
                                                while(SUM!=0)                       //一位一位顯示 先從num的最低位開始
                                                                {
                                                                        lcd1602_write_data(0x30+SUM%10);                //顯示結(jié)果的最后一位在0x4f的位置
                                                                        SUM=SUM/10;                                                        //取前面的結(jié)果數(shù)據(jù)       
                                                                }
                                                if(Table_A < Table_B)        //如果A<B 在結(jié)果顯示完后需要給一個負號
                                                {
                                                        lcd1602_write_data(0x2d);   //lcd顯示負號
                                                }
                                                lcd1602_write_data(0x3d);           //寫等于號
                                }

                                if(fuhao==3)        //乘法
                                {       
                                        SUM=(Table_A)*(Table_B);
                                        lcd1602_write_cmd(0Xcf);                         //第二行最后一位顯示
                                        lcd1602_write_cmd(0X04);                         //指針左移
                                        while(SUM!=0)                         //一位一位顯示
                                                        {
                                                                lcd1602_write_data(0x30+SUM%10);                //顯示結(jié)果的最后一位在0x4f的位置
                                                                SUM=SUM/10;                                                        //取前面的結(jié)果數(shù)據(jù)       
                                                        }
                                        lcd1602_write_data(0x3d);                                                //寫等于號
                                }

                                if(fuhao==4)        //除法         重點!
                                {
                                        uchar i;
                                        SUM=((Table_A/Table_B)*1000);                  //sum放大1000倍        例如 sum=42/2689=0.01561919  放大1000倍 sum=15
                                        lcd1602_write_cmd(0Xcf);                          //lcd從第二行最后一位顯示
                                        lcd1602_write_cmd(0X04);                          //指針左移
                                        if((Table_A < Table_B)&&SUM<100)          //當兩個數(shù)的值相差不到前面的數(shù)字的100倍
                                                                              //例如 42和2689 2689<4200 計算器可以算出準確結(jié)果  也可以試著自己直接改一改
                                        {
                                        while(SUM!=0)                         //一位一位顯示 例如 sum=42/2689=0.01561919  放大1000倍 sum=15
                                                        {
                                                                i++;
                                                                lcd1602_write_data(0x30+SUM%10);                //顯示結(jié)果的最后一位在0x4f的位置
                                                                SUM=SUM/10;                                                        //SUM取余
                                                                if(i==2)                                                        //此時已經(jīng)輸出了15這兩個數(shù)字 正確的值為0.01561919
                                                                {
                                                                lcd1602_write_data(0x30);                        //寫一個0
                                                                lcd1602_write_data(0x2e);                        //寫小數(shù)點
                                                                i=0;
                                                                }                               
                                                        }
                                        }
                                       
                                        if(Table_A < Table_B)
                                        {
                                                lcd1602_write_data(0x30);                                         //上面寫完小數(shù)點再寫一個0 輸出0.015
                                        }
                                       
                                        if((Table_A > Table_B))         //A>B就沒有那么多事情了 例如1589/33=48.1515  sum放大1000倍 sum=48151
                                        {
                                        while(SUM!=0)                         //SUM*1000是保留三位小數(shù)
                                                        {
                                                                i++;
                                                                lcd1602_write_data(0x30+SUM%10);                //顯示結(jié)果的最后一位在0x4f的位置
                                                                SUM=SUM/10;
                                                               
                                                                if(i==3)                                                        //i=3的時候就該輸出小數(shù)點了 因為小數(shù)部分已經(jīng)輸出完畢
                                                                {
                                                                lcd1602_write_data(0x2e);                        //輸出小數(shù)點
                                                                }
                                                        }
                                        }       
                                        if(Table_A < Table_B)
                                        {
                                        lcd1602_write_data(0x30);                                           //上
                                        }

                                        lcd1602_write_data(0x3d);                                                //最后寫等于號
                               
                                }
                        }         

        }       
}
這是原程序
回復

使用道具 舉報

板凳
ID:883242 發(fā)表于 2022-5-24 16:58 | 只看該作者
這么明顯的先顯示個位都看不出來?

顯示了個位,把整個數(shù)除10,原來的十位變成了個位,繼續(xù)顯示個位。
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合九九 | 国产免费视频 | 日韩欧美一二三区 | 国产精品久久久亚洲 | 亚洲自拍偷拍视频 | 精品一区二区三区不卡 | 日本三级网 | 久久精品亚洲国产 | 亚洲欧洲日韩精品 中文字幕 | 免费能直接在线观看黄的视频 | 草草草草视频 | 一区二区久久电影 | 成人区精品一区二区婷婷 | 日本高清在线一区 | 玖操| 极情综合网 | 亚洲一区二区久久 | 欧美日韩国产中文字幕 | 午夜视频精品 | 久久久久久久久久久久亚洲 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | а√中文在线8 | 日韩欧美字幕 | 黄色一级大片在线观看 | 午夜欧美一区二区三区在线播放 | 国产1区 | 免费色网址 | 精品丝袜在线 | 91久久| 久久毛片| 久久一起草 | www.色婷婷| 精品99爱视频在线观看 | 欧美日韩在线视频观看 | 久久久亚洲 | 国产成人在线视频 | 伊人久久国产 | 国产精品久久精品 | 免费人成在线观看网站 | 久久91| 国产极品91 |