找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

为什么这个单片机程序的计算答案不是显示1650

查看数: 2262 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-11-4 00:07

正文摘要:

本人刚刚学习51单片机, 做了一个显示 30 X 55 答案的小程序, 但显示的答案 不是 1650 而是 1672, 请问我错在哪里? 谢谢 (我用的是普中单片机开发板) #include<reg52.h> #include<intrins.h> sb ...

回复

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. }
复制代码



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();
                }
ID:277550 发表于 2021-11-4 12:29
取各位的代码,应该要改一下
z/1000%10//千位
z/100%10//百位
z/10%10//十位
z%10  //个位,最低位
ID:977536 发表于 2021-11-4 09:39
可能用于显示的代码出问题了
ID:908826 发表于 2021-11-4 09:11
你四位数提取每一位的计算对吗???我咋觉得不太对哎。
ID:578842 发表于 2021-11-4 09:04
查你的显示函数

无标题.jpg (205.8 KB, 下载次数: 50)

无标题.jpg

无标题1.jpg (189.26 KB, 下载次数: 46)

无标题1.jpg
ID:844772 发表于 2021-11-4 08:35
x,y定义的是char,你结果又超出255,所以答案就不可测,需要看编译器怎么翻译的,你可以通过强制类转换方式计算。
ID:752974 发表于 2021-11-4 08:22
检查一下段吗。
ID:213173 发表于 2021-11-4 06:34
计算结果本身没有错,是显示出错。你驱动数码管的段码和位码错位。把1650显示成2761,位序反后2761就成1672。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表