74HC595驱动8*8点阵屏

该项目使用国产M0核单片机,驱动方式类似于stm32平台;点阵驱动芯片:74HC595;点阵屏:8*8

1、74HC595及8*8点阵驱动原理图如下

74HC595驱动8*8点阵屏_第1张图片

       74HC595是移位寄存器,它具有输出锁存和输出使能控制端,可以很方便的发挥出串口转并口的功能,可以方便的用于扩展单片机的IO口。74HC595的主要时钟参数如下

74HC595驱动8*8点阵屏_第2张图片

 

2、8*8的点阵原理如下

74HC595驱动8*8点阵屏_第3张图片

 

        图为8×8点阵LED外观及引脚图,只要其对应的RO、CO轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则RO(1)=1,CO(1)=0即可。 

        LED一般采用扫描式显示,主要分为三种方式:点扫描、行列扫描;扫描时注意视觉暂留的时间(度娘表示是0.1~0.4,这里可以尽可能的调小),即扫描的间隔。

        这里采用行列扫描的方式。所谓行扫描即是先让第一行全部置于有效位,再送所需的列码,接着再按同样的方法依次扫描所有行,并同时送去所有所需的相应列码即可。所谓列扫描即是先让第一列全部至于有效位,再送所需的行码,接着再按同样的方法依次扫描所有列,并同时送去所需的相应行码即可。

 

3、点阵取模工具

     PCtoLCD2002是常用点阵取模软件,主要配置参数如下

   (1)阴码和阳码

     如果行接的是二极管的阳极,列接的是二极管的阴极,则采用行扫描时列取模方式即为阳码,采用列扫描时行的取模方式即为阴码。对应的若行接二极管阴极,列接二极管阳极,则采用行扫描时取模方式为阴码,采用列扫描时取模方式为阳码。

   (2)逆向和顺向

      一、若采用行扫描,当点阵横向的数据位从左到右依次为高位到低位时,此时的取模方式为顺向取模,反之则为逆向取模;

      二、若采用列扫描,当点阵纵向的数据位从上到下依次为高位到低位时,此时的取模方式为顺向取模,反之为逆向取模。

      总之:顺向即是指点阵数据位上高下低,左高右低

      本项目采用行扫描的方式实现,通过该取模工具,可以实现字母,图片,汉字的显示,由于是8*8的点阵,显示不是很细腻,可以根据显示图片做调整,生成优化。

74HC595驱动8*8点阵屏_第4张图片

 

4、驱动如下,这里采用行扫描的方式

(1)引脚配置

#define  STCLK_1 LED_74HC595_STCLK_GPIO_PORT->DOSET = LED_74HC595_STCLK_GPIO_PIN
#define  STCLK_0 LED_74HC595_STCLK_GPIO_PORT->DOCLR = LED_74HC595_STCLK_GPIO_PIN

#define  SHCLK_1 LED_74HC595_SHCLK_GPIO_PORT->DOSET = LED_74HC595_SHCLK_GPIO_PIN
#define  SHCLK_0 LED_74HC595_SHCLK_GPIO_PORT->DOCLR = LED_74HC595_SHCLK_GPIO_PIN

#define  DIN_1   LED_74HC595_DIN_GPIO_PORT->DOSET = LED_74HC595_DIN_GPIO_PIN
#define  DIN_0   LED_74HC595_DIN_GPIO_PORT->DOCLR = LED_74HC595_DIN_GPIO_PIN

(2)向74HC595的移位寄存器发送数据,根据首部的时钟参数,对于低速的单片机,可以不需要延迟

void led_74hc595_send_byte(uint8_t data)
{
	uint8_t i=0;
	for(i=0;i<8;i++)
	{	
		if(data & 0x80)
		{
			DIN_1;
		}
		else
		{
			DIN_0;
		}
		data<<=1;
		SHCLK_0;
//		delay_us(1);
		SHCLK_1;
//		delay_us(1);
	}
}

(3)74HC595 存储器输出

void led_74hc595_output(void)
{
	STCLK_0;
//	delay_us(1);
	STCLK_1;
//	delay_us(1);
}

(4)逐行扫描

void led_74hc595_display(uint8_t * data)
{
	uint8_t row = 0;
	for(row = 0;row < 8;row++)
	{
	    led_74hc595_send_byte(LED_ROW[row]);//行
	    led_74hc595_send_byte(data[row]);//列
	    led_74hc595_output();
	}

}

 

示例显示一个心形图标,如下所示

74HC595驱动8*8点阵屏_第5张图片

 

你可能感兴趣的:(STM32,嵌入式,嵌入式,单片机,stm32,arm)