• 8*8点阵


    8*8点阵相当于64个led。我的点阵的原理图如下:
    8行8列,每一行有一个行控制线,连着这一行的led的阳极,每一列也同样有一个 列控制线,连着这一列的led的阴极.

    然后第一行到第8行的行控制线分别通过D7到D0管脚接在75hc595的QH到QAio口,第一列到第8列的列控制线分别接在P07到P00io口。


    因此要控制点阵还需要用的74hc595芯片,,原理图如下

    我们只需通过mcuP34 P35 P36io口向该芯片的SER,RCLK,SRCLK io口 输入数据就可以控制了,
    我觉得比较好的对芯片的解释点击打开链接


    首先SER的作用:串行数据输入口。RCLK的作用:上升沿时移位寄存器的数据复制到数据存储寄存器,下降沿时数据存储寄存器的数据不变,通常我们将RCLK置低电平,当移位结束后,在RCLK置高电平,产生一个上升沿,更新数据. SRCLK的作用:上升沿时移位寄存器的数据移位.QA->QB->QC->....->QH,下降沿时移位寄存器数据不变.
    下面给出2份代码。在操作前需要注意一定要将74HC595模块上的JP595短接片短接,并且将JOE短接片短接到GND端。


    目的:点亮第一个led灯

    #include<reg51.h>
    #include<intrins.h>
    sbit srclk=P3^6;
    sbit rclk=P3^5;	
    sbit ser=P3^4; 
    typedef unsigned char u8 ;
    
    void hc595sendbyte(u8 dat)//输入dat到595芯片
    {
    	u8 a;
    	srclk=0;
    	rclk=0;
    	for(a=0;a<8;a++)//dat的8位存到移位寄存器里
    	{
    		ser=dat>>7;//把最高位输入
    		dat<<=1;
    		srclk=1;//上升沿时,对移位寄存器进行移位(向高位移),下降沿时移位寄存器数据不变
    		_nop_();
    		_nop_();//移位需要时间,调用延时函数
    		srclk=0;
    	}
        rclk=1;//把移位寄存器的数据放到数据存储寄存器
    	_nop_();
    	_nop_();
    	rclk=0;
    }
    void main()
    {
    
    	while(1)
    	{
    		hc595sendbyte(0x80);
    		P0=0x7f;
    	}
    	
    }
    

    目的:在点阵上显示数字0,方法和数码管的动态显示类似。

    #include<reg51.h>
    #include<intrins.h>
    typedef unsigned char u8;
    typedef unsigned int  u16;
    sbit srclk=P3^6;
    sbit rclk=P3^5;
    sbit ser=P3^4;
    u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
    u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
    void hc595sendbyte(u8 dat)//输入信息到595芯片
    {
    	u8 a;
    	srclk=0;
    	rclk=0;
    	for(a=0;a<8;a++)//dat的8位存到移位寄存器里
    	{
    		ser=dat>>7;//把最高位输入
    		dat<<=1;
    		srclk=1;//上升沿时,对移位寄存器进行移位(向高位移),下降沿时移位寄存器数据不变
    		_nop_();
    		_nop_();//移位需要时间,调用延时函数
    		srclk=0;
    	}
        rclk=1;//把移位寄存器的数据放到数据存储寄存器
    	_nop_();
    	_nop_();
    	rclk=0;
    }
    void delay(u16 i)
    {
    	while(i--);
    }
    void main()
    {
    	u16 i;
    	while(1)
    		for(i=0;i<8;i++)
    		{
    			P0=ledwei[i];
    			hc595sendbyte(ledduan[i]);
    			delay(100);
    			hc595sendbyte(0x00);
    		}
    	
    }

  • 相关阅读:
    【Vjudge】P1989Subpalindromes(线段树)
    【Luogu】P3358最长k可重区间集问题(费用流)
    【未有之有】洛森设定随笔
    14-Perl 引用
    13-Perl 子程序(函数)
    12-Perl 时间日期
    11-Perl 运算符
    10-Perl 循环
    9-Perl 条件语句
    8-Perl 哈希
  • 原文地址:https://www.cnblogs.com/eason9906/p/11755117.html
Copyright © 2020-2023  润新知