标题:
自己写个程序发现运行不了找不到问题求指导
[打印本页]
作者:
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