求助,运算测试正常的程序,为啥在单片机中会输出错误本帖最后由 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];
}
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];
}
------其他解决方案--------------------
不能这么改吧,在Led板上显示一排8位数字
[其他解释]程序一直运行最后一步
P2 = a[7],P1 = b[p%10];
[其他解释]程序是要显示0-99,附加功能是可以改变MAX来显示更多,问题自己解决了,在每个if语句尾部加入一个自己写的30微秒的延迟函数
[其他解释]能跑,学校的板子stc89c52
[其他解释]你这是驱动数码管显示吗。
数码管一般是通过译码动态显示的。
要延时,看起来才对。
延时,是单片机里最常用的。
[其他解释]嗯嗯,受教了,马上自己改了试试