首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

,运算测试正常的程序,为啥在单片机中会输出异常

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

求助,运算测试正常的程序,为啥在单片机中会输出错误
本帖最后由 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
[其他解释]
你这是驱动数码管显示吗。

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

要延时,看起来才对。

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

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

要延时,看起来才对。

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


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

热点排行