标题: 51单片机问题求大佬解答,程序运行之后led不亮 [打印本页]

作者: 一笔长空    时间: 2023-3-14 20:57
标题: 51单片机问题求大佬解答,程序运行之后led不亮
主函数是这样:
void main()
{        while(1)
        {
                c=255*200;
                if(c==51000)
                {led=1;}
        }
}
运行之后led不亮,但是我把算式改成c=255*100;if(c==25500)之后就没问题,c定义的是long int ,为什么相乘的数大了就不行,小了就可以,折腾一天了百度遍了都不知道答案,求大佬解答,感谢,用的是51单片机stc15f204ea

作者: 一笔长空    时间: 2023-3-14 23:10
换成了unsigned long c也不行,我人快傻了,难道单片机不支持运算这么大的数字吗?
作者: 一笔长空    时间: 2023-3-14 23:14
换成了unsigned long c不行,但unsigned int c可以,为什么无符号长整形反而不行,不理解,而且unsigned int在这个数行,换一个小一点的数相乘又不行了,55555
作者: 非凡科技    时间: 2023-3-15 08:55
硬件对不?直接用LED=1能否点亮?
作者: lkc8210    时间: 2023-3-15 09:19
本帖最后由 lkc8210 于 2023-3-15 09:22 编辑
  1. void main()
  2. {        while(1)
  3.         {
  4.                 c=(long int)255*200;
  5.                 if(c==51000)
  6.                 {led=1;}
  7.         }
  8. }
复制代码



作者: xuyaqi    时间: 2023-3-15 09:39
只有在c==51000时瞬间亮一下,你能看见吗。
作者: glinfei    时间: 2023-3-15 10:09
加一句试试
{led=1;
  c=0;}
作者: 一笔长空    时间: 2023-3-15 11:18
非凡科技 发表于 2023-3-15 08:55
硬件对不?直接用LED=1能否点亮?

前面定义了LED直接赋1可以亮
作者: 一笔长空    时间: 2023-3-15 11:19
xuyaqi 发表于 2023-3-15 09:39
只有在c==51000时瞬间亮一下,你能看见吗。

赋1后没再赋0应该一直是1吧
作者: xuyaqi    时间: 2023-3-15 14:33
一笔长空 发表于 2023-3-15 11:19
赋1后没再赋0应该一直是1吧

1 c 有特殊含义不能做变量名要改。
2 255不强制转换编译器会作负数处理,改一下:
cc=(long)255*200;
if(cc==51000)
{  led=1;        }
作者: 一笔长空    时间: 2023-3-15 17:01
xuyaqi 发表于 2023-3-15 14:33
1 c 有特殊含义不能做变量名要改。
2 255不强制转换编译器会作负数处理,改一下:
cc=(long)255*200;
...

谢谢您的解答,我试一下
作者: xuyaqi    时间: 2023-3-15 17:20
一笔长空 发表于 2023-3-15 17:01
谢谢您的解答,我试一下

还有一种办法,在255后面加 U ,L ,F说明数据类型:
cc=255u*200;
if(cc==51000)
{  led=1; }




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1