标题: 自己写个程序发现运行不了找不到问题求指导 [打印本页]

作者: zzf_028616    时间: 2014-2-9 15:53
标题: 自己写个程序发现运行不了找不到问题求指导
“动态数码管扫描”
用定时器,1秒一个数走到256然后清0从新走。基本这个意思。
下面是我写的程序:


#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,num,temp,ge,shi,bai;
uchar code duan[]={     //段数组编码    0、1、2、3、4、5、6、7、8、9、0、A、B、C、D、E、F
  0x3f,0x06,0x5b,0x4f,
  0x66,0x6d,0x7d,0x07,
  0x7f,0x6f,0x77,0x7c,
  0x39,0x5e,0x79,0x71};
//uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //位数组编码 个、十、百、千。。。
void init();
void display(uchar);
void delay(uint);
//void timer0();
void main()
{

init();

while(1)
{
   if(a==50)
   {
    a=0;
    if(num>256);
    num=0;
    num++;   
   }
   display(num);  //输入数字(0~255)
           
}
}
void init()      //初始化程序
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
P1=0xff;
P0=0x00;
num=0;
}
void timer0() interrupt 1 //中断计时器
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
a++;
}
void display(uchar temp)
{
bai=temp/100;    //显百位数
P1=0xfe;     //百位应位左数第一个数
P0=duan[bai];
delay(2);

shi=temp%100/10;   //显十位数
P1=0xfd;
P0=duan[shi];
delay(2);
ge=temp%100%10;    //显个位数
P1=0xfb;     //个位应为左数第三个数
P0=duan[ge];
delay(2);
}
void delay(uint x) //约为1ms延时.
{
uint i,j;
for(i=x;i>0;i--)
  for(j=121;j>0;j--);

}



作者: wapaja    时间: 2014-2-9 19:24
你好,你开发板的引脚是怎么定义的?
作者: ahshmj    时间: 2014-2-10 19:57
根据你的num的定义,num的最大值只能是0xff,也就是255,不可能大于255更不可能大于256,所以......
另外,语句格式也不对,应该如下:
   if(num==255)
    num=0;
    else
    num++;   

其实,就一句  num++;  就够了,其余的语句不需要。到了255后再加1就是0.
作者: Hugo801122    时间: 2014-2-21 01:01
单片机编程的话,可以debug那就用jtag单步调试,设置断点看挂在那里。没办法就加printf,看程序在哪里之后开始没打印。
作者: 雪落有声    时间: 2014-2-25 21:19
其实三楼说的已经很到位了。我只想提醒一下,if语句如果不加“{}”,后面是不能加“;”的。“;”的意思是一条完整的命令。我想你也知道,但开始时会不经意出错。我建议你即使是一条语句也加上“{}”,为以后写大程序养成好习惯。
作者: g1354483    时间: 2014-2-27 14:17
占坐观众
作者: zzf_028616    时间: 2014-3-1 00:57
ahshmj 发表于 2014-2-10 19:57
根据你的num的定义,num的最大值只能是0xff,也就是255,不可能大于255更不可能大于256,所以......
另外 ...

谢谢您的回答!




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