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

標題: 為什么這個單片機程序的計算答案不是顯示1650 [打印本頁]

作者: kscheang    時間: 2021-11-4 00:07
標題: 為什么這個單片機程序的計算答案不是顯示1650
本人剛剛學習51單片機, 做了一個顯示 30 X 55 答案的小程序,
但顯示的答案 不是 1650 而是 1672,
請問我錯在哪里?
謝謝
(我用的是普中單片機開發板)

#include<reg52.h>
#include<intrins.h>


sbit HC138_A = P1^0;
sbit HC138_B = P1^1;
sbit HC138_C = P1^2;

unsigned char code smgduan[10]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0Xff};


void delay7ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=26;b>0;b--)
for(a=133;a>0;a--);
}


void main()
{
unsigned char x = 30;
unsigned char y = 55;
unsigned int z;
z = x*y;


while(1)
{
HC138_A = 1; HC138_B = 1; HC138_C = 0; P0 = smgduan[z/1000]; delay7ms();
HC138_A = 0; HC138_B = 1; HC138_C = 0; P0 = smgduan[(z%1000)/100]; delay7ms();
HC138_A = 1; HC138_B = 0; HC138_C = 0; P0 = smgduan[(z%100)/10]; delay7ms();
HC138_A = 0; HC138_B = 0; HC138_C = 0; P0 = smgduan[z%10]; delay7ms();
}
}

IMG_20211103_235121.jpg (280.41 KB, 下載次數: 64)

IMG_20211103_235121.jpg

C6-4.pdf

45.29 KB, 下載次數: 5


作者: wulin    時間: 2021-11-4 06:34
計算結果本身沒有錯,是顯示出錯。你驅動數碼管的段碼和位碼錯位。把1650顯示成2761,位序反后2761就成1672。
作者: munuc_w    時間: 2021-11-4 08:22
檢查一下段嗎。
作者: glinfei    時間: 2021-11-4 08:35
x,y定義的是char,你結果又超出255,所以答案就不可測,需要看編譯器怎么翻譯的,你可以通過強制類轉換方式計算。
作者: wps10025    時間: 2021-11-4 09:04
查你的顯示函數

無標題.jpg (205.8 KB, 下載次數: 50)

無標題.jpg

無標題1.jpg (189.26 KB, 下載次數: 46)

無標題1.jpg

作者: 13205495918    時間: 2021-11-4 09:11
你四位數提取每一位的計算對嗎???我咋覺得不太對哎。
作者: NCUTER    時間: 2021-11-4 09:39
可能用于顯示的代碼出問題了
作者: kscheang    時間: 2021-11-4 12:22
#include<reg52.h>
#include<intrins.h>

sbit HC138_A = P1^0;
sbit HC138_B = P1^1;
sbit HC138_C = P1^2;

unsigned char code smgduan[10]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0Xff};

void delay7ms(void)   //誤差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=26;b>0;b--)
            for(a=133;a>0;a--);
}

void main()
{
        unsigned int x = 32;
        unsigned int y = 54;
        unsigned int z;
        z = x*y;                 //答案 1728

       
        while(1)
        {
        P0 = 0X00;
        HC138_A = 0; HC138_B = 0; HC138_C = 0; P0 = smgduan[z/1000]; delay7ms();
        }
}

謝謝各位
這次我更加混亂了
我用另一個乘法公式, 答案應該是 1728
我就顯示 千位數, 應該顯示 1的, 但為什么顯示 2?
是 四舍五入 嗎? 如何解決呢?

IMG_20211104_121914.jpg (258.05 KB, 下載次數: 47)

IMG_20211104_121914.jpg

作者: devcang    時間: 2021-11-4 12:29
取各位的代碼,應該要改一下
z/1000%10//千位
z/100%10//百位
z/10%10//十位
z%10  //個位,最低位

作者: kscheang    時間: 2021-11-4 13:09
謝謝
但修改了還是顯示 2

                while(1)
                {
                        P0 = 0X00;
                        HC138_A = 0; HC138_B = 0; HC138_C = 0; P0 = smgduan[z/1000%10]; delay7ms();
                }
作者: wulin    時間: 2021-11-4 13:32
kscheang 發表于 2021-11-4 13:09
謝謝
但修改了還是顯示 2


已經明確的告訴你問題出在段碼和位碼,還在瞎折騰。數組前面少了0x3f,后面多了0xff。位碼低位高位順序反了。
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. sbit HC138_A = P1^0;
  4. sbit HC138_B = P1^1;
  5. sbit HC138_C = P1^2;

  6. unsigned char code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  7. void delay7ms(void) //誤差 0us
  8. {
  9. unsigned char a,b,c;
  10. for(c=1;c>0;c--)
  11. for(b=26;b>0;b--)
  12. for(a=133;a>0;a--);
  13. }


  14. void main()
  15. {
  16.         unsigned char x = 30;
  17.         unsigned char y = 55;
  18.         unsigned int z;
  19.         z = x*y;
  20.         while(1)
  21.         {
  22.                 HC138_A = 0; HC138_B = 0; HC138_C = 0; P0 = smgduan[z%10]; delay7ms();
  23.                 HC138_A = 1; HC138_B = 0; HC138_C = 0; P0 = smgduan[z/10%10]; delay7ms();
  24.                 HC138_A = 0; HC138_B = 1; HC138_C = 0; P0 = smgduan[z/100%10]; delay7ms();
  25.                 HC138_A = 1; HC138_B = 1; HC138_C = 0; P0 = smgduan[z/1000%10]; delay7ms();
  26.         }
  27. }
復制代碼








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