void delay(int i)
{
while(i–);
}
如果int改成char就不行,我试了一晚上才发现这个错误
#include "reg52.h"
#include "intrins.h"
sbit SER=P3^4 ;
sbit rCLK=P3^5;
sbit SRCLK=P3^6;
void delay(int i)
{
while(i--);
}
void hc595(char dat)
{ char i;
SRCLK = 1;
rCLK = 1;
for(i=0;i<8;i++)
{
SER=dat>>7;
SRCLK=0;
_nop_();
SRCLK=1;
dat=dat<<1;
}
rCLK=0;
_nop_();
rCLK=1;
}
void main()
{
// char i;
char led;
led=~0x01;
/*while(1)
{ for(i=0;i<8;i++)
{hc595(led);
led=~(0x01<<i); //要加括号
delay(50000);
}
} */
while(1)
{
hc595(led);
led=_crol_(led,1);
delay(50000);
}
}
两种方式
#include "reg52.h"
#include "intrins.h"
sbit SER=P3^4 ;
sbit rCLK=P3^5;
sbit SRCLK=P3^6;
char code jing[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff};//显示0~F的值
void delay(int i)
{
while(i--);
}
void hc595(char dat)
{ char i;
SRCLK = 1;
rCLK = 1;
for(i=0;i<8;i++)
{
SER=dat>>7;
SRCLK=0;
_nop_();
SRCLK=1;
dat=dat<<1;
}
rCLK=0;
_nop_();
rCLK=1;
}
void main()
{
char i;
char led;
led=~0x3f;
while(1)
{ for(i=0;i<17;i++)
{hc595(led);
led=~jing[i]; //要加括号
delay(50000);
}
}
/* while(1)
{
hc595(led);
led=_crol_(led,1);
delay(50000);
} */
}
这个是数码管显示。注意,我多定义了一个,从0到f是17个数,但是最后一次循环就会摸到jing[18],如果你不定义,他就会黑屏。两种解决方式,如果要求严格,那就定义17位数组,循环16次,这样就不会有卡顿。不严格就循环17次,最后一个就会卡顿一下,也就是显示两个同样的,或者你随便输入一个进去。