原创 4HC595驱动8*8点阵屏

2020-5-23 16:22 296 27 25 分类: 模拟 文集: 程序设计
74HC595驱动8*8点阵屏
置顶 菜袅1号 2020-05-19 10:00:03   52   收藏展开该项目使用国产M0核单片机,驱动方式类似于stm32平台;点阵驱动芯片:74HC595;点阵屏:8*8
1、74HC595及8*8点阵驱动原理图如下


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


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


 
        图为8×8点阵LED外观及引脚图,只要其对应的RO、CO轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则RO(1)=1,CO(1)=0即可。 
        LED一般采用扫描式显示,主要分为三种方式:点扫描、行列扫描;扫描时注意视觉暂留的时间(度娘表示是0.1~0.4,这里可以尽可能的调小),即扫描的间隔。
        这里采用行列扫描的方式。所谓行扫描即是先让第一行全部置于有效位,再送所需的列码,接着再按同样的方法依次扫描所有行,并同时送去所有所需的相应列码即可。所谓列扫描即是先让第一列全部至于有效位,再送所需的行码,接着再按同样的方法依次扫描所有列,并同时送去所需的相应行码即可。
 
3、点阵取模工具
     PCtoLCD2002是常用点阵取模软件,主要配置参数如下
   (1)阴码和阳码
     如果行接的是二极管的阳极,列接的是二极管的阴极,则采用行扫描时列取模方式即为阳码,采用列扫描时行的取模方式即为阴码。对应的若行接二极管阴极,列接二极管阳极,则采用行扫描时取模方式为阴码,采用列扫描时取模方式为阳码。
   (2)逆向和顺向
      一、若采用行扫描,当点阵横向的数据位从左到右依次为高位到低位时,此时的取模方式为顺向取模,反之则为逆向取模;
      二、若采用列扫描,当点阵纵向的数据位从上到下依次为高位到低位时,此时的取模方式为顺向取模,反之为逆向取模。
      总之:顺向即是指点阵数据位上高下低,左高右低
      本项目采用行扫描的方式实现,通过该取模工具,可以实现字母,图片,汉字的显示,由于是8*8的点阵,显示不是很细腻,可以根据显示图片做调整,生成优化。


 
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(); } } 
示例显示一个心形图标,如下所示

————————————————版权声明:本文为CSDN博主「菜袅1号」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/flaycsdn/article/details/106138918

文章评论0条评论)

登录后参与讨论
相关推荐阅读
minicaihong 2020-05-27 09:50
sprintf 格式化字符串
sprintf 格式化字符串好久没写博客了,又遇到自己觉得很傻的问题,格式化字符串还要找下定义和用法sprintf() 函数把格式化的字符串写入变量中。arg1、arg2、++ 参数将被插入...
minicaihong 2020-05-25 15:07
12T和1T的单片机
标准51是12T的,就是说12个时钟周期(晶振周期,例如12M的,周期是1/12M,单位秒),机器做一个指令度周期,刚好就是1/12M*12=1uS,常见指令例如nop就是一个周期,刚好1uS,其他的...
minicaihong 2020-05-23 10:13
stm32 一上电串口发送错误的数据
)STATUS寄存器的上电初始值有问题造成的,Usart的发送数据寄存器有一个缓冲移位寄存器。并且发送有两个状态,一个是发送数据寄存器为空,一个是移位寄存器发送完成。上电后Usart的状态寄存器的发送...
minicaihong 2020-05-23 09:14
应用用 memcpy()做串口数据接收
void CopeSerial_1_Data(unsigned char ucData){ static unsigned char ucRxBuffer[250]; static unsigned ...
minicaihong 2020-05-23 08:30
LED显示屏的接口
LED显示屏的接口形式有04接口、08接口、12接口几种,这里只介绍08接口。  08接口的管脚定义如图1所示。图1 08接口管脚定义  其中,管脚LA、LB、LC、LD表示行信号;管脚R1...
广告
EE直播间
更多
我要评论
0
27
广告
关闭 热点推荐上一条 /6 下一条