1、74HC595及88点阵驱动事理图如下
74HC595是移位寄存器,它具有输出锁存和输出使能掌握端,可以很方便的发挥出串口转并口的功能,可以方便的用于扩展单片机的IO口。74HC595的紧张时钟参数如下
2、88的点阵事理如下
图为8×8点阵LED外不雅观及引脚图,只要其对应的RO、CO轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则RO(1)=1,CO(1)=0即可。
LED一样平常采取扫描式显示,紧张分为三种办法:点扫描、行列扫描;扫描时把稳视觉暂留的韶光(度娘表示是0.1~0.4,这里可以尽可能地调小),即扫描的间隔。
这里采取行列扫描的办法。所谓行扫描即是先让第一行全部置于有效位,再送所需的列码,接着再按同样的方法依次扫描所有行,并同时送去所有所需的相应列码即可。所谓列扫描即是先让第一列全部至于有效位,再送所需的行码,接着再按同样的方法依次扫描所有列,并同时送去所需的相应行码即可。
3、点阵取模工具
PCtoLCD2002是常用点阵取模软件,紧张配置参数如下
(1)阴码和阳码
如果行接的是二极管的阳极,列接的是二极管的阴极,则采取行扫描时列取模办法即为阳码,采取列扫描时行的取模办法即为阴码。对应的若行接二极管阴极,列接二极管阳极,则采取行扫描时取模办法为阴码,采取列扫描时取模办法为阳码。
(2)逆向和顺向
一、若采取行扫描,当点阵横向的数据位从左到右依次为高位到低位时,此时的取模办法为顺向取模,反之则为逆向取模;
二、若采取列扫描,当点阵纵向的数据位从上到下依次为高位到低位时,此时的取模办法为顺向取模,反之为逆向取模。
总之:顺向即是指示阵数据位上高下低,左高右低
本项目采取行扫描的办法实现,通过该取模工具,可以实现字母,图片,汉字的显示,由于是88的点阵,显示不是很细腻,可以根据显示图片做调度,天生优化。
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();}}
示例显示一个心形图标,如下所示