读书人

运算测试正常的程序为啥在单片机中

发布时间: 2012-12-14 10:33:07 作者: rapoo

求助,运算测试正常的程序,为啥在单片机中会输出错误
本帖最后由 loongsking 于 2012-11-07 18:21:45 编辑

#include <reg52.h>
#define MAX 99
void main()
{
int k;
unsigned int p;
int a[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //P2 选择位
int b[10] ={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //P1 输出段
while(1)
{
for(p = 0;p < MAX+1;p++)
{
for(k = 0;k <10000;k++)
{
if(p > 999) P2 = a[4],P1 = b[p/1000%10];
if(p > 99) P2 = a[5],P1 = b[p/100%10];
if(p > 9) P2 = a[6],P1 = b[p/10%10];
P2 = a[7],P1 = b[p%10];
}
}
}
}

[最优解释]
if(p > 999) P2 = a[4],P1 = b[p/1000%10];
if(p > 99) P2 = a[5],P1 = b[p/100%10];
你程序里是输出P1和P2,P2没有问题,但是P1有小问题。
P最大是100,p/1000就是0了,在余10.还是0.
p/100%10也是0,
你的max有没有定义错确定是99?
程序中的测试只是确定你程序语法有没有问题,而不是功能的问题。
[其他解释]

if(p > 999) P2 = a[4],P1 = b[p/1000%10];
if(p > 99) P2 = a[5],P1 = b[p/100%10];
if(p > 9) P2 = a[6],P1 = b[p/10%10];
P2 = a[7],P1 = b[p%10];

修改为

if(p > 999) P2 = a[4],P1 = b[p/1000%10];
else if(p > 99) P2 = a[5],P1 = b[p/100%10];
else if(p > 9) P2 = a[6],P1 = b[p/10%10];
else P2 = a[7],P1 = b[p%10];

[其他解释]
接分的来了!!!
[其他解释]
来接分了
[其他解释]
举个例子来说,PC机上int是32位,单片机上一般16位。

还有你的单片机能跑乘除法吗?
[其他解释]
加了个小延迟正常了
[其他解释]
你没看明白
引用:
if(p > 999) P2 = a[4],P1 = b[p/1000%10];
if(p > 99) P2 = a[5],P1 = b[p/100%10];
你程序里是输出P1和P2,P2没有问题,但是P1有小问题。
P最大是100,p/1000就是0了,在余10.还是0.
p/100%10也是0,
你的max有没有定义错确定是99?
程序中的测试只是确……

[其他解释]
来人啊,我要撒分
[其他解释]

if(p > 999)
{
P2 = a[4];P1 = b[p/1000%10];
}
else if(p > 99)
{
P2 = a[5];P1 = b[p/100%10];}
else if(p > 9){
{
P2 = a[6];P1 = b[p/10%10];}
else
{
P2 = a[7];P1 = b[p%10];
}

------其他解决方案--------------------


引用:
C/C++ code12345if(p > 999) P2 = a[4],P1 = b[p/1000%10]; if(p > 99) P2 = a[5],P1 = b[p/100%10]; if(p > 9) P2 = a[6],P1 = b[p/10%10]; P2 = a[7],P1 = b[p%10];
修改为
C/C++ code12345if(p > 99……


不能这么改吧,在Led板上显示一排8位数字
[其他解释]
引用:
引用:
C/C++ code12345if(p > 999) P2 = a[4],P1 = b[p/1000%10]; if(p > 99) P2 = a[5],P1 = b[p/100%10]; if(p > 9) P2 = a[6],P1 = b[p/10%10]; P2 = a[7],P1 = b[p%10];
修改为
C/C++ code123……

程序一直运行最后一步
P2 = a[7],P1 = b[p%10];

[其他解释]
引用:
引用:引用:
C/C++ code12345if(p > 999) P2 = a[4],P1 = b[p/1000%10]; if(p > 99) P2 = a[5],P1 = b[p/100%10]; if(p > 9) P2 = a[6],P1 = b[p/10%10]; P2 = a[7]……


程序是要显示0-99,附加功能是可以改变MAX来显示更多,问题自己解决了,在每个if语句尾部加入一个自己写的30微秒的延迟函数
[其他解释]
引用:
举个例子来说,PC机上int是32位,单片机上一般16位。

还有你的单片机能跑乘除法吗?


能跑,学校的板子stc89c52
[其他解释]
你这是驱动数码管显示吗。

数码管一般是通过译码动态显示的。

要延时,看起来才对。

延时,是单片机里最常用的。
[其他解释]
引用:
你这是驱动数码管显示吗。

数码管一般是通过译码动态显示的。

要延时,看起来才对。

延时,是单片机里最常用的。


嗯嗯,受教了,马上自己改了试试

读书人网 >单片机

热点推荐