首页 > 其他分享 >51单片机【点阵屏】

51单片机【点阵屏】

时间:2023-12-24 22:33:06浏览次数:29  
标签:显存 SER SCK 引脚 51 LedMatrix 单片机 RCK 点阵

51单片机【点阵屏】

​ 我们有一个8*8的点阵屏,里面是64个发光二极管。

​ 二极管的阳极我们给它接了74HC595的八个输出引脚,阴极接P00-P07引脚。

​ 74HC595的八个引脚控制八个行,P00-P07控制八个列,行为1,列为0 对应的那个LED灯会亮,其他的组合不行。

​ 如何让74HC595的八个输出引脚输出不同的值,我们需要查看手册。

​ 查看手册得知:这个芯片对我们有用的输入管脚有三个,一个SCK当它下降沿时使得移位寄存器右移一位,一个RCK当它下降沿时将移位锁存器里的值放到存储寄存器并输出到引脚上,一个SER将每次右移后前面缺出的位置补上它。移位前,移位寄存器每位都是0,通过SER给它加上1。

​ 我们的板子上,P34控制SCK,P35控制RCK,P36控制SER。

​ 我们想要在点阵屏绘制一幅图片,我们需要定义三个函数,一个初始化,一个写显存(这里的显存是个数组,接收外部传过来的,一个元素为一行的点亮的灯),最后一个函数是让通过595芯片的两个下降沿一行一行地控制,每一行有效时,把对应的显存赋给P0,就能让对应的亮起来。如果想使用回调函数,则每行一毫米刷新。以下是用定时器实现的代码。

#include "Int_LedMatrix.h"

// 移位寄存器时钟(上升沿有效,右移)
#define SCK P34
// 数据寄存器时钟
#define RCK P35
// IO线,补的位
#define SER P36

static u8 s_buffer[8] = 0;
static u8 s_pc = 0;

void LedMatrix_Init()
{
    SCK = 0;
    RCK = 0;
    SER = 1;
}

void LedMatrix_SetPic(u8 *pic)
{
    u16 i;
    for (i = 0; i < 8; i++) {
        s_buffer[i] = pic[i];
    }
}

void LedMatrix_Refresh()
{

    s_pc = s_pc>=8 ? SER=1, 0 : s_pc;
    // 列引脚
    P0 = 0xff;
    // 上升沿
    SCK = 1;
    RCK = 1;
    // 列引脚
    P0 = ~s_buffer[s_pc++];
    // Delay1ms(1);
    // 关掉补位1
    SER = 0;
    // 
    SCK = 0;
    RCK = 0;


}
// 主函数
#include "Int_LedMatrix.h"

// 下面的两个数组可以合并为一个,就是每次+8
// 这个没有实现什么效果,一个乱的图
static u8 s_pic[] = {1, 2, 4, 8, 16, 32, 64, 128};
static u8 s_pic1[] = {2, 12, 34, 58, 166, 372, 694, 1028};

void main() {
    LedMatrix_Init();
    // LedMatrix_SetPic(s_pic);
    Dri_Timer0_Init();
    Dri_Timer0_RegisterCallback(LedMatrix_Refresh);
    while(1){
        LedMatrix_SetPic(s_pic);
        Delay1ms(500);
        LedMatrix_SetPic(s_pic1);
        Delay1ms(200);
    }
}

如果一个数组里每8个是一个图,想让它流动起来,可以定义函数,让它从第六行图赋给第七行,第五行图赋给第四行...... 第0行补传过来的值,这个传过来的值就是数组(这个数组是main中的数组,不是显存)的下一个元素,这样的话,刚开始屏幕为0(显存就为0),也可以从第一行数组的第一个往下刷,刷完一次后,可以再刷几次空行,然后重复(这个重复是指主函数中的while(1)。)代码略。

标签:显存,SER,SCK,引脚,51,LedMatrix,单片机,RCK,点阵
From: https://www.cnblogs.com/wangsiyaoa/p/17924985.html

相关文章

  • WN517GP无线网卡
    WN517Gp是一款高功率无线网卡,其传输距离可达到1000米。这款网卡配备了可拆卸的外部天线,用户可以根据需求更换天线以获取更好的信号。WN517Gp遵循IEEE802.11b/g标准,是一款无线USBLAN卡。然而,有用户反映其芯片为8187L的WN517Gp发热过于严重,不加散热的话可能在短时间内死机。在选择使......
  • ABC251G
    提供一个本质相同,但是不需要会向量也能做,而且很好想的方法。首先发现凸包点少,也就意味着边少,考虑从边的方向寻找突破口。考虑一个凸包的本质:若干个直线划分出若干个半平面,它们的交即为这个凸包。如果一个点对于每一条直线,都在于凸包的同侧,那么这个点就在这个凸包内。这样直接暴......
  • 51 单片机【外部中断、定时器中断、回调函数】
    51单片机【外部中断、定时器中断、回调函数】​ 这里的外部中断类似监听器,时时刻刻监视某引脚的电平变化;这里的定时器中断类似于定时任务,可以定时执行某函数;这里将回调函数和中断结合起来,案例里有点设计模式的味道(忘了哪个了,也可能就是感觉,关于高层不能调用低层的解决),也有点函数......
  • 515. 在每个树行中找最大值(中)
    目录题目题解:BFS题目给定一棵二叉树的根节点root,请找出该二叉树中每一层的最大值。题解:BFSBFS遍历每一层,在每一层每一个元素出队的时候更新最大值,保存每一层的最大值,最后返回即可。classSolution:deflargestValues(self,root:Optional[TreeNode])->List[in......
  • 513. 找树左下角的值(中)
    目录题目题解:BFS题解:BFS优化题目给定一个二叉树的根节点root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。题解:BFSBFS,队列的最后一层的第一个结点classSolution:deffindBottomLeftValue(self,root:Optional[TreeNode])->int:......
  • Codeforces Round 651 (Div. 2)C. Number Game(数学思维数论)
    C.NumberGame我们考虑那些状态是必胜态我的回合时n为奇数(除1外),直接除以n则必胜下面偶数的情况稍复杂偶数我们能进行的操作只有除以一个奇数,需要考虑怎么把当前状态变为对手的必败态偶数一定含2的因子,\(n=2^k*q,q为奇数\)当\(k=1时如果q\)是一个质数那么只能除一次q这样......
  • 1251. 平均售价
    1.题目介绍表:\(Prices\)+---------------+---------+|ColumnName|Type|+---------------+---------+|product_id|int||start_date|date||end_date|date||price|int|+---------------+---------+(product_......
  • 世微 AP5186 LED降压型恒流芯片 三功能全亮 暗亮 爆闪SOT23-6
    产品描述AP5186是一款集成三功能的开关降压型LED恒流驱动器。通过电源的接通与关断可实现功能之间的切换:100%全亮→25%暗亮→爆闪。AP5186内部还集成了VDD稳压管,过温保护电路,短路保护电路等,用少量的元器件即可提供优良的系统可靠性。AP5186采用SOT23-6封装,固定关断时间......
  • 代码随想录算法训练营第八天 | 344.反转字符串,541.反转字符串II,卡码网:54.替换数字,151.
    一、344.反转字符串题目链接:LeetCode344.反转字符串学习前:思路:相向指针。left=0,right=length-1,不停交换left和right的值时间复杂度:O(n)空间复杂度:O(1)学习后:了解swap函数通过位运算实现的方式二、541.反转字符串II题目链接:LeetCode541.反转字符串II学习前:思路:ne......
  • springboot051医院管理系统-计算机毕业设计源码+LW文档
    一、立题依据(研究的目的与意义及国内外现状):现如今,互联网的广泛普及与应用,标志着信息化的时代已经到来,管理信息化行业在生活中占据着越来越重要的地位,信息化的服务与管理,大大简化了传统的管理模式,很大程度上,改善了使得人们的生活水平和工作方式。简单的来说医院管理信息化的形式非......