关于数码管的程序问题
#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^0;sbit wela=P2^1;uchar num;uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};void delayms(uint);void main(){ wela=1; P0=0x0f; wela=0; while(1) { for(num=15; num>=0; num--) { dula=1; P0=table; dula=0; delayms(500); } }}void delayms(uint xms){ uint i,j; for(i=xms; i>0; i--) for(j=110; j>0; j--);} 学了一个用数组让数码管循环显示0-f的程序,原本的for循环语句是这样的:for(num=0; num<16; num++),我想让它从f-0显示,改了一下,用proteus仿真,发现数码管从F显示到0后就无显示了,而我的理解是它应该停在显示0这个字符上,我是这样理解的,当num减到0时,表达式等于0的条件一直成立,所以for就一直循环执行大括号里的程序,num等于0对应该数组里的字符是0x3f,对应数码管0,所以我认为应该一直显示0才对,但实际上并不是,所以这点我不能理解,还请各位大神给指点迷津,谢谢!我改了一下,又发现一个问题,将for循环里的num参数改成16时,访真时发现数码管是从一个不是数字的乱码开始的,原本的0没有了,这个乱码是不是就是0?如果是0的话那这个程序为什么不是从F开始,而是从0呢,而且这个0还是显示错误的?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^0;
sbit wela=P2^1;
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint);
void main()
{
wela=1;
P0=0x0f;
wela=0;
while(1)
{
for(num=16; num>0; num--)
{
dula=1;
P0=table;
dula=0;
delayms(500);
}
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms; i>0; i--)
for(j=110; j>0; j--);
}
num=0时,num>=0也成立,uchar 0-1=255,溢出了,num>=0改成num>0
页:
[1]