串转并74hc595

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次,最后一个就会卡顿一下,也就是显示两个同样的,或者你随便输入一个进去。

发布了20 篇原创文章 · 获赞 4 · 访问量 2467

猜你喜欢

转载自blog.csdn.net/qq_41909909/article/details/102787841
今日推荐