小白求助,51单片机c语言用数组,指针实现倒计时,用pretues仿真无法实现功能,大神帮我看看这段程序

#include"stc.h"#definezero0x40#defineone0xF9#definetwo0xA4#definethree0XB0#definefour... #include "stc.h"
#define zero 0x40
#define one 0xF9
#define two 0xA4
#define three 0XB0
#define four 0x99
#define five 0x92
#define six 0x82
#define seven 0xF8
#define eight 0x80
#define nine 0x90
int a[10]={zero,one,two,three,four,five,six,seven,eight,nine},*p,n;

void delay(float t)
{
unsigned int j,i;
j=t*100;
while(j--)
{
for(i=1505;i;i--);
}
}
void main()
{ *p=&a[0];
while(1)
{
for(n=0;n>10;n++)
{P1=*(p+n);
delay(0.1);}

}

}
展开
 我来答
610615623
2013-10-07 · TA获得超过709个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:263万
展开全部

程序中明显错误为三处,一一指出。

 j=t*100;t是浮点型,100为整数型,运算时候会发生隐式类型转换,按照类型转换规则进行转换,具体规则我已经忘了,说下大概,浮点型t会被转换成整形进行运算,如不进行强制类型转换则,t被转换成了我们不期望看见的数。所以运算一定发生了问题,具体自己用c语言编译器printf就知道。

关于隐式类型转换看下这个:http://www.aidianying123.net/article/?41.html


 *p=&a[0]; 指针使用错误,&a[0]确实取得了数组首地址,但是不应赋值给*p而是p,否则你的程序将会在单片机中跑飞,或者在操作系统中如windows上面出现内存不能为read字样

 

for(n=0;n>10;n++)该语句不会正确执行,因为条件不符合,应为n<10

 

正确的实例,并没有放在单片机上运行,用电脑模拟下,你可以从中提取程序格式写法和编程套路

#include<windows.h>
#include<stdio.h>

/*整理代替你的define部分 只是演示 */
int NumRegs[10]={0x40,0xF9,0xA4,0XB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void DelayMs(int iMs)
{
   while(iMs--)
   {
    /*单片机nop函数位置 或者其他*/
   }  
}
void PrintNum(iNum)
{
     /*单片机对应 P1=NumRegs[iNum]*/
}
int main(void)
{
    int num=0;
    while(1)
    {
     DelayMs(500);
     PrintNum(num++);
     if(num==9)
               num=0;
    }
 return 0;    
}

-------------------------------------------------------------------------------------------

当然以后会遇到其他情况,如三位四位的数码管显示,虽然大家都不怎么用,我还是得提及用结构体,省的写一些简单的东西,别人花好长时间才把变量对号入座。

typedef struct
{
 int Hundred;/*百位*/
 int Ten;/*十位*/
 int Abit;/*个位*/
        
}NUM_DISPALY_BUF_t;
void Fuc(NUM_DISPALY_BUF_t *p)
{
     /*.....*/
}
void main(void)
{
   NUM_DISPALY_BUF_t NumDBuf;
   /*.....*/
   Fuc(&NumDBuf);
   /*.....*/   
}
天空之鱼5141
2013-10-06
知道答主
回答量:18
采纳率:0%
帮助的人:20.1万
展开全部
改一下主函数中的
*p=&a[0]; 改成p=&a[0];或p&a;都行&a和&a[]都是指的a数组的首地址
*p是取指针指向地址的内容如x=*p
p=&a是吧a的地址存进指针变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
周黄根
2013-10-06
知道答主
回答量:17
采纳率:0%
帮助的人:11.6万
展开全部
此程序编译没有错?*p=&a[0];把这句前的*号去掉试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式