51单片机——LED点阵屏
LED点阵屏
LED点阵屏原理
74HC595串转并芯片

- 跳线帽OE:OutputEnable,代表输出使能,此位必须置1该芯片才可以输出,所以跳线帽J24必须拔下来,点阵才可以被点亮。因为跳线帽相当于一根导线把VCC,OE,GND连接起来,这种情况下,OE会被GND强制拉成0。(文中第一张图J24跳线帽已拔)
- 输出端:DPa-DPh正好对应LED点阵,QH’是用来做多个led点阵级联的。
- 输入端(简写部分单词)
P34-SER:代表串行输入,我们串行输入就是把数据放到这。
P35-SCK :上升沿移位,即RCK从0-1电位变化会让数据往下移一位
P36-RCK:上升沿锁存,搬运工,即SCK从0-1电位变化会把数据搬运到芯片输出端
源代码
例程一:静态笑脸
#include <REGX52.H> #include "Delay.h" sbit RCK=P3^5; //RCLK ,上升沿锁存,搬运工 sbit SCK=P3^6; //SRCLK,上升沿移位 sbit SER=P3^4; //SER,串行输入的每个bit #define MATRIX_LED_PORT P0 / * @brief 74HC595写入一个字节 * @param Byte 要写入的字节 * @retval 无 */ void _74HC595_WriteByte(unsigned char Byte) { unsigned char i; for(i=0;i<8;i++) { SER=Byte&(0x80>>i); SCK=1;//给一个上升沿(之前是0),让他把数据往下移 SCK=0;//复位0 } RCK=1;//上升沿锁存,搬运 RCK=0;//复位0 } / * @brief LED点阵屏显示一列数据 * @param Column 要选择的列,范围:0~7,0在最左边 * @param Data 选择列显示的数据,高位在上,1为亮,0为灭 * @retval 无 */ void MatrixLED_ShowColumn(unsigned char Column,Data) { _74HC595_WriteByte(Data); MATRIX_LED_PORT=~(0x80>>Column); Delay(1); MATRIX_LED_PORT=0xFF; } void main() { SCK=0; RCK=0; while(1) { MatrixLED_ShowColumn(0,0x3C);//第一列 MatrixLED_ShowColumn(1,0x42);//第二列 MatrixLED_ShowColumn(2,0xA9); MatrixLED_ShowColumn(3,0x85); MatrixLED_ShowColumn(4,0x85); MatrixLED_ShowColumn(5,0xA9); MatrixLED_ShowColumn(6,0x42); MatrixLED_ShowColumn(7,0x3C); } } 效果展示
例程二:笑脸->平脸->哭脸
MatrixLed.h
#ifndef __MATRIX_LED_H__ #define __MATRIX_LED_H__ void MatrixLED_Init(); void MatrixLED_ShowColumn(unsigned char Column,Data); #endif
MatrixLed.c
#include
#include "Delay.h" sbit RCK=P3^5; //RCLK sbit SCK=P3^6; //SRCLK sbit SER=P3^4; //SER #define MATRIX_LED_PORT P0 / * @brief 74HC595写入一个字节 * @param Byte 要写入的字节 * @retval 无 */ void _74HC595_WriteByte(unsigned char Byte) {
unsigned char i; for(i=0;i<8;i++) {
SER=Byte&(0x80>>i); SCK=1; SCK=0; } RCK=1; RCK=0; } / * @brief 点阵屏初始化 * @param 无 * @retval 无 */ void MatrixLED_Init() {
SCK=0; RCK=0; } / * @brief LED点阵屏显示一列数据 * @param Column 要选择的列,范围:0~7,0在最左边 * @param Data 选择列显示的数据,高位在上,1为亮,0为灭 * @retval 无 */ void MatrixLED_ShowColumn(unsigned char Column,Data) {
_74HC595_WriteByte(Data); MATRIX_LED_PORT=~(0x80>>Column); Delay(1); MATRIX_LED_PORT=0xFF; }
main.c
#include
#include "Delay.h" #include "MatrixLED.h" //动画数据,三帧 unsigned char code Animation[]={
0x3C,0x42,0xA9,0x85,0x85,0xA9,0x42,0x3C, 0x3C,0x42,0xA1,0x85,0x85,0xA1,0x42,0x3C, 0x3C,0x42,0xA5,0x89,0x89,0xA5,0x42,0x3C, }; void main() {
unsigned char i,Offset=0,Count=0; MatrixLED_Init(); while(1) {
for(i=0;i<8;i++) //循环8次,显示8列数据 {
MatrixLED_ShowColumn(i,Animation[i+Offset]); } Count++; //计次延时 if(Count>15) {
Count=0; Offset+=8; //偏移+8,切换下一帧画面 if(Offset>16) {
Offset=0; } } } }
效果展示
51单片机led点阵屏动画
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212359.html原文链接:https://javaforall.net
