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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么這個單片機程序的計算答案不是顯示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

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

使用道具 舉報

沙發
ID:213173 發表于 2021-11-4 06:34 | 只看該作者
計算結果本身沒有錯,是顯示出錯。你驅動數碼管的段碼和位碼錯位。把1650顯示成2761,位序反后2761就成1672。
回復

使用道具 舉報

板凳
ID:752974 發表于 2021-11-4 08:22 | 只看該作者
檢查一下段嗎。
回復

使用道具 舉報

地板
ID:844772 發表于 2021-11-4 08:35 | 只看該作者
x,y定義的是char,你結果又超出255,所以答案就不可測,需要看編譯器怎么翻譯的,你可以通過強制類轉換方式計算。
回復

使用道具 舉報

5#
ID:578842 發表于 2021-11-4 09:04 | 只看該作者
查你的顯示函數

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

無標題.jpg

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

無標題1.jpg
回復

使用道具 舉報

6#
ID:908826 發表于 2021-11-4 09:11 | 只看該作者
你四位數提取每一位的計算對嗎???我咋覺得不太對哎。
回復

使用道具 舉報

7#
ID:977536 發表于 2021-11-4 09:39 | 只看該作者
可能用于顯示的代碼出問題了
回復

使用道具 舉報

8#
ID:860248 發表于 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
回復

使用道具 舉報

9#
ID:277550 發表于 2021-11-4 12:29 | 只看該作者
取各位的代碼,應該要改一下
z/1000%10//千位
z/100%10//百位
z/10%10//十位
z%10  //個位,最低位
回復

使用道具 舉報

10#
ID:860248 發表于 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();
                }
回復

使用道具 舉報

11#
ID:213173 發表于 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. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九亚洲 | 日韩在线观看中文字幕 | 国产a爽一区二区久久久 | 蜜桃视频在线观看免费视频网站www | 爱爱视频网 | 欧美亚洲国产日韩 | 日日操操操| 久久精品久久久久久 | 91精品国产日韩91久久久久久 | 日韩电影一区 | 在线免费av观看 | 欧美高清dvd | 久久国产精品免费视频 | 欧美一级欧美三级在线观看 | 亚洲欧美视频一区 | 国产网站在线免费观看 | 精品91av| 99久久国产综合精品麻豆 | 大乳boobs巨大吃奶挤奶 | 操操日 | av电影一区二区 | 亚洲精品视频在线看 | 国产激情福利 | 一区在线观看视频 | 欧美中文字幕在线 | 精品一二三区在线观看 | 亚洲精品3 | 国产美女一区二区 | 欧美456| 91n成人| 亚洲精品乱码久久久久久按摩观 | 国产精品久久久久久吹潮 | 成人一区二区视频 | 青青久久久| 91视频正在播放 | 国产在线观 | 免费午夜视频 | 国产99久久精品 | 人人干视频在线 | 国产一区二区三区四区三区四 | 亚洲精品一区二区三区蜜桃久 |